CALayer - 暗影导致性能下降?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CALayer - 暗影导致性能下降?相关的知识,希望对你有一定的参考价值。

所以我在我的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并显示该图像,而不是每次重绘时都重新渲染阴影(但如果阴影需要动画或其他东西,这不起作用)。

以上是关于CALayer - 暗影导致性能下降?的主要内容,如果未能解决你的问题,请参考以下文章

从 varchar 更改为 mediumtext 会导致性能下降

python+uwsgi导致redis无法长链接引起性能下降问题记录

惠普暗影精灵8pro和联想r7000区别 惠普暗影精灵8pro和联想r7000p参数对比

左连接会导致性能大幅下降。如何修复它

为啥用 innerText 替换 InnerHTML 会导致性能下降 15 倍以上

CALayer导致ARC内存泄漏