我有一个UIView,一个子类CAShapeLayer的几个实例被添加到它的layer属性的子层.
我为每个这些层的UIBezierPath动画改变,这看起来很棒,性能优异,但是当我通过仪器中的Activity Monitor运行它时,在backboardd进程中命中了大约90%的cpu.
如何获取有关这里发生的更多信息? backboardd是GPU上核心图形/核心动画的幕后渲染,对吧?是否支持在某个地方进一步调试仪器?我可以用GCD做一些喜欢加载backboardd的东西吗?
编辑:在将其升级为与苹果公司的TSI之后,他们已经确认这是对这一数量的动画CAShapeLayer的“预期行为”.叹.他们提供了一个建议at this link,其中包括持续暂停和取消动画,以模拟较低的帧率. (因为它是每个DisplayLink锁定的动画框架的计算,踢的是backboardd)
-(void)pauseLayer:(CALayer*)layer { CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil]; layer.speed = 0.0; layer.timeOffset = pausedTime; } -(void)resumeLayer:(CALayer*)layer { CFTimeInterval pausedTime = [layer timeOffset]; layer.speed = 1.0; layer.timeOffset = 0.0; layer.beginTime = 0.0; CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime; layer.beginTime = timeSincePause; }
最后,美味的苹果技术公司指出,动画帧率控制“将会提供一个体面的API增强请求,如”旁边“ – 所以我正在制作一个,and you should,too. 原文链接:https://www.f2er.com/iOS/335422.html