Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 是否在GPU上处理/呈现作为MTKViews子视图的UIView?_Ios_Swift_Uiview_Metal_Mtkview - Fatal编程技术网

Ios 是否在GPU上处理/呈现作为MTKViews子视图的UIView?

Ios 是否在GPU上处理/呈现作为MTKViews子视图的UIView?,ios,swift,uiview,metal,mtkview,Ios,Swift,Uiview,Metal,Mtkview,我正在将UIView添加到MTKView,并在MTKViewDelegate的DRAW delegate方法中设置UIView的动画 此动画是否由GPU/Metal处理?动画应该更平滑还是与使用UIView.animate时相同 func draw(in view: MTKView) { let newdescriptor = self.metalview.currentRenderPassDescriptor let commandbuffer = self

我正在将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的效率相同)

“在MTKViewDelegate的DRAW delegate方法中设置UIView动画”这是什么意思?你能显示代码吗?draw方法在每一帧都会被调用,我想这是iPhone显示器和GPU之间的连接。我肯定是错的,因为我认为着色器是GPU上运行的实际函数,而draw方法不是着色器。现在发布代码。是的,这就是我认为你的意思。:)