LoginSignup
6
6

More than 5 years have passed since last update.

iOS7,8互換でPicture-in-Pictureを導入するには?

Last updated at Posted at 2015-06-13

さて、Picture-in-Picture、どう対応しましょう。

AVPlayerViewControllerはiOS8以上のみ、
AVPictureInPictureControllerはiOS9以上のみ、使えます。

既存のコードにどうやって入れ込んでいけばいいのでしょうか。
iOS7をdeploy targetにしたサンプルを作って考えてみました。

もちろん、PiPの機能自体はどうやってもiOS9のiPad Air*, iPad mini [23]でしか使えません。

サンプルコード

コードを見ていただければ分かるのですが、ポイントは 、

  • #availableでのOSバージョン分岐
  • AVPlayerViewControllerを使わない場合、PiPを使う部分は別クラス(今回はサブクラス)として切り出し、初期化時に選択

です。
こんな感じです。

  override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    switch indexPath.row {
    case 0: // AVPlayerViewControllerを使う場合
      if #available(iOS 8.0, *) {
        let vc = ModernPlayerViewController() // subclass of AVPlayerViewController
        navigationController?.pushViewController(vc, animated: true)
      }
    case 1: // UIViewControllerを使う場合
      let vc:OldStylePlayerViewController
      if #available(iOS 9.0, *) {
        vc = PiPOldStylePlayerViewController() // subclass of OldStyle..
      } else {
        vc = OldStylePlayerViewController() // subclass of UIViewController
      }
      navigationController?.pushViewController(vc, animated: true)
    default:
      break
    }
  }

AVPlayerViewControllerを使わずにプレイヤーUIをガンガンカスタマイズする/している場合は、子クラスとして切り出すことで既存のコードにはほとんど手を加えなくて良さそうです。

なおAppleもサンプルコードを公開しています。
こっちの方がちゃんと作りこまれてますので、実際の実装で参考にしたい方はこっちを見た方がいいかもしれません。
AVFoundationPiPPlayer: Picture-in-Picture Playback with AVKit

まとめ

今WWDCのセッションビデオを見ていますが、Multitaskingのセッションが大量にあってかつ内容が濃いので、キャッチアップが大変そうな印象です。
PiPも上記は入り口で、PiPから戻ってきた時どうすんの、とか、PiPしている間はplayerViewのUI隠さなきゃ(AVPlayerViewControllerを使わない場合)、とか色々考えることがあると思います。
これ以外にもSlide OverとSplit Viewのことも考えないといけないとなると。。。うん、もうやめましょう。

まあ、見てない人は今すぐチェックした方がいいです。やばいです。

さて余談ですが、上記のアプリを早速自分のiPad mini 2をiOS9betaにして試してみました。
盛大にOSがクラッシュしました。

実機で試される方はご注意を。。

追記

ちなみに、iOS7で実際に動くかどうかは手元に端末がなくて未確認なので、誰かもし確認してダメだったら教えてください。。
一応来週確認しようと思ってます。
=>iOS7でも動きました。

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6