阴影放慢了UIScrollView

时间:2015-06-02 16:35:03

标签: ios swift uiview uiscrollview

我有UIScrollView,其功能类似于Facebook 新闻Feed 。我以为我的元素减慢了滚动fps。通过消除过程,我发现阴影减慢了我的应用程序。

滚动视图中的UIView框具有以下配置:

self.layer.shadowColor = UIColor.blackColor().CGColor
self.layer.shadowOffset = CGSizeMake(0, 2)
self.layer.shadowRadius = 2
self.layer.shadowOpacity = 0.15

与新闻Feed一样,我的滚动视图包含许多框,因此UIView具有自己的阴影。如何在不降低我的应用程序速度的情况下使用它?

2 个答案:

答案 0 :(得分:4)

加速UIScrollViews有很多东西:

如果你使用自定义CALayer实例 - 特别是阴影 - 需要处理能力的东西,你应该使用

scrollView.layer.shouldRasterize = YES;
scrollView.layer.rasterizationScale = [UIScreen mainScreen].scale;

此外,shadowPath可以加快您的滚动视图,如下所示:

[scrollView.layer setShadowPath:[[UIBezierPath bezierPathWithRect:myView.bounds] CGPath]];

设置shadowPath允许iOS不重新计算每次绘制视图时应如何绘制阴影,从而提高性能。

在swift中,这样的事情:

let shadowPath = UIBezierPath(rect: view.bounds);
view.layer.masksToBounds = false;
view.layer.shadowColor = UIColor.blackColor().CGColor;
view.layer.shadowOffset = CGSizeMake(0, 0.5);
view.layer.shadowOpacity = 0.2;
view.layer.shadowPath = shadowPath.CGPath;

答案 1 :(得分:1)

只要您的观看次数不透明,设置shadowPath就可以提高性能并保持相同的效果。您可以将其设置为视图或图层的边界,如下所示:

CGPathRef shadowPath = CGPathCreateWithRect(self.bounds, NULL);
self.layer.shadowPath = shadowPath;
CGPathRelease(shadowPath);

在斯威夫特:

layer.shadowPath = CGPathCreateWithRect(bounds, nil)

为您处理内存管理(讨论here)。