Agregar un background de video al logging de la aplicación iOS como Instagram y Vine

He creado una aplicación que se carga y tiene una página de inicio de session / logging, etc. usando swift. Actualmente tengo una image como background pero me gustaría agregar un código para que haya un gif / mov en el background como en aplicaciones como vine o instagram.

¿Cómo puedo integrar el video con mi código actual? También soy muy nuevo en esto, así que he seguido los tutoriales. Además, si alguien sabe cómo puedo eliminar el logotipo de Parse, eso también sería útil.

¡Aparece el video pero en frente de la interfaz de usuario en mi storyboard! ¿Cómo puedo hacer que aparezcan delante del background GIF?

A continuación se muestra mi código que tengo actualmente para mi controller de vista de inicio de session.

import UIKit import Foundation class SignInViewController: UIViewController, UITextFieldDelegate { @IBOutlet weak var userName: UITextField! @IBOutlet weak var password: UITextField! @IBOutlet weak var errorLabel: UILabel! override func viewDidLoad() { super.viewDidLoad() let filePath = NSBundle.mainBundle().pathForResource("beachwater", ofType: "gif") let gif = NSData(contentsOfFile: filePath!) let webViewBG = UIWebView(frame: self.view.frame) webViewBG.loadData(gif!, MIMEType: "image/gif", textEncodingName: "UTF-8", baseURL: NSURL(string: "")!) webViewBG.userInteractionEnabled = false; self.view.addSubview(webViewBG) userName.delegate = self password.delegate = self } @IBAction func signInTouched(sender: UIButton) { let signin = SignIn(user: userName.text!, pass: password.text!) do { try signin.signInUser() self.dismissViewControllerAnimated(true, completion: nil) } catch let error as Error { errorLabel.text = error.description } catch { errorLabel.text = "Sorry something went\n wrong please try again" } } override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { self.view.endEditing(true) } } 

El siguiente código le permite agregar un background de video para su controller de vista.

Está escrito en Swift y reproduce files de video mp4 .

 import AVFoundation class VideoBackgroundController: UIViewController { var avPlayer: AVPlayer! var avPlayerLayer: AVPlayerLayer! var paused: Bool = false override func viewDidLoad() { let theURL = NSBundle.mainBundle().URLForResource("my_video_file", withExtension: "mp4") avPlayer = AVPlayer(URL: theURL!) avPlayerLayer = AVPlayerLayer(player: avPlayer) avPlayerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill avPlayer.volume = 0 avPlayer.actionAtItemEnd = AVPlayerActionAtItemEnd.None avPlayerLayer.frame = view.layer.bounds view.backgroundColor = UIColor.clearColor(); view.layer.insertSublayer(avPlayerLayer, atIndex: 0) NSNotificationCenter.defaultCenter().addObserver(self, selector: "playerItemDidReachEnd:", name: AVPlayerItemDidPlayToEndTimeNotification, object: avPlayer.currentItem) } func playerItemDidReachEnd(notification: NSNotification) { let p: AVPlayerItem = notification.object as! AVPlayerItem p.seekToTime(kCMTimeZero) } override func viewDidAppear(animated: Bool) { super.viewDidDisappear(animated) avPlayer.play() paused = false } override func viewDidDisappear(animated: Bool) { super.viewDidDisappear(animated) avPlayer.pause() paused = true } } 

Para Swift 3 .

 import AVFoundation class VideoBackgroundController: UIViewController { var avPlayer: AVPlayer! var avPlayerLayer: AVPlayerLayer! var paused: Bool = false override func viewDidLoad() { let theURL = Bundle.main.url(forResource:"my_video_file", withExtension: "mp4") avPlayer = AVPlayer(url: theURL!) avPlayerLayer = AVPlayerLayer(player: avPlayer) avPlayerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill avPlayer.volume = 0 avPlayer.actionAtItemEnd = .none avPlayerLayer.frame = view.layer.bounds view.backgroundColor = .clear view.layer.insertSublayer(avPlayerLayer, at: 0) NotificationCenter.default.addObserver(self, selector: #selector(playerItemDidReachEnd(notification:)), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: avPlayer.currentItem) } func playerItemDidReachEnd(notification: Notification) { let p: AVPlayerItem = notification.object as! AVPlayerItem p.seek(to: kCMTimeZero) } override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) avPlayer.play() paused = false } override func viewDidDisappear(_ animated: Bool) { super.viewDidDisappear(animated) avPlayer.pause() paused = true } } 

Esto funciona, reemplaza todo el código que acabas de poner allí con esto:

  let filePath = NSBundle.mainBundle().pathForResource("beach_water", ofType: "gif") let gif = NSData(contentsOfFile: filePath!) let webViewBG = UIWebView(frame: self.view.frame) webViewBG.loadData(gif!, MIMEType: "image/gif", textEncodingName: "UTF-8", baseURL: NSURL(string: "")!) webViewBG.userInteractionEnabled = false; self.view.addSubview(webViewBG) 

Eso es todo probado y funciona al 100%

EDITAR Swift 3 y tener el GIF en segundo plano:

 let filePath = Bundle.main.path(forResource: "beach_water", ofType: "gif") let gif = NSData(contentsOfFile: filePath!) let webViewBG = UIWebView(frame: self.view.frame) webViewBG.load(gif! as Data, mimeType: "image/gif", textEncodingName: "UTF-8", baseURL: NSURL(string: "")! as URL) webViewBG.isUserInteractionEnabled = false webViewBG.layer.zPosition = -2.0 self.view.addSubview(webViewBG) 

Realmente simple, primero arrastra tu gif a tus Assets.xcassets. Segundo obtenga el file en código (probablemente en un método de vista de configuration.

  var filePath = NSBundle.mainBundle().pathForResource(“YourImageNameHere”, ofType: “gif”) var gif = NSData(contentsOfFile: filePath) 
  1. Cree una UIWebView y agregue el GIF NSData como su fuente de datos.

     var webViewBG = UIWebView(frame: self.view.frame) webViewBG.loadData(gif, MIMEType: “image/gif”, textEncodingName: nil, baseURL: nil) webViewBG.userInteractionEnabled = false; self.view.addSubview(webViewBG) 

Y ahí tienes, solo asegúrate de tener el webView detrás de tus Botones y otros UIElement

Esta es la solución completa. ¡La position negativa de z es importante!

 let filePath = NSBundle.mainBundle().pathForResource("Lake", ofType: "gif") let gif = NSData(contentsOfFile: filePath!) let webViewBG = UIWebView(frame: self.view.frame) webViewBG.loadData(gif!, MIMEType: "image/gif", textEncodingName: "UTF-8", baseURL: NSURL(string: "")!) webViewBG.userInteractionEnabled = false webViewBG.layer.zPosition = -2.0 self.view.addSubview(webViewBG)