🦋
【iOS】SwiftUIアプリにピクチャ・イン・ピクチャ(PiP)を統合する方法
SwiftUIでのPiP実装のステップ
PiPの実装は、AVKit
のAVPictureInPictureController
を使用することにより行われます。ここでは、SwiftUIアプリケーションでPiP機能を統合するためのステップを詳しく説明します。
Step 1: プレイヤーのセットアップ
まず、AVPlayer
を使用してビデオプレイヤーをセットアップします。このプレイヤーは、ビデオコンテンツを再生するために必要です。次に、AVPlayerLayer
にこのプレイヤーを割り当て、そのレイヤーをビューのサブレイヤーとして追加します。
import AVKit
class VideoPlayerViewController: UIViewController {
private var playerLayer: AVPlayerLayer?
var player: AVPlayer?
override func viewDidLoad() {
super.viewDidLoad()
setupPlayer()
}
private func setupPlayer() {
guard let player = player else { return }
playerLayer = AVPlayerLayer(player: player)
playerLayer?.frame = self.view.bounds
playerLayer?.videoGravity = .resizeAspect
if let playerLayer = playerLayer {
self.view.layer.addSublayer(playerLayer)
}
}
}
Step 2: PiPのセットアップ
PiP機能は、AVPictureInPictureController
を使用して実装されます。このコントローラは、PiPがサポートされているデバイスでのみ使用可能です。そのため、サポートの有無をチェックする必要があります。
private func setupPiP() {
guard AVPictureInPictureController.isPictureInPictureSupported() else {
print("PiP is not supported on this device.")
return
}
pipController = AVPictureInPictureController(playerLayer: playerLayer!)
pipController?.delegate = self
}
Step 3: PiPモードの開始
PiPモードは、ユーザーのアクションに応じて開始されるべきです。例えば、ボタンをタップしたときにPiPを開始することができます。
Button("Start PiP") {
// PiPを開始する
if let viewController = UIApplication.shared.windows.first?.rootViewController as? VideoPlayerViewController {
viewController.startPiP()
}
}
これでPiPを実装できました。
サンプルコードを書いたので確認してください!
Discussion