如何调试重载背板?

时间:2013-01-29 17:31:23

标签: ios core-graphics instruments

我有一个UIView,其子类CAShapeLayer的几个实例作为子图层添加到其图层属性中。

我为这些图层中的UIBezierPath设置了动画更改动画,这看起来非常棒且效果很好,但在我backboardd进程时达到~90%CPU通过仪器中的活动监视器运行它。

如何获取有关此处发生的更多信息? backboardd是GPU上核心图形/核心动画的幕后渲染,对吗?是否支持在某处进行仪器的进一步调试?我可以用 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;
}

最后,漂亮的Apple技术人员指出,动画帧速率控制“会产生一个不错的API增强请求,而不是” - 所以我要制作一个, and you should, too 。 :)

1 个答案:

答案 0 :(得分:1)

您需要尝试隔离您的问题。听起来你的图层层次结构不能很好地扩展并且变得太复杂了。

如果使用较少的子类CAShapeLayer实例,您是否看到相同的CPU活动?或者,如果您尝试执行较少的动画?