我正在将UIView添加到MTKView,并在MTKViewDelegate的DRAW delegate方法中对UIView进行动画处理。
这个动画会由GPU/Metal处理吗?动画应该更流畅还是与我使用 UIView.animate 时相同?
func draw(in view: MTKView) {
let newdescriptor = self.metalview.currentRenderPassDescriptor
let commandbuffer = self.metalqueue.makeCommandBuffer()
let commandencoder = commandbuffer?.makeRenderCommandEncoder(descriptor: newdescriptor!)
// //////////////////////////// //
timer += 0.01
var currenttime = sin(timer)
uiviewbox.transform = CGAffineTransform(rotationAngle: CGFloat(sin(timer)))
// //////////////////////////// //
commandencoder?.endEncoding()
let thedrawable = self.metalview.currentDrawable
commandbuffer?.present(thedrawable!)
commandbuffer?.commit()
}
简短回答:不,不。实际上,此视图是 MTKView 的子视图,并且您使用draw
方法作为时钟这一事实是完全无关紧要的。您正在做的事情与更改来自CADisplayLink的每个回调的视图没有什么不同 - 您永远不会问这是更有效还是在GPU上更有效。事实上,因为这是在主线程上完成的,所以这可以说比普通的视图动画效率低(与使用CADisplayLink技术的UIKit Dynamics相同(。