0

我将 UIView 添加到 MTKView 并在 MTKViewDelegate 的 DRAW 委托方法中为 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()
 }
4

1 回答 1

0

简短的回答:不,也不。实际上,该视图是 MTKView 的子视图以及您将该draw方法用作时钟这一事实完全无关紧要。您所做的与在 CADisplayLink 的每个回调中更改视图的某些内容没有什么不同——而且您永远不会问是否更有效或在 GPU 上。事实上,因为这是在主线程上完成的,所以可以说这普通视图动画效率低(与使用 CADisplayLink 技术的 UIKit Dynamics 相同)。

于 2020-02-02T19:12:33.870 回答