注目の新機能
iOS9から利用可能になった機能はたくさんありますが、個人的に気になった iPadの新しいマルチタスク機能 について、色々と調べてみました。
つい先日発売された iPad mini 4 や、11月発売の期待の新製品 iPad Pro など、新機種も続々登場しているiPadの力を十分に発揮できるよう、これらの機能を覚えていきましょう!
マルチタスク機能の概要
iOS 9 でAppleが発表した新しいマルチタスク機能(Multitasking enhancements in iOS 9)は、大きく3種類あります。公式でも大きく紹介されている機能なので、ご存知の方も多いと思います。ここでおさらいしましょう。
Slide Over
あるアプリを操作しながら、画面右端に2つ目のアプリをオーバーレイ表示で起動させる機能です(言語によって左端に表示します)。
メインのアプリから離れることなく2つ目のアプリを操作できるので、ゲームをしながらSafariで調べ物をしたり、メールを書きながら地図で調べたり、ということがスムーズに行えるようになりますね。
Split View
Slide Over と同様、2つ目のアプリを起動できる機能です。
ただし Slide Over と違い、どちらもアクティブ状態のままであり、どちらのアプリも同時に操作が可能です(Slide Overは、2つ目のアプリを操作中は1つ目のアプリを操作できません)。
この機能の利用中は、画面が完全に2分割されます。この画面を分割している仕切りは、ユーザが左右に移動させることができ、各アプリの表示領域をある程度操作可能です。
ピクチャ・イン・ピクチャ
ビデオ再生中にホームボタンを押すことで、ビデオ画面だけが小窓で表示され続ける機能です(すでにyoutubeアプリが似た機能を実装しています)。この小窓は、画面上を移動させることができ、ある程度のリサイズも可能です。
この状態で別のアプリも起動できるので、FaceTimeでビデオ通話しながら作業をしたり、映画を見ながらメモをとったりすることができるようになります。
各機能をサポートするモデル
今回挙げた機能は、残念ながらすべてのiPadで利用できるというわけではありません。以下に挙げる通り、iPad Air 以降、もしくは iPad Mini 2 以降 となります。Split View においては、利用できるモデルがさらに絞られてしまいます。
モデル | Slide Over | Picture in Picture | Split View |
---|---|---|---|
iPad Mini 2 | ● | ● | |
iPad Mini 3 | ● | ● | |
iPad Mini 4 | ● | ● | ● |
iPad Air | ● | ● | |
iPad Air 2 | ● | ● | ● |
なお、11月発売予定の iPad Pro では、すべての機能が利用可能と思われます。
Slide View と Split View を使ってみる
自分で作ったアプリを Slide View や Split View に対応させるときは、以下の手順を踏んでください。思った以上にやることは少ないです。
1. Base SDK を最新にする
プロジェクトTARGETの Build Settings を開き、Base SDK を Latest iOS にします。
2. LaunchScreen.storyboard を用意する
スプラッシュ画面を表示するための、LaunchScreen.storyboard を用意します。Defaults.png を利用してスプラッシュ画面を表示している場合は、Slide View / Split View が利用できなくなりますので注意してください。
3. すべての向きをサポートする
Info.plist の Supported interface orientations (iPad) に対して、すべての方向をサポートするように宣言します。
iPadアプリであれば、サポートしているのが大半だと思いますが、どちらか一方のみをサポートしているアプリなのであれば、これを機に全方向のサポートを行いましょう!
Slide View / Split View に対応したくない場合
ここに挙げた3つの条件を満たしているが、Slide View / Split View には対応したくない、という場合は、Requires full screen にチェックを入れることで、明示的にサポートを外すことが可能です。
もしくはInfo.plistに UIRequiresFullScreen を追加し、値を YES にしてください。
ただし、Appleとしては、すべてのiPadアプリが Slide View / Split View に対応することを望んでいるようです。ユーザとしても、マルチタスク起動ができなかった場合、ネガティブなイメージを残してしまう可能性があります。
何か特別な理由がない限り、これらの機能に対応しておくのが望ましいと思われます。
でも、ユーザが任意で機能をOFFすることができます…
設定画面の 一般 > マルチタスク > 複数のAppを許可 をOFFにすることで、ユーザが任意に Slide View / Split View 機能をOFFにすることができます。端末のスペックに不安のあるモデルを使っているユーザなどは、この機能をOFFにしている可能性もありますね。
実機でのテスト中、なぜかこれらの機能が動かない…という場合は、この設定を確認してみるのも良いと思います。
画面のサイズについて
iPadアプリの画面サイズは、PortraitでもLandscapeでも、縦横方向ともに、size classesが Regular でした。ですが Slide View / Split View を利用した場合は、これらのルールが大きく変わります。
以下に、各レイアウトでの size classes の値を表示します。
このように、アプリのレイアウトはユーザの操作(仕切りの移動や端末の回転)で、めまぐるしく変化することになります。これらの変化に柔軟に対応できるよう、Auto Layout や size classes を正しく設定しましょう。
また、UITraitEnvironmentプロトコル や UIContentContainerプロトコル などの、画面サイズの変更に反応するメソッドを正しく実装し、画面サイズやレイアウトの変更に対応しましょう。
アプリの状態変化について
Split View は、仕切りを移動させるたびに、アプリが非アクティブ状態になります(No2)。そして、仕切りから指を離しサイズが確定すると、アプリが再びアクティブ状態に戻ります(No3)。
アプリの Application Delegate オブジェクトは、仕切りが移動して非アクティブ状態になるごとに、applicationWillResignActive: メソッドが呼び出されています。 そして、仕切りから指が離れてアクティブ状態になるごとに、applicationDidBecomeActive: メソッドが呼び出されています。
さらに仕切りを左方向に移動すると(No4)、左側のアプリは終了し、右側のアプリのみが単体で起動している状態になります。 この時、左側のアプリはバックグラウンド状態に移行しており、applicationDidEnterBackground: メソッドが呼び出されています(No5) 。
ピクチャ・イン・ピクチャ を使ってみる
次は、ピクチャ・イン・ピクチャ機能を実装したアプリを作ってみましょう。Slide View, Split View の時と同様、事前に行っておくべき設定を以下に挙げます。
1. Base SDK を最新にする
先ほどと同様、Base SDK を Latest iOS にします(スクリーンショットは省略します)。
2. バックグラウンドでの動画再生を許可する
Capabilitiesの Background Modes をONにし、Audio, AirPlay and Picture in Picture にチェックを入れます。こうすることで、バックグラウンドでの動画再生を許可します。
3. オーディオセッションの設定を行う
バックグラウンドでの再生を行うためには、オーディオセッションのカテゴリを設定する必要があります(ここではオーディオセッションについての詳しい解説は省きます)。
AppDelegateクラスにて、以下のように設定してください。
import UIKit import AVFoundation @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { do { let audioSession = AVAudioSession.sharedInstance() try audioSession.setCategory(AVAudioSessionCategoryPlayback) } catch { // エラー処理. } return true } }
画面と機能の実装
ピクチャ・イン・ピクチャ機能を実装する場合、大きく分けて3つの方法があります。
- AVPlayerViewController を利用し、OSデフォルトのプレイヤーを利用する
- AVPictureInPictureController と AVPlayerLayer を利用し、独自にカスタムしたプレイヤーを利用する
- WKWebView を利用して、Webページ上のコンテンツを再生する
このように、AVKit, AV Foundation の機能を利用し、ピクチャ・イン・ピクチャ機能を実装する形になります。
WKWebViewを利用すれば、アプリ側は特に何もせずにピクチャ・イン・ピクチャ機能を実装できるのですが、その場合はWebページ側が対応している必要があります。
今回は、AVPlayerViewController を利用した方法を採用しようと思います。
1. ストーリーボードの設定
イニシャルのViewControllerを AVPlayerViewController にします。 storyboardを開き、AVKit Player View Controller を配置してください。この画面を初期画面にするため、初期画面を表す矢印を持ってきます。
また、クラスの実体を独自のカスタムクラスにします(ここではViewControllerというクラスを割り当てています)。当然、このViewControllerというクラスは、AVPlayerViewController のサブクラス として定義してください。
2. ViewControllerクラスの設定
ストーリーボードでも設定した ViewController というクラスは、以下のように定義しています。
具体的には、AVPlayerViewController のサブクラスとして定義し、viewDidLoadメソッド の中で、見たい動画のURLを指定した AVPlayerインスタンス を生成しています。
import UIKit import AVKit import AVFoundation // AVPlayerViewControllerのサブクラスとして定義. class ViewController: AVPlayerViewController { override func viewDidLoad() { super.viewDidLoad() // 見たい動画のURLをNSURLオブジェクトとして生成. let str = "http://qthttp.apple.com.edgesuite.net/1010qwoeiuryfg/sl.m3u8" guard let url = NSURL(string: str) else { return } // 自身のプロパティに、URLを指定してAVPlayerインスタンスを設定. self.player = AVPlayer(URL: url) } }
今回サンプルとして用意した動画はHLS形式のストリーミング動画ですが、アプリ内にバンドルしたmov形式の動画などでも問題ありません。
3. App Transport Security (ATS) に対応
今回用意した動画がHTTPアクセスする動画なので、ATS対応を行わなくてはいけません(例によってATSについての詳細は省きます)。Info.plist に以下を追加してください。
: : : NSAppTransportSecurity NSAllowsArbitraryLoads
実装はここまでです。とても簡単ですね!
動かしてみよう!
アプリを実行してみましょう。プレイヤーが表示されていて、再生ボタンをタップすれば動画が再生されますね!
ホームボタンを押せば、ピクチャ・イン・ピクチャ機能がスタートします!
この小窓は、移動したりリサイズしたりできます。
当然、別アプリを起動しながらでも再生は続きます。
ピクチャ・イン・ピクチャ機能も、ユーザがOFFにできます
Slide View, Split View と同様、設定画面の 一般 > マルチタスク > オーバーレイでのビデオの継続再生 をOFFにすることで、ユーザが機能をOFFにすることができます。
実機テストを行う際には、この設定が正しくONになっていることを忘れずに確認しましょう!
せっかくなので実装したい機能ばかり
今回調べた機能は、実装も簡単で、ユーザが受ける恩恵も大きいものであると言えます。すでにiPad向けにリリースしているアプリがあるのであれば、Slide View や Split View には是非対応したいですね。ピクチャ・イン・ピクチャ機能も、積極的に取り入れていきたい機能ではあります。
iPad Pro のリリースに向け、新しいマルチタスク機能をどんどん使っていきましょう!