【发布时间】:2013-03-28 21:23:42
【问题描述】:
在我的原型应用程序中,大约有 100 个 CALayer,它们位于不同但固定的位置,并且具有与内容相同的小图像。现在唯一需要做的就是快速地反复切换hidden 属性。
这可行,但它明显慢于我之前在drawRect 中使用UIImage 的drawAtPoint: 方法的方法。
我想要一个闪光灯般的外观,没有过渡。这就是为什么我使用hidden 而不是opacity 的原因,但是,它看起来有点褪色,这告诉我它很慢。
使用 drawAtPoint:- 方法看起来不错,但它对 CPU 的负担很重。
出于这个原因,我使用 CALayer 重写了它,现在我很困惑为什么它这么慢。
你能给我建议如何调查这个吗? 使用 Instruments,我没有获得任何见解。它告诉我它以 59-60 FPS 的速度渲染,但明显慢得多。
在(触摸)事件和图层的隐藏或显示生效之间似乎存在延迟。
这就是我初始化图层的方式:
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,而是
[CATransaction begin];
[CATransaction setValue:(id)kCFBooleanTrue
forKey:kCATransactionDisableActions];
someLayer.hidden = NO;
[CATransaction commit];
【问题讨论】:
-
做到了。非常感谢!!!
标签: ios core-animation calayer