5650d77bb5c79e4f2d4c86d6ec88686f
再谈 SCNNode 贴图类型选择问题

存在的问题

上次写到《SCNNode到底应该怎么贴图?UIImage,UIImageView,CALayer用哪个?》列举了贴图的使用。但是,实际使用中发现,不同的贴图其实有不同的问题。

Image/Texture

这些贴图实际就是图片,整体支持较好,但是当我们需要复杂内容布局时,只能是都转化为图片。

UIView

官方不推荐直接使用 UIView,但是仍然是可以使用的。

  • 优点:支持复杂布局和图文视频混排(Autolayout/Frame),支持滚动动画,支持触摸手势。
  • 缺点:内存泄露,手势响应永远最高级,不支持 CALayer/UIView 动画。Frame 不是整数时可能会崩溃,偶发布局错乱。每贴图一个 UIView,视图层级上就会多出一个_SCNSnapshotWindow层,可能会造成其它界面的手势/键盘失效。

CALayer

官方推荐使用,可支持动画。

  • 优点:支持复杂布局和图文视频混排,sublayer 支持 CAAnimation 动画。支持 SCNView 的 prepareObjects:withCompletionHandler:方法,后台传输到 GPU,避免带宽卡顿。
  • 缺点:坐标和布局与 UIView 不同,且不支持 Autolayout,不支持触摸手势,后台线程创建 layer 再切换主线程显示,仍可能会显示不出来。
top Created with Sketch.