快速显示和隐藏CALayer似乎很慢

时间:2013-03-28 21:23:43

标签: ios core-animation calayer

在我的原型应用程序中,大约有100个CALayers处于不同但固定的位置,其内容与图像相同。现在唯一需要的是反复非常快地切换hidden属性。

这很有效,但它比UIImage中使用drawAtPoint:的{​​{1}}方法的前一种方法慢得多。

我想要一个频闪般的外观,没有过渡。这就是为什么我使用drawRect而不是hidden,但是,它看起来有点褪色,这告诉我它很慢。 使用opacity - 方法看起来很不错,但它在CPU上很重。

因为这个原因我用CALayer重写了它,现在我很困惑为什么这么慢。

你能给我建议如何调查吗? 有了仪器,我没有得到任何见解。它告诉我它的渲染速度为59-60 FPS,但可见速度要慢得多。

似乎(触摸)事件与隐藏或显示图层之间存在延迟。


这就是我初始化图层的方式:

drawAtPoint:

我主视图中layers[i] = [CALayer layer]; layers[i].frame = frameForLayer(i); layers[i].contents = (__bridge id)image; [layers[i] setContentsScale:scale]; layers[i].hidden = YES; [[self layer] addSublayer:layers[i]]; 的所有内容 之后,只修改awakeFromNib属性,其余属性保留。


修改: 而不只是hidden,我现在正在写

someLayer.hidden = NO

1 个答案:

答案 0 :(得分:1)

尝试在CATransaction块中执行上述代码并设置动画持续时间,如下所示:

[CATransaction setValue:[NSNumber numberWithInt:0] forKey:kCATransactionAnimationDuration];

你可能还需要像这样禁用转换:

[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];

我相信CALayers有一个默认的动画'当你设置他们的内容时。