编辑:它不是标记链接的副本。如果仔细观察,问题就不同了。
如何在视频进入背景时在屏幕顶部显示屏蔽视图?我正在开发一个受密码保护的内容应用程序,它需要一个掩码屏幕,以便在进入后台时隐藏内容(这样双击主页按钮不会显示内容或视频)。如果没有视频播放但是在任何视频(例如YouTube)上失败,我的掩码视图逻辑工作正常,视频快照清晰可见。
这个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()
}
答案 0 :(得分:2)
你的问题是你使用了错误的方法。当你按两次主页按钮时,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
}
。我用下面的代码测试你的案例。
window
UPD :我的猜测没有成功,因为你没有给我更多信息。但现在我明白了:问题是,当你播放嵌入式视频时,它会创建与你重叠的新window
。在这个pviews
中你有一堆不同视图的玩家(你可以使用chisel工具的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()
}
命令查看这些信息。为了解决这种情况,我使用下面的代码。 (AppDelegate中)
FormInput