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或其它东西则不起作用)。