CALayer表现不佳?

时间:2012-06-03 19:44:08

标签: ios performance calayer lag

我几周来一直在努力解决这个问题。无论如何,CALayer很糟糕。它们导致了很多延迟,使我的UI看起来更糟。

几乎我有一个简单的UITableView,我在效率方面已经达到最大限度,当滚动来自3行代码时所有滞后:

CALayer *imageLayer2 = [cell.imageView layer];
[imageLayer2 setMasksToBounds:YES];
[imageLayer2 setCornerRadius:10.0];

我试图将setMaskToBounds设置为NO,但是没有圆角应用于我的UIImageView。似乎这个问题在iPad上然后在iPhone上出现了一些奇怪的原因,但是现在只是坚持寻找解决方法。此代码也在我的cellForRowAtIndexPath中,但只有在需要新单元格时才会执行,因此并不总是调用它。

无论如何,你建议我做什么而不是使用CALayers来摆脱这种滞后?

谢谢!

3 个答案:

答案 0 :(得分:1)

我认为这里的问题是因为每次调用cellForRowAtIndex时都会这样做。我建议,将图像存储在掩模和角半径中,当你真正需要再次使用时,你要求模型检索图像而不是再次计算。 cellForRowAtIndex是一个明智的选择,你应该避免在其中进行昂贵的操作。

答案 1 :(得分:1)

我发现如果你使用UIImage的CGImageRef,它比直接使用UIImage要快得多。

试试这个:

CALayer *imageLayer2.contents = (id)[cell.imageView image].CGImage;
[imageLayer2 setMasksToBounds:YES];
[imageLayer2 setCornerRadius:10.0];

虽然我实际上完全摆脱了ImageView,只是处理CALayers和UIImages(假设你不关心可访问性)

答案 2 :(得分:0)

如果您愿意弄乱图像本身,可以将其设置为矩形,然后按原样使用, 要将矩形图像更新为圆形矩形图像,请检查此答案 How to mask a square image into an image with round corners in the iPhone SDK?