所以我有一个有阴影的UIView:
[containerFrame.layer setShadowOffset:CGSizeMake(0, 1)];
[containerFrame.layer setShadowRadius:4.0];
[containerFrame.layer setShadowColor:[UIColor colorWithRed:34/255.f green:25/255.f blue:25/255.f alpha:1.0].CGColor];
[containerFrame.layer setShadowOpacity:0.4];
有了这个,我的滚动FPS下降到20-30。移除阴影然后繁荣,我的FPS回到60并且滚动像黄油一样光滑。现在的问题是我需要在这个盒子/容器视图周围有一个阴影效果。如何在不降低滚动速度的情况下实现这一目标?
答案 0 :(得分:16)
尝试设置阴影路径:
[containerFrame.layer setShadowOffset:CGSizeMake(0, 1)];
[containerFrame.layer setShadowRadius:4.0];
[containerFrame.layer setShadowColor:[UIColor colorWithRed:34/255.f green:25/255.f blue:25/255.f alpha:1.0].CGColor];
[containerFrame.layer setShadowOpacity:0.4];
// New line
[containerFrame.layer setShadowPath:[UIBezierPath bezierPathWithRect:containerFrame.bounds].CGPath];
如果你必须为这个视图设置动画(特别是如果它是a的一部分 UITableViewCell)你可能会注意到动画中的断断续续。 这是因为计算视图的阴影需要 Core Animation做一个offscreen渲染传递来确定 确切的视图形状,以便弄清楚如何渲染它的下降 阴影。 (请记住,您的视图可能是任何复杂的形状 即使有洞也可以。)
答案 1 :(得分:1)
设置containerFrame.layer.shouldRasterize = YES;
它减慢的原因是因为计算阴影是昂贵的。光栅化会将视图折叠成图像,因此速度会快得多。