我有两种方法可以实现相同的精灵动画:
UIImage
使用animatedImage(with:duration:)
动画显示6个图像的数组。UIView
CALayer
的{{1}}属性设置为精灵地图集图片 - 图层的contents
属性通过contentsRect
更新。为了确保帧速率独立性,我正在累积增量时间(或CADisplayLink
),直到图像发生变化。当图像改变时,我从累积的增量时间中减去一个图像所需的经过时间,并且循环继续。这两种方法在我的iPhone上工作得很好,看起来几乎相同(如果不相同)。但是,在模拟器中运行时,#1似乎以设备速度显示动画,而#2似乎显示为明显较慢的动画。
当比较我的设备和模拟器的FPS时,设备平均大约为59.9到60 FPS,而模拟器显示恒定的60 FPS;这并不代表#2看起来明显变慢。
那么,为什么模拟器中的#2会变慢?
代码#1 :
displayLink.duration
#2的代码:
UIImage.animatedImage(with: spriteImages, duration: animationDuration)
答案 0 :(得分:1)
基本上,CADisplayLink在模拟器中不能很好地工作。仅在设备上测试。