所以我在我的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];
编辑:
将我的阴影半径更改为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's performance is very poor when view's shadow is on
是的,阴影是非常昂贵的(特别是一个大的阴影 - 与半径一起玩,你会注意到它会对你经历的减速程度产生巨大影响)。提高性能的一种方法是将其渲染一次到CGImageContext
并显示该图像,而不是每次重绘时都重新渲染阴影(但如果阴影需要动画或其他东西,这不起作用)。