CALayer – 暗影导致性能下降?

所以我在我的导航控制器上做了一些自定义的animation,以及它推动和popupviewControllers的方式。

一切顺利。 只要我添加下面的代码(在UINavigationController的子类),我面临巨大的性能打击。 添加一个阴影后,所有的animation变得非常滞后。 这是预期还是我在代码中做错了什么?

 // 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]; 

编辑:

改变我的影子半径为1,它仍然很慢

你应该期望增加一个阴影放缓。 20的shadowRadius非常高,特别慢。

提高阴影渲染速度的另一个关键是:设置shadowPath属性。 它可以帮助很大。

 self.view.layer.shouldRasterize = YES; self.view.layer.rasterizationScale = UIScreen.mainScreen.scale; 

我最近遇到了一些缓慢的CALayer阴影问题,那简单的代码就为我做了一切!

使用shadowPath而不是shadowOffset

 theView.layer.shadowPath = [UIBezierPath bezierPathWithRect:theView.bounds].CGPath; 

检查这个职位: iphone – animation的performance是非常糟糕的时候,视图的阴影

是的,影子是非常昂贵的(尤其是一个影子,在半径方面,你会注意到它对你所经历的放缓程度有很大的影响)。 提高性能的一种方法是将其渲染一次到CGImageContext并只显示该图像,而不是在每次重绘时都重新渲染阴影(但是如果阴影需要animation或其它东西则不起作用)。