PIPKit 1.0.7

PIPKit 1.0.7

Kofktu 维护。



PIPKit 1.0.7

PIPKit

Swift CocoaPods Carthage compatible

  • iPhone 和 iPad 上的画中画

pip_default pip_transition

要求

  • iOS 8.0+
  • Swift 5.0
  • Xcode 11

安装

CocoaPods

PIPKit 通过 CocoaPods 提供使用。要安装它,仅需将以下行添加到您的 Podfile 中

pod 'PIPKit'

Carthage

对于 iOS 8+ 的项目,可以使用 Carthage

github "Kofktu/PIPKit"

Swift 包管理器

Swift 包管理器(https://swiftlang.cn/package-manager/)是一种用于自动化分发 Swift 代码的工具,并且集成到了 swift 编译器中。它目前处于早期开发阶段,但 Alamofire 支持在支持的平台上使用它。

一旦您将 Swift 包设置好,将 PIPKit 添加为依赖项就像将其添加到 Package.swift 文件中的 dependencies 值一样简单。

dependencies: [
  .package(url: "https://github.com/Kofktu/PIPKit.git", .upToNextMajor(from: "1.0.0"))
]

用法

PIPUsable

public protocol PIPUsable {
    var initialState: PIPState { get }
    var initialPosition: PIPPosition { get }
    var insetsPIPFromSafeArea: Bool { get }
    var pipEdgeInsets: UIEdgeInsets { get }
    var pipSize: CGSize { get }
    var pipShadow: PIPShadow? { get }
    var pipCorner: PIPCorner? { get }
    func didChangedState(_ state: PIPState)
    func didChangePosition(_ position: PIPPosition)
}

PIPKit

class PIPKit {
    var isPIP: Bool
    var isActive: Bool
    var visibleViewController: PIPKitViewController?

    class func show(with viewController: PIPKitViewController, completion: (() -> Void)? = nil)
    class func dismiss(animated: Bool, completion: (() -> Void)? = nil)
}

PIPKitViewController (UIViewController & PIPUsable)

func setNeedsUpdatePIPFrame()
func startPIPMode()
func stopPIPMode()

快速浏览

显示和隐藏

class PIPViewController: UIViewController, PIPUsable {}

let viewController = PIPViewController()
PIPKit.show(with: viewController)
PIPKit.dismiss(animated: true)

更新 PIPSize

pip_resize

class PIPViewController: UIViewController, PIPUsable {
    func updatePIPSize() {
        pipSize = CGSize()
        pipEdgeInsets = UIEdgeInsets()
        setNeedsUpdatePIPFrame()
    }
}

全屏与 PIP 模式之间切换

class PIPViewController: UIViewController, PIPUsable {
    func fullScreenAndPIPMode() {
        if PIPKit.isPIP {
            stopPIPMode()    
        } else {
            startPIPMode()
        }
    }

    func didChangedState(_ state: PIPState) {}
}

AVPIPKitUsable

支持iOS中的Picture-in-Picture的UIView(AVKit.framework)

需求

  • iOS 15或更高版本
  • Info.plist - 在“后台模式”中添加音频、AirPlay和Picture in Picture。更多详细信息,请参阅Apple 文档

快速了解

var PIPKit.isAVPIPKitSupported: Bool

AVPIPKitRenderer

protocol AVPIPKitRenderer {
    
    var policy: AVPIPKitRenderPolicy { get }
    var renderPublisher: AnyPublisher<UIImage, Never> { get }
    
    func start()
    func stop()
    
}

AVPIPUIKitUsable

class View: UIView, AVPIPUIKitUsable {

    var pipTargetView: UIView { self } // Return the subview that you want to show.
    var renderPolicy: AVPIPKitRenderPolicy {
        // .once - only once render
        // .preferredFramesPerSecond - render in frames-per-second
    }
}

view.startPictureInPicture()
view.stopPictureInPicture()

class ViewController: UIViewController, AVPIPUIKitUsable {
    var pipTargetView: UIView { view } // Return the subview that you want to show.

    func start() {
        startPictureInPicture()
    }

    func stop() {
        stopPictureInPicture()
    }
}

参考资料

作者

Taeun Kim (kofktu), [email&protected]

许可证

PIPKit 适用于 MIT 许可证。有关更多信息,请参阅 LICENSE 文件。