PIPKit is available through CocoaPods. To install it, simply add the following line to your Podfile:
pod 'PIPKit'
For iOS 8+ projects with Carthage
github "Kofktu/PIPKit"
The Swift Package Manager is a tool for automating the distribution of Swift code and is integrated into the swift
compiler. It is in early development, but Alamofire does support its use on supported platforms.
Once you have your Swift package set up, adding PIPKit
as a dependency is as easy as adding it to the dependencies
value of your Package.swift
.
dependencies: [
.package(url: "https://github.com/Kofktu/PIPKit.git", .upToNextMajor(from: "1.0.0"))
]
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)
}
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)
}
func setNeedsUpdatePIPFrame()
func startPIPMode()
func stopPIPMode()
class PIPViewController: UIViewController, PIPUsable {}
let viewController = PIPViewController()
PIPKit.show(with: viewController)
PIPKit.dismiss(animated: true)
class PIPViewController: UIViewController, PIPUsable {
func updatePIPSize() {
pipSize = CGSize()
pipEdgeInsets = UIEdgeInsets()
setNeedsUpdatePIPFrame()
}
}
class PIPViewController: UIViewController, PIPUsable {
func fullScreenAndPIPMode() {
if PIPKit.isPIP {
stopPIPMode()
} else {
startPIPMode()
}
}
func didChangedState(_ state: PIPState) {}
}
UIView that is capable of Picture-in-Picture in iOS (AVKit.framework)
Audio, AirPlay and Picture in Picture
in Background Modes
. For more information, see Apple Documentationvar PIPKit.isAVPIPKitSupported: Bool
protocol AVPIPKitRenderer {
var policy: AVPIPKitRenderPolicy { get }
var renderPublisher: AnyPublisher<UIImage, Never> { get }
func start()
func stop()
}
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 is available under the MIT
license. See the LICENSE
file for more info.
link |
Stars: 272 |
Last commit: 1 year ago |
Add function renderPictureInPicture()
in AVPIPUIKitUsable
Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics