iOS 9:iPad上的多任务处理简介

介绍

在iOS 9中,Apple引入了许多针对iPad的多任务处理功能。 其中包括幻灯片拆分视图画中画 。 如果您不熟悉这些新功能,这里是简要概述。

滑过

iPad Mini 2及更高版本,所有iPad Air型号和iPad Pro均提供Slide Over。 它允许应用程序从屏幕的右侧滑入,并保持屏幕的整个高度(双向)和iPhone屏幕的大致宽度。

滑过

画中画

画中画功能在所有支持Slide Over的iPad型号上均可用。 当您在iPad上使用其他应用程序时,它可以使视频继续以小视图播放。 这个小视图包含三个按钮,用于控制播放,返回全屏,播放/暂停和关闭。 可以调整视图的大小或暂时将其推到屏幕的一侧。

画中画视频

拆分视图

在iPad Mini 4,iPad Air 2和iPad Pro上可以使用Split View。 它允许iPad并排运行两个功能齐全的应用程序。 用户可以在两个应用程序之间移动分隔线以调整大小。

请注意,左侧的应用称为主要应用,右侧的应用称为次应用 应用程式。 主应用程序拥有设备的状态栏,并且始终占据至少一半的屏幕。 但是,如果主应用程序将分隔线一直向左移动,则用户可以将其关闭。

拆分视图

先决条件

本教程要求您在OS X Yosemite或更高版本上运行Xcode 7或更高版本。 它还假定您已经了解了尺寸类别自动布局 。 如果您不熟悉自适应设计,那么我建议您阅读Jordan Morgan 关于自适应设计教程 。 您还需要从GitHub下载入门项目

1.滑过并拆分视图

组态

默认情况下,从任何Xcode 7模板创建的所有应用程序都自动支持“滑动和拆分视图”。 这是因为您的应用是使用LaunchScreen.storyboard文件和启用了size类的Main.storyboard文件创建的。

对于使用早期版本的Xcode创建的项目,可以通过以下两个步骤为您的应用启用“滑行”和“拆分视图”。

第1步

通过选择iOS>用户界面>启动屏幕模板来创建LaunchScreen.storyboard文件。 从主屏幕启动您的应用后,并且仍在加载过程中,将显示启动屏幕。

启动屏幕故事板

请注意,此情节提要替换了您已经为应用程序配置的静态启动图像。

第2步

确保您的用户界面正在使用尺寸类别和“ 自动布局” 。 您可以通过选择项目的情节提要,打开“ 文件检查器” ,然后选中“ 使用自动版面” 在“ 界面生成器文档”部分中使用“尺寸类别”复选框。

故事板配置

请注意,您需要为项目中的每个故事板执行此操作。 既然您知道如何正确地为“滑行和分割视图”配置应用程序,是时候学习如何确保您的应用程序与其他应用程序一起正常工作了。

尺寸等级

对于“滑行”,运行时应用程序的当前大小类别将始终相同。 当您的应用是主要应用时,它将可以访问全屏(常规的宽度和高度尺寸类),并且没有什么不同。 通过“滑行”功能打开应用程序时,无论方向如何,应用程序都将具有紧凑的宽度和常规的高度尺寸类。

但是,在支持Split View的iPad上,您可以随时调整应用窗口的大小,并且需要将其设计为适合这些大小。 下图显示了“拆分视图”应用大小的不同配置以及与此相关的大小类别。

尺寸分类图
资料来源 :Apple在iPad上采用多任务增强功能:滑行和拆分视图快速入门指南

如您所见,除非您的应用程序是主要应用程序,并且设备处于横向模式,否则一旦您必须与另一个应用程序共享屏幕时,您的应用程序将被强制设置为紧凑的宽度尺寸类。 由于大小的更改取决于用户,并且随时可能发生,因此您的应用需要能够在不同视图大小之间平滑过渡。

请注意,在iPad Pro上,在横向和50/50分割视图模式下,两个应用程序均具有常规的宽度水平尺寸类别,如下所示。

iPad Pro水平尺寸等级
从完成的教程应用程序中截取的屏幕截图

回调方法

为了解决这些大小上的变化, UIViewController类遵循UITraitEnvironmentUIContentContainer这两个协议。

UITraitEnvironment

该协议包含一个称为traitCollectionUITraitCollection属性和一个用于此trait集合更改的方法traitCollectionDidChange(_:) 。 通过此特征收集对象,您可以查找有关应用程序运行状态的特定详细信息,例如显示比例,当前水平和垂直尺寸类别,3D触摸(API称为“强制触摸”)功能以及当前设备类型。 (iPhone / iPod Touch,iPad,Apple TV或未指定 )。

UIContentContainer

该协议包含preferredContentSize属性以及用于更改当前容器的大小或特征集合的多种方法。 我们将仔细研究UIContentContainer协议定义的两种方法。

打开您从GitHub下载的入门项目,然后导航到ViewController.swift 。 接下来,将以下方法添加到类定义中:

override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
    super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator)
    
    self.viewWidth.text = "\(size.width)pts wide"
}

override func willTransitionToTraitCollection(newCollection: UITraitCollection, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
    super.willTransitionToTraitCollection(newCollection, withTransitionCoordinator: coordinator)
    
    switch newCollection.horizontalSizeClass {
    case .Compact:
        self.sizeClass.text = "Compact Horizontal Size Class"
    case .Regular:
        self.sizeClass.text = "Regular Horizontal Size Class"
    case .Unspecified:
        self.sizeClass.text = "Unspecified Horizontal Size Class"
    }
}

viewWillTransitionToSize(_:withTransitionCoordinator:)方法中,我们更新viewWidth标签以显示新的屏幕宽度。

willTransitionToTraitCollection(_:withTransitionCoordinator:)方法中,我们检查要转换到哪个水平尺寸类别,并相应地更新sizeClass标签。

您可能已经注意到,这两种方法都提供了UIViewControllerTransitionCoordinator参数。 该对象主要用于在视图控制器之间处理动画,并且与系统处理动画的“拆分视图”多任务处理并没有真正的关系。 之所以存在UIViewControllerTransitionCoordinator参数,是因为这些UIContentContainer协议方法不是拆分视图多任务处理专用的,还可以在其他情况下执行。

在物理设备或iPad Air 2或iPad Pro模拟器中运行您的应用程序。 应用启动后,从屏幕右侧拖入并选择列表中的任何应用。

选择滑盖应用程序

打开应用程序后,按住刚打开的应用程序左侧的小条,如下所示。

开始分割画面

拖动显示在屏幕中间的分隔线,如以下屏幕截图所示,然后松开它。

居中分屏器

当您的应用淡出时,两个标签应使用正确的视图宽度和水平尺寸类别进行更新。

更新的标签

2.画中画视频

与“滑动和拆分视图”一样,如果您使用的是Xcode 7或更高版本,则您的应用将自动支持画中画。 对于视听内容,这是通过使用AVPlayerViewController类完成的。

但是,在开始使用画中画功能之前,您需要为目标启用功能。 选择您的目标,在项目浏览器中打开“ 功能”选项卡,启用“ 背景模式” ,然后选中“ 音频”,“ AirPlay”和“画中画 ”复选框。

画中画功能

再次运行您的应用,然后点击“ 播放视频”按钮。 我在入门项目中包含的视频将开始播放。 在播放视频时,通过按设备上的主屏幕按钮或Command-Shift-H(如果您使用的是模拟器)转到主屏幕。

或者,您可以按左下角的小按钮进入画中画模式。 您会看到视频视图最小化并保留在屏幕上,并带有重新打开,播放/暂停和关闭的按钮。

画中画视频

在此阶段,您会注意到,如果您按下按钮再次开始以全屏模式观看视频,则该应用将打开,但视频播放视图控制器根本不会出现。 您可以通过使视图控制器符合AVPlayerViewControllerDelegate协议来更改此行为。

首先使ViewController类符合AVPlayerViewControllerDelegate协议。

class ViewController: UIViewController, AVPlayerViewControllerDelegate

接下来,用以下实现替换prepareForSegue(_:sender:)

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    let destination = segue.destinationViewController as!
    AVPlayerViewController
    destination.delegate = self
    let url = NSBundle.mainBundle().URLForResource("Video", withExtension: "mp4")!
    destination.player = AVPlayer(URL: url)
    destination.player?.play()
}

最后,将AVPlayerViewControllerDelegate协议的playerViewControllerShouldAutomaticallyDismissAtPictureInPictureStart(_: AVPlayerViewController)方法添加到ViewController类。

func playerViewControllerShouldAutomaticallyDismissAtPictureInPictureStart(playerViewController: AVPlayerViewController) -> Bool {
    return false
}

通过实现此方法,我们确保当进入画中画模式时,视频播放器视图控制器不会关闭。 再次构建并运行您的应用程序,您会看到从画中画重新打开时,视频将继续播放。

如果您没有使用AVPlayerViewController播放内容,则可以通过其他方法来支持画中画视频。 如果使用AVPlayerLayer允许在视频周围使用自定义用户界面,则可以创建AVPictureInPictureController对象以支持画中画。 这样的实现可能看起来像这样:

self.pictureinPictureController = AVPictureInPictureController(playerLayer: layer)
self.pictureinPictureController.delegate = // Any object conforming to the AVPictureInPictureViewControllerDelegate protocol
if AVPictureInPictureController.isPictureInPictureSupported() {
    // Display button to enter Picture in Picture
}

...

func pictureinPictureButtonPressed() {
    self.pictureInPictureController.startPictureInPicture()
}

3.禁用iPad多任务

如果由于某种原因,您不希望您的应用程序支持幻灯片,分割视图或画中画,则可以覆盖Xcode和iOS提供的默认行为。

滑过并拆分视图

对于“滑动和拆分视图”,您需要做的就是将UIRequiresFullScreen键添加到应用程序的Info.plist文件中,并将其设置为YES

画中画

使用AVPlayerViewController类,您只需要将allowsPictureInPicturePlayback属性设置为false

对于具有AVPlayerLayer对象的画中画,您不会创建AVPictureInPictureController

最后,对于通过WKWebView通过网络显示的视频,您需要将视图configurationallowsPictureInPicturePlayback属性设置为false

结论

现在,您应该对创建支持添加到iOS 9的iPad上的新的“滑行”,“拆分视图”和“画中画”多任务处理功能的应用程序充满信心。如您所见,这些新功能使iPad成为更具生产力的工具,对于开发人员来说,在自己的应用程序中实现非常容易。

与往常一样,您可以在下面的评论中留下您的评论和反馈。

翻译自: https://code.tutsplus.com/tutorials/ios-9-an-introduction-to-multitasking-on-ipad--cms-25151

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值