You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
92 lines
2.2 KiB
Swift
92 lines
2.2 KiB
Swift
//
|
|
// OpenTokLocalVideoFactory.swift
|
|
// Runner
|
|
//
|
|
// Created by Zohaib Iqbal Kambrani on 20/10/2021.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
class OpenTokLocalVideoFactory: NSObject, FlutterPlatformViewFactory {
|
|
static var view: LocalVideoPlatformView?
|
|
|
|
static var viewToAddPub: UIView?
|
|
|
|
static func getViewInstance(
|
|
frame: CGRect,
|
|
viewId: Int64,
|
|
args: Any?,
|
|
messenger: FlutterBinaryMessenger?
|
|
) -> LocalVideoPlatformView{
|
|
if(view == nil) {
|
|
view = LocalVideoPlatformView()
|
|
if viewToAddPub != nil {
|
|
view?.addPublisherView(viewToAddPub!)
|
|
}
|
|
}
|
|
|
|
return view!
|
|
}
|
|
|
|
private var messenger: FlutterBinaryMessenger
|
|
|
|
init(messenger: FlutterBinaryMessenger) {
|
|
self.messenger = messenger
|
|
super.init()
|
|
}
|
|
|
|
func create(
|
|
withFrame frame: CGRect,
|
|
viewIdentifier viewId: Int64,
|
|
arguments args: Any?
|
|
) -> FlutterPlatformView {
|
|
return OpenTokLocalVideoFactory.getViewInstance(
|
|
frame: frame,
|
|
viewId: viewId,
|
|
args: args,
|
|
messenger: messenger)
|
|
}
|
|
}
|
|
|
|
class LocalVideoPlatformView: NSObject, FlutterPlatformView {
|
|
private let videoContainer: LocalVideoContainer
|
|
|
|
override init() {
|
|
videoContainer = LocalVideoContainer()
|
|
super.init()
|
|
}
|
|
|
|
public func addPublisherView(_ view: UIView) {
|
|
videoContainer.addPublisherView(view)
|
|
}
|
|
|
|
func view() -> UIView {
|
|
return videoContainer
|
|
}
|
|
}
|
|
|
|
final class LocalVideoContainer: UIView {
|
|
private let publisherContainer = UIView()
|
|
|
|
init() {
|
|
super.init(frame: .zero)
|
|
addSubview(publisherContainer)
|
|
}
|
|
|
|
public func addPublisherView(_ view: UIView) {
|
|
publisherContainer.addSubview(view)
|
|
}
|
|
|
|
required init?(coder: NSCoder) {
|
|
fatalError("init(coder:) has not been implemented")
|
|
}
|
|
|
|
override func layoutSubviews() {
|
|
super.layoutSubviews()
|
|
let width = frame.width
|
|
let height = frame.height
|
|
|
|
publisherContainer.frame = CGRect(x: 0, y: 0, width: width, height: height)
|
|
}
|
|
}
|