CALayer - 暗影导致性能下降?

ary*_*axt 30 iphone shadow calayer uinavigationcontroller ios

所以我在我的navigationcontroller上做了一些自定义动画,以及它推送和弹出viewControllers的方式.

一切顺利.只要我添加以下代码(在子类中UINavigationController),我就会面临巨大的性能损失.添加阴影后,所有动画都变得非常迟钝.这是预期的还是我在代码中做错了什么?

// This code gets called once during NavigationController initialization.
[self.view setClipsToBounds:NO];
[self.view.layer setCornerRadius:5];
[self.view.layer setShadowOffset:CGSizeMake(0, 20)];
[self.view.layer setShadowColor:[[UIColor yellowColor] CGColor]];
[self.view.layer setShadowRadius:20.0];
[self.view.layer setShadowOpacity:1];
Run Code Online (Sandbox Code Playgroud)

编辑:

将我的阴影半径更改为1,它仍然很慢

wil*_*ton 85

self.view.layer.shouldRasterize = YES;
self.view.layer.rasterizationScale = UIScreen.mainScreen.scale;
Run Code Online (Sandbox Code Playgroud)

我最近遇到了缓慢的CALayer阴影的一些问题,而这个简单的代码行为我修复了一切!

  • 这将忽略您可能为您注释的视网膜图像.要解决此问题,请添加以下行:self.view.layer.rasterizationScale = [UIScreen mainScreen] .scale; (22认同)
  • 我在tableView中遇到了类似的问题,其中每个单元格包含一些UILabel以及带圆角的视图.我为包含tableView的图层添加了一个阴影,滚动变得不稳定.然而,设置shouldRasterize = YES解决了波动,但像素化视图(明显模糊),所以这不是一个可接受的解决方案.我发现使用shadowPath而不是shadowOffset就可以了. (2认同)

Kur*_*vis 49

您应该期望通过添加阴影来减速.shadowRadius20的A 非常高,特别慢.

另一个提高阴影渲染速度的关键:设置shadowPath属性.它可以帮助戏剧性.

  • @NicolasManzini的阴影效果的更多提示:http://stackoverflow.com/questions/10133109/fastest-way-to-do-shadows-on-ios/10133182#10133182 (2认同)

Bob*_*one 15

使用shadowPath而不是shadowOffset.

theView.layer.shadowPath = [UIBezierPath bezierPathWithRect:theView.bounds].CGPath;
Run Code Online (Sandbox Code Playgroud)

查看这篇文章:iphone - 当视图的阴影打开时,动画的表现非常差