进入背景时,在视频顶部屏蔽视图

时间:2015-11-19 16:04:47

标签: ios swift swift2

编辑:它不是标记链接的副本。如果仔细观察,问题就不同了。

如何在视频进入背景时在屏幕顶部显示屏蔽视图?我正在开发一个受密码保护的内容应用程序,它需要一个掩码屏幕,以便在进入后台时隐藏内容(这样双击主页按钮不会显示内容或视频)。如果没有视频播放但是在任何视频(例如YouTube)上失败,我的掩码视图逻辑工作正常,视频快照清晰可见。

Need to mask the video from background

这个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()
}

1 个答案:

答案 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