AVPictureInPictureController(iPad画中画)

画中画仅支持iPad(iOS 9级以上)

首先,来一波效果图:

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

当前应用内开启画中画的效果
在这里插入图片描述

类介绍

@available(iOS 9.0, *)
open class AVPictureInPictureController : NSObject {
    
	/// 类方法,检测是否支持画中画
    open class func isPictureInPictureSupported() -> Bool
    
	/// 系统自带的开启画中画功能图片(PS:一般用在开启画中画功能按钮上)
    open class func pictureInPictureButtonStartImage(compatibleWith traitCollection: UITraitCollection?) -> UIImage
    
	/// 系统自带的停止画中画功能图片(PS:一般用在停止画中画功能按钮上)
    open class func pictureInPictureButtonStopImage(compatibleWith traitCollection: UITraitCollection?) -> UIImage
    
    /// 系统自带的开启画中画功能图片(PS:一般用在开启画中画功能按钮上)
    open class var pictureInPictureButtonStartImage: UIImage { get }

    /// 系统自带的停止画中画功能图片(PS:一般用在停止画中画功能按钮上)
    @available(iOS 13.0, *)
    open class var pictureInPictureButtonStopImage: UIImage { get }

    /// pip创建方法
    public init?(playerLayer: AVPlayerLayer)

    /// 播放的playerLayere
    open var playerLayer: AVPlayerLayer { get }

	/// pip代理
    weak open var delegate: AVPictureInPictureControllerDelegate?

    /// 开启画中画.将会调用`-pictureInPictureControllerWillStartPictureInPicture:'.如果开启成功,将会调用`-pictureInPictureControllerDidStartPictureInPicture:`.如果开启失败,将会调用`-pictureInPictureControllerFailedToStartPictureInPicture:withError:`
    open func startPictureInPicture()

    
	/// 停止画中画功能(播放不会停止.会跑到之前的avplayerlayer上)
    open func stopPictureInPicture()

    
    /// 是否可以进行画中画
    open var isPictureInPicturePossible: Bool { get }

    
	/// 当前画中画是否已经开启(画中画是否处于活动状态)
    open var isPictureInPictureActive: Bool { get }

    
    /// 画中画是否处于暂停状态
    open var isPictureInPictureSuspended: Bool { get }
}


/// 画中画代理
@available(iOS 9.0, *)
public protocol AVPictureInPictureControllerDelegate : NSObjectProtocol {

    /// 画中画将要开始
    optional func pictureInPictureControllerWillStartPictureInPicture(_ pictureInPictureController: AVPictureInPictureController)

    /// 画中画成功开启
    optional func pictureInPictureControllerDidStartPictureInPicture(_ pictureInPictureController: AVPictureInPictureController)

    /// 画中画开启失败
    optional func pictureInPictureController(_ pictureInPictureController: AVPictureInPictureController, failedToStartPictureInPictureWithError error: Error)

    
    /// 画中画将要停止
    optional func pictureInPictureControllerWillStopPictureInPicture(_ pictureInPictureController: AVPictureInPictureController)

    /// 画中画已经停止
    optional func pictureInPictureControllerDidStopPictureInPicture(_ pictureInPictureController: AVPictureInPictureController)

    /// 当画中画播放结束时.使用此方法重新建立视频播放用户界面(无论如何结束都会调动此方法.1.播放视频结束.2.用户点X结束.3.用户点按返回App.PS:暂停和播放按钮不会调用)
    optional func pictureInPictureController(_ pictureInPictureController: AVPictureInPictureController, restoreUserInterfaceForPictureInPictureStopWithCompletionHandler completionHandler: @escaping (Bool) -> Void)
}

官方Demo

重点

  • 1.开启后台模式(Audio,AirPlay,and Picture in Picture).
  • 2.设置(playback或是playAndRecord)的AVAudioSession
  • 3.持有一个AVPictureInPictureController属性.
  • 4.关于WKWebView.设置allowsPictureInPictureMediaPlayback为YES即可支持pip.

关于第三条,举个例子.如果直接在ViewDidLoad里面创建一个局部的AVPictureInPictureController.(initWith.AVPlayer的layer).是不会有pip画面的.

上文中的系统带的开启/关闭画中画图片:

开启画中画图片:
在这里插入图片描述

关闭画中画图片:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值