使用CALayer绘制的3个视图控制器加载的滚动视图的性能不佳

时间:2011-03-04 14:38:49

标签: iphone uiscrollview calayer

我有一个滚动视图加载了3个视图控制器。每个视图控制器都使用该代码绘制其图层 - (我们还有更多,但我把它拉出来检查它是否会有帮助)。我仍然有很蹩脚的滑动。  有什么帮助吗?

SHANI

CALayer *sublayer = [CALayer layer];
sublayer.backgroundColor = [Helper cardBackGroundColor:card].CGColor;
sublayer.shadowOffset = CGSizeMake(0, 3);
sublayer.shadowRadius = 5.0;
sublayer.shadowColor = [UIColor blackColor].CGColor;
sublayer.shadowOpacity = 0.8;
sublayer.frame = CGRectInset(self.view.layer.frame, 20, 20);
sublayer.borderColor = [UIColor blackColor].CGColor;
sublayer.borderWidth = 2.0;
sublayer.cornerRadius = 10.0;
[self.view.layer addSublayer:sublayer];

2 个答案:

答案 0 :(得分:2)

使用CALayer绘制内容通常会导致性能下降。我们通常使用可伸缩的图像来获得足够的性能。当你想到它时,手动渲染它而不是使用iPhone有限的处理能力来实时渲染它是有意义的。

您可以从CALayer获得足够的性能,但是绘制png可能仍然会更快,从而节省电池续航时间。

编辑:所以这是一个解释这个概念的例子。

这段代码实际上取代了速度太慢的CALayer绘图。

UIImageView *shadow = [[UIImageView alloc] initWithFrame:frame];
shadow.image = [[UIImage imageNamed:@"shadow.png"] stretchableImageWithLeftCapWidth:16.0 topCapHeight:16.0];
[contentView addSubview:shadow];
[shadow release];

shadow.png是34 x 34像素,包含阴影方块。由于可伸缩的图像,可以在不拉伸阴影的情况下调整方块的大小。有关此问题的更多信息,我建议您阅读stretchableImageWithLeftCapWidth:topCapHeight:的文档。 Google还将帮助您找到有关如何使用可伸缩图像的指南。如果您有更多问题,我将很乐意回答。

答案 1 :(得分:1)

你有一个面具(假设你某处说maskToBounds = YES)和这一层上的阴影。两者都会导致屏幕外渲染过程。

请观看WWDC 2010会议425 - 实践中的核心动画第2部分

你可以在这里找到;

http://developer.apple.com/videos/wwdc/2010/