我创建了一个加载的应用程序,并使用swift登录/注册页面等。目前我有一个图像作为背景,但想添加代码,所以有一个gif / mov在后台播放,如藤蔓或Instagram等应用程序。
如何将视频与我当前的代码集成?我也是新手,所以一直在关注教程。此外,如果有人知道如何删除解析徽标,这也会有所帮助。
视频出现在我的故事板上的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)
}
}
以下代码允许您为视图控制器添加视频背景。
它写在Swift
并播放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
}
}
对于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
}
}
这有效,用这个替换你刚刚放在那里的所有代码:
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)
非常简单,首先将您的gif拖入Assets.xcassets。第二个在代码中获取文件(可能在配置视图方法中。
var filePath = NSBundle.mainBundle().pathForResource(“YourImageNameHere”, ofType: “gif”)
var gif = NSData(contentsOfFile: filePath)
var webViewBG = UIWebView(frame: self.view.frame)
webViewBG.loadData(gif, MIMEType: “image/gif”, textEncodingName: nil, baseURL: nil)
webViewBG.userInteractionEnabled = false;
self.view.addSubview(webViewBG)
你去了,只要确保你的按钮和其他UIElements背后有webView
这是完整的解决方案。负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)
hexStringToUIColor方法:
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)
)
我写了一个名为UIView
的Swift SDLoopingVideoView
子类,它播放并循环任何兼容的AVPlayer
视频文件,并自动缩放它以填充视图。它可以在Interface Builder中完全设置。这项工作非常适合作为视频背景。你可以在Github上找到它:SDLoopingVideoView