提问人:Ian Warburton 提问时间:10/29/2023 更新时间:11/2/2023 访问量:80
在UIKit中循环时,这应该在哪里渲染到MTKView?
Where should this render to MTKView while loop go in UIKit?
问:
关于本教程...
它描述了如何从视频文件加载帧并将它们一个接一个地绘制到 Metal 视图中。
有一个循环遍历每一帧并调用视图...while
draw
while sampleBuffer != nil {
...
displayView.draw()
...
}
这个循环应该去哪里?我已经尝试过了,经过一段时间的延迟和大量的打印输出,它似乎只显示最后一帧。就好像在完成之前看不到视图的更新一样。viewDidLoad
viewDidLoad
答:
1赞
Jeshua Lacock
10/31/2023
#1
我想我会把它放进去或.然而,这是我第一次在这样的超紧密循环中看到绘制命令,而且似乎不太理想。viewWillAppear(_:)
viewDidAppear(_:)
如果您想手动控制抽奖,我建议您改用。其目的是定时与屏幕的系统更新同步。您还可以设置首选帧速率,这很好。CADisplayLink
CADisplayLink
weak var displayLink: CADisplayLink?
func createDisplayLink() {
displayLink?.invalidate() // in case existing timer
let displayLink = CADisplayLink(target: self, selector: #selector(update(_:)))
displayLink.add(to: .main, forMode: .common)
displayLink.preferredFramesPerSecond = 30 // Optional set desired frame rate
self.displayLink = displayLink
}
@objc func update(_ displayLink: CADisplayLink) {
displayView.draw()
}
func viewWillAppear(_ animated: Bool) {
// You can create it earlier, but I prefer here
createDisplayLink()
}
func viewWillDisappear(_ animated: Bool) {
// Stop rending when view disappears
displayLink?.invalidate()
}
评论
0赞
Ian Warburton
11/19/2023
对不起,我的错。这是一个副业。我让它工作,将循环复制到.我需要制作 和 类属性。现在我有低级视频。棒。感谢您的帮助。update(_ displayLink: CADisplayLink)
sampleBuffer
trackOutput
reader
评论
viewDidLoad
viewDidAppear()