iOS 9 多任务分屏要点(3)

在 iOS 9 中,一直伴随我们的 MediaPlayer 框架中的视频播放部分正式宣布寿终正寝。也就是说,如果你在使用 MPMoviePlayerViewController 或者 MPMoviePlayerController 在播放视频的话,你就无法使用画中画的特性了,因此尽快转型到新的视频播放框��会是急迫的适配任务。因为画中画模式是基于 AVPlayerLayer 的。当切换到画中画时,会将正在播放视频的 layer 取出,然后进行缩小后添加到新的界面的 layer 上。这也是旧的 MediaPlayer 框架无法支持画中画的主要原因。

如果你使用 AVPlayerViewController 的话,一旦满足这些简单的条件以后,你应该就可以在使用相应框架全屏播放视频时看到右下角的画中画按钮了。不论是点击这个按钮进入画中画模式还是直接使用 Home 键切换到后台,已经在播放的视频就将缩小到屏幕右下角成为画中画,并保持播放。在画中画模式下,系统会在视频的 AVPlayerLayer 上添加一套默认控件,用来控制暂停/继续,关闭,以及返回 app。前两个控制没什么可多说的,返回 app 的话需要我们自己处理返回后的操作。一般来说我们希望能够恢复到全屏模式并且继续播放这个视频,因为 AVPlayerViewController 进行播放时我们一般不会去操作 AVPlayerLayer,在恢复时就需要实现 AVPlayerViewControllerDelegate 中的 -playerViewController:restoreUserInterfaceForPictureInPictureStopWithCompletionHandler: 来根据传入的 ViewController 重建 UI,并将 true 通过 CompletionHandler 返回给系统,已告知系统恢复成功 (当然如果无法恢复的话需要传递 false)。

我们也可以直接用 AVPlayerLayer 来构建的自定义的播放器。这时我们需要通过传入所使用的 AVPlayerLayer 来创建一个 AVPictureInPictureController。AVPictureInPictureController 提供了检查是否支持画中画模式的 API,以及其他一些控制画中画行为的方法。与直接使用 AVPlayerViewController 不太一样的是,在恢复时,系统将会把画中画时缩小的 AVPlayerLayer 返还到之前的 view 上。我们可以通过 AVPictureInPictureControllerDelegate 中的相应方法来获知画中画的执行情况,并结合自己 app 的情况来恢复 UI。

总结

通过之前几年的布局,在 AutoLayout 和 Size Class 的基础上,Apple 在 iOS 9 中放出了多任务这一杀手锏。可以说同屏执行多个 app 的需求从初代 iPad 开始就一直存在,而现在总算是姗姗来迟。在 OS X 10.11 中,Apple 也将类似的特性引入了 OSX app 的全屏模式中,可以说是统一 OSX 和 iOS 这两个平台的进一步尝试。

但是 iPad 上的多任务还是有一些不足的。最大的问题是 app 依然是运行在沙盒中的,这就意味着在 iOS 上我们还是无法在两个 app 之间进行通讯:比如同时打开照片和一个笔记 app,我们无法通过拖拽方式将某张图片直接拖到笔记中去。虽然在 iOS 中也有 XPC 服务,但是第三方开发者现在并不能使用,这在一定程度上还是限制了多任务的可能性。

不过总体来说,多任务特性使得 iPad 的实用性大大上升,这也肯定会是未来用户最常用以及最希望在 app 中看到的特性之一。花一点时间,学习 Adaptive UI 的制作方式,让 app 支持多任务运行,会是一件很合算的事情。

苹果iOS 9值得升级的10个理由 

iOS 的详细介绍请点这里

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/ac7ca2867042b6beb4036b8825f6acae.html