我有一个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/

10-09 02:21