gpt4 book ai didi

ios - Twilio videoView 委托(delegate)未调用

转载 作者:行者123 更新时间:2023-11-30 11:05:08 30 4
gpt4 key购买 nike

我正在使用twilio框架来开发视频通信。并基于Twilio的视频快速入门我修改了一些TwilioVideoView的呈现方式。

我正在使用一个继承 UIView 类的类,名为“myView”,该类有一个 TVIVideoView 的实例属性。然后我将“myView”符合 TVIVideoViewDelegate 的协议(protocol),希望得到一些回调,但我失败了即使我可以成功在 myView 上显示远程对等点的视频,也可以获得回调。

根据TVIVideoView的评论说:

delegate An object implementing the TVIVideoViewDelegate protocol (often a UIViewController).

这是否意味着我无法使自定义类符合 TVIVideoViewDelegate?

这是我的View类:

open class myView: UIView {
private var tviVideoView: TVIVideoView?
public var myViewDelegate: MyViewDelegate?

required public init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}

override public init(frame: CGRect) {
super.init(frame: frame)
}

public init(frame: CGRect, myViewDelegate: MyViewDelegate? = nil) {
super.init(frame: frame)
self.tviVideoView = TVIVideoView.init(frame: self.frame, delegate: self)
self.myViewDelegate = myViewDelegate
self.tviVideoView?.translatesAutoresizingMaskIntoConstraints = false
tviVideoView?.contentMode = .scaleAspectFill
self.addSubview(self.tviVideoView!)
self.backgroundColor = UIColor.blue
}
}

extension myView: TVIVideoViewDelegate {
func videoView(_ view: TVIVideoView, videoDimensionsDidChange dimensions: CMVideoDimensions) {
DispatchQueue.main.async {
print("dimensions: \(dimensions.width), \(dimensions.height)")
self.myViewDelegate?.videoView(self, videoDimensionDidChange: dimensions)
}
}
}

public protocol MyViewDelegate {
func videoView(_ view: UIView, videoDimensionDidChange dimensions: CMVideoDimensions)
}

最佳答案

我找到了一个解决方法:我创建一个继承 TVIVideoViewDelegate 的类并将其指定为 TVIVideoView 的委托(delegate)。它起作用了!但我还是不知道为什么?

我的代码如下:

open class myView: UIView {
private var tviVideoView: TVIVideoView?
public var myViewDelegate: MyViewDelegate? {
didSet {
self.delegatorOfTVIView?.myViewDelegate = myViewDelegate
}
}

var delegatorOfTVIView: DelegatorOfTVIVideoViewDelegate?

required public init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}

override public init(frame: CGRect) {
super.init(frame: frame)
}

public init(frame: CGRect, myViewDelegate: MyViewDelegate? = nil) {
super.init(frame: frame)
self.delegatorOfTVIView = DelegatorOfTVIVideoViewDelegate(myDelegate: myViewDelegate)
self.myViewDelegate = myViewDelegate
self.tviVideoView = TVIVideoView.init(frame: self.frame, delegate: delegatorOfTVIView)

self.tviVideoView?.translatesAutoresizingMaskIntoConstraints = false
tviVideoView?.contentMode = .scaleAspectFill
self.addSubview(self.tviVideoView!)
self.backgroundColor = UIColor.blue
}
}


public protocol MyViewDelegate {
func videoView(_ view: UIView, videoDimensionDidChange dimensions: CMVideoDimensions)
}

class DelegatorOfTVIVideoViewDelegate: NSObject, TVIVideoViewDelegate {
var myViewDelegate: MyViewDelegate?

init(myDelegate: MyViewDelegate? = nil) {
super.init()
self.myViewDelegate = myDelegate
}

func videoView(_ view: TVIVideoView, videoDimensionsDidChange dimensions: CMVideoDimensions) {
print("TVIVideoDelegate call dimension change")
self.myViewDelegate?.videoView(view, videoDimensionDidChange: dimensions)
}
}

关于ios - Twilio videoView 委托(delegate)未调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52811184/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com