在我的原型应用程序中,大约有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
答案 0 :(得分:1)
尝试在CATransaction块中执行上述代码并设置动画持续时间,如下所示:
[CATransaction setValue:[NSNumber numberWithInt:0] forKey:kCATransactionAnimationDuration];
你可能还需要像这样禁用转换:
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];
我相信CALayers有一个默认的动画'当你设置他们的内容时。