向iOS应用程序注册添加视频背景,如Instagram和Vine

向iOS应用程序注册添加视频背景,如Instagram和Vine,ios,swift,video,background-image,ios9,Ios,Swift,Video,Background Image,Ios9,我已经创建了一个应用程序,使用swift加载并具有登录/注册页面等。目前,我有一个图像作为背景,但想添加代码,以便在背景中播放gif/mov,就像在vine或instagram等应用程序中一样 如何将视频与当前代码集成?我对此也很陌生,所以一直在学习教程。另外,如果有人知道我如何删除parse徽标,那也会很有帮助 视频出现在我的故事板上的UI前面!如何让它们出现在背景GIF的前面 下面是我目前拥有的登录视图控制器代码 import UIKit import Foundation class S

我已经创建了一个应用程序,使用swift加载并具有登录/注册页面等。目前,我有一个图像作为背景,但想添加代码,以便在背景中播放gif/mov,就像在vine或instagram等应用程序中一样

如何将视频与当前代码集成?我对此也很陌生,所以一直在学习教程。另外,如果有人知道我如何删除parse徽标,那也会很有帮助

视频出现在我的故事板上的UI前面!如何让它们出现在背景GIF的前面

下面是我目前拥有的登录视图控制器代码

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)

}

}
导入UIKit
进口基金会
类签名查看控制器:UIViewController、UIExtFieldDelegate{
@ibvar用户名:UITextField!
@IBOUTLE弱var密码:UITextField!
@IBVAR错误标签:UILabel!
重写func viewDidLoad(){
super.viewDidLoad()
让filePath=NSBundle.mainBundle().pathForResource(“beachwater”,类型为:“gif”)
让gif=NSData(contentsOfFile:filePath!)
让webViewBG=UIWebView(框架:self.view.frame)
webViewBG.loadData(gif!,MIMEType:“image/gif”,textcodengname:“UTF-8”,baseURL:NSURL(字符串:“”)!)
webViewBG.userInteractionEnabled=false;
self.view.addSubview(webViewBG)
userName.delegate=self
password.delegate=self
}
@iAction func Signin触动(发送方:UIButton){
让signin=signin(用户:userName.text!,pass:password.text!)
做{
试试signin.signInUser()
self.dismissViewControllerAnimated(真,完成:无)
}将错误捕获为错误{
errorLabel.text=error.description
}抓住{
errorLabel.text=“很抱歉出现了问题\n请重试”
}
}
覆盖功能触摸开始(触摸:设置,withEvent事件:UIEvent?){
self.view.endEditing(true)
}
}

非常简单,首先将gif拖到Assets.xcsets中。 其次,以代码(可能是配置视图方法)获取文件

    var filePath = NSBundle.mainBundle().pathForResource(“YourImageNameHere”, ofType: “gif”)
    var gif = NSData(contentsOfFile: filePath)
  • 创建UIWebView并添加GIF NSData作为其数据源

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

  • 这样,只需确保按钮和其他UIElement后面有webView即可。这是可行的,请用以下代码替换刚才放在那里的所有代码:

         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)
    
    这是所有测试和工程100%

    编辑Swift 3并将Gif置于背景中:

    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)
    

    以下代码允许您为视图控制器添加视频背景

    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)
    
    }
    
    }
    
    它用
    Swift
    编写并播放
    mp4
    视频文件

    对于
    Swift 5

    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 = .resizeAspectFill
            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: .AVPlayerItemDidPlayToEndTime,
                                               object: avPlayer.currentItem)
        }
    
        @objc func playerItemDidReachEnd(notification: Notification) {
            let p: AVPlayerItem = notification.object as! AVPlayerItem
            p.seek(to: .zero)
        }
    
        override func viewDidAppear(_ animated: Bool) {
            super.viewDidAppear(animated)
            avPlayer.play()
            paused = false
        }
    
        override func viewDidDisappear(_ animated: Bool) {
            super.viewDidDisappear(animated)
            avPlayer.pause()
            paused = true
        }
    }
    

    这是完整的解决方案。负z位置很重要

    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)
    

    谢谢!要添加渐变:

    let gradient: CAGradientLayer = CAGradientLayer()
        gradient.colors = [self.hexStringToUIColor(hex: "#141414").cgColor,self.hexStringToUIColor(hex: "#323232").cgColor]
        gradient.locations = [0.0,1.0]
        gradient.opacity = 0.8
        gradient.startPoint = CGPoint(x: 1.0, y: 0.0)
        gradient.endPoint = CGPoint(x: 1.0, y: 1.0)
        gradient.frame = viewLogin.layer.frame
        viewLogin.layer.insertSublayer(gradient, at: 0)
    
    六色法:

    var cString:String = hex.trimmingCharacters(in: .whitespacesAndNewlines).uppercased()
    
        if (cString.hasPrefix("#")) {
            cString.remove(at: cString.startIndex)
        }
    
        if ((cString.count) != 6) {
            return UIColor.gray
        }
    
        var rgbValue:UInt32 = 0
        Scanner(string: cString).scanHexInt32(&rgbValue)
    
        return UIColor(
            red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0,
            green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0,
            blue: CGFloat(rgbValue & 0x0000FF) / 255.0,
            alpha: CGFloat(1.0)
        )
    

    我编写了一个名为
    SDLoopingVideoView
    的Swift
    UIView
    子类,它可以播放和循环任何兼容的
    AVPlayer
    视频文件,并自动缩放它以填充视图。它可以在Interface Builder中完全设置。这项工作非常适合作为视频背景。您可以在Github上找到它:

    只需在背景,并在您在webview中打开的项目中包含gif。看起来很简单,但在我的代码中这一切都会发生在哪里?在中,在ViewDidLoad中用此代码替换背景图像这是我遇到的错误…Nil与预期的参数类型“String”不兼容。在哪一行?这两行都有问题:var gif=NSData(contentsOfFile:filePath)webViewBG.loadData(gif,MIMEType:“image/gif”,textcencodingname:nil,baseURL:nil)因此,这段代码没有错误,非常棒!但我现在遇到了一个问题,gif不会出现在我的文本后面。它只是空白。我正在使用解析进行登录,所以我想知道这是否与此有关,我需要另一行代码来显示按钮后面的视频。我将放一个屏幕截图,以便您可以看到我的结果。它将当我把它单独放在一个视图控制器中而没有其他东西在里面时,我很困惑为什么它不会进入后台。好的,确保代码是viewDidLoad()中的第一行方法。运气不好。我认为它不起作用,因为它是一个用于解析的PFLogInViewController…所以这段代码很好,但现在它不会出现在故事板中所有其他项目的后面:/Works很好。问题。你在立即加载它时有任何问题吗?我的代码在几秒钟后显示我可以添加透明层,现在就出现了?这真是太棒了,现在唯一的问题是它暂停播放音乐,在播放音乐时视频暂停-但这可能是由于AVPlayer的缘故implmentation@JCarlos对于添加渐变,请注释
    //view.backgroundColor=.clear
    并添加