我在滚动视图上放了一些图像视图。 当我拖动这个滚动视图时,我没有任何问题。
但是在我将阴影效果应用于这些图像视图后,拖动此滚动视图的效果不佳。
我使用了shadowOpacity,shadowRadius和shadowOffset方法。
例如:
[ [ anImageView layer ] shadowOpacity: 1.0 ];
如果使用阴影效果会严重影响性能,我会直接绘制图像的阴影。
如果有关于此问题的一些提示,请告诉我们。
我想在程序上对iOS使用阴影效果,因为我的绘图技巧最差。
感谢您的阅读。
答案 0 :(得分:25)
请参阅CALayer.shouldRasterize(iOS 3.2+,但shadowOffset / etc也是如此):
当此属性的值为YES时,图层将在其本地坐标空间中呈现为位图,然后使用任何其他内容合成到目标。滤镜属性中的阴影效果和任何滤镜都被栅格化并包含在位图中。
您可能还需要正确设置rasterizationScale。
答案 1 :(得分:8)
虽然使用重新加密的层确实提高了性能,但使用shadowpath proerty会得到更好(更好)的结果,如@ wayne-hartman建议的那样。
检查http://nachbaur.com/blog/fun-shadow-effects-using-custom-calayer-shadowpaths有关如何使用CALayer阴影路径的信息。
答案 2 :(得分:7)
无论何时使用阴影,最好使用bezier路径作为背景。这将帮助您设置shadowPath,这将大大提高性能。 Rasterize将提高性能,但setShadowPath将比仅设置栅格化提高5倍。
path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, 100, 100) cornerRadius:10];
[self.layer setShadowColor:[UIColor blackColor].CGColor];
[self.layer setShadowOpacity:1.0f];
[self.layer setShadowRadius:10.0f];
[self.layer setShadowPath:[path CGPath]];
答案 3 :(得分:1)
我遇到了完全相同的问题。绘制阴影是一个相当昂贵的多遍操作,所以我可以理解它,我认为在滚动时不断绘制阴影。我发现的唯一解决方法是手动将阴影渲染到图像中,并在滚动图像后面显示该图像。这似乎运作良好。