我需要一个自定义UIView,它会一直改变它的外观,但是,它的更改不在属性键路径上,因此无法用CABasicAnimation
或CATransition
表示。我需要为每一帧重绘视图/图层(想想游戏主循环)。
我可以想到几种方法:
设置一个重复的NSTimer来调用视图setNeedsDisplay
。许多人认为这会降低应用程序的速度。
使用CADisplayLink
:
let displaylink = CADisplayLink(target: self, selector: #selector(step))
displaylink.add(to: .current, forMode: .defaultRunLoopMode)
我不确定是否应该在步骤函数中调用setNeedDisplay
或draw
方法。而且我不知道这是否与方法1不同。
实现CAAnimation
的子类,并实现其CAAction
协议并在那里重绘视图。
我想知道哪一个是最有效的,并没有减慢我的应用程序,以及为什么它比其他方法更有效(比如可能在另一个线程上实际绘图)?