编辑:它不是标记链接的副本。如果您仔细观察,问题就不一样了。
如何在视频进入背景时在视频顶部显示 mask View ?我正在开发一个受密码保护的内容应用程序,该应用程序在进入后台时需要一个 mask 屏幕来隐藏内容(这样双击主页按钮就不会显示内容或视频)。如果没有视频播放但在任何视频(例如 YouTube)上失败,我的蒙版 View 逻辑工作正常,视频快照清晰可见。
这post一般谈论问题,但不是在播放视频时。有了视频,问题依然存在。我到目前为止的代码。
//AppDelegate.swift
var maskView: UIView!
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
maskView.backgroundColor = UIColor.redColor()
return true
}
func applicationDidEnterBackground(application: UIApplication) {
window?.addSubview(maskView)
}
func applicationWillEnterForeground(application: UIApplication) {
maskView.removeFromSuperview()
}
最佳答案
你的问题是你使用了错误的方法。 applicationDidEnterBackground
当您按下主页按钮两次时未被调用。我建议您不要使用此方法,而是使用 applicationWillResignActive
,即使用户打开 NotificationCenter
也会调用该方法。我用下面的代码测试你的案例。
// appDelegate:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
maskView = UIView(frame: UIScreen.mainScreen().bounds)
maskView.backgroundColor = UIColor.redColor()
return true
}
func applicationWillResignActive(application: UIApplication) {
window?.addSubview(maskView)
}
func applicationWillEnterForeground(application: UIApplication) {
maskView.removeFromSuperview()
}
// PlayerViewController
@IBOutlet weak var videoView: PlayerView! // root view of current controller
let player = AVPlayer(URL: NSURL(string: "http://www.ebookfrenzy.com/ios_book/movie/movie.mov")!)
override func viewDidLoad() {
videoView.setPlayer(player)
}
override func viewDidAppear(animated: Bool) {
player.play()
}
// PlayerView
override class func layerClass() -> AnyClass {
return AVPlayerLayer.classForCoder()
}
func setPlayer(player: AVPlayer) {
(layer as! AVPlayerLayer).player = player
}
UPD:我的猜测没有成功,因为你没有给我更多的信息。但现在我明白了:问题是当您播放嵌入式视频时,它会创建与您重叠的新 window
。在这个 window
中,您有播放器和一堆不同的 View (您可以使用 chisel 工具的 pviews
命令查看此信息)。为了解决这种情况,我使用下面的代码。 (应用委托(delegate))
var maskViews: [UIView] = []
func maskView() -> UIView {
let view = UIView(frame: UIScreen.mainScreen().bounds)
view.backgroundColor = UIColor.redColor()
return view
}
func applicationWillResignActive(application: UIApplication) {
for window in UIApplication.sharedApplication().windows {
let mask = maskView()
maskViews.append(mask)
window.addSubview(mask)
}
}
func applicationDidBecomeActive(application: UIApplication) {
for view in maskViews {
view.removeFromSuperview()
}
maskViews.removeAll()
}
关于ios - 进入背景时在视频顶部 mask View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33808797/