我有一个UIView
,其中有几个子类的CAShapeLayer
实例作为子层添加到了它的layer属性中。
我正在为每个图层的UIBezierPath
设置动画效果,看起来很棒,性能很好,,但是当我通过Instruments中的 Activity 监视器运行它时,backboardd
进程上的CPU达到了〜90%。
如何获得有关此处发生的情况的更多信息? backboardd
是GPU上Core Graphics/Core Animation的幕后渲染,对吗?是否支持在某些地方的Instruments中进行进一步的调试?我可以用 GCD 做些花哨的工作来减少backboardd
的载入吗?
编辑:在使用Apple将其升级为TSI之后,他们已经确认,对于这种数量的CAShapeLayers动画,这是“预期行为”。叹。他们确实提供了一个建议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 。 :)
最佳答案
您需要尝试找出问题所在。听起来您的图层层次结构缩放比例不好,并且变得太复杂了。
如果使用较少的子类CAShapeLayer实例,是否会看到相同的CPU Activity ?或者,如果您尝试执行较少的动画?
关于ios - 如何调试重载的篮板?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14588748/