在我的原型应用程序中,大约有 100 个 CALayer,它们位于不同但固定的位置,并具有与内容相同的小图像。现在唯一需要做的是hidden
反复且非常快速地切换属性。
这可行,但它明显慢于我之前使用UIImage
'drawAtPoint:
方法 in的方法drawRect
。
我想要一个闪光灯般的外观,没有过渡。这就是我使用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];