我有UIScrollView和其中包含UIImageViews的对象数(UIView组合)。一些UIImageViews有圆形边框(我使用myImageView.layer.masksToBounds = YES;
)。其他有矩形边框和图像的一部分(我在Interface Builder中使用Clip subviews
属性)。
问题是我发现剪辑属性会在滚动时强烈影响性能:
对于iPod touch(第4代)分析结果:
我真的需要将一些图像剪切为圆形边界,将其他图像剪切为矩形边界(以显示图像的一部分)。所以,这是我的问题:有什么方法可以提高性能?可能有低水平的方法(drawRect:
或其他东西),或者可能是围绕阿尔法掩蔽或我做错了会有用吗?
答案 0 :(得分:30)
当你有图形密集的面具和东西时,一种简单而容易的方法来提高性能(通常是显着的)是在该项目的图层上设置shouldRasterize
到YES
:
#import <QuartzCore/QuartzCore.h>
// ...
view.layer.shouldRasterize = YES;
这会将视图光栅化为缓冲区,因此不会不断重新渲染。这将占用每个视图的额外内存,因此您应该在滚动时尝试回收/重用视图,类似于表视图的方式。
为了在视网膜显示器上正确行为,您还需要为rasterizationScale
:
view.layer.rasterizationScale = view.window.screen.scale; // or [UIScreen mainScreen]
我已经取得了很大的成功,例如滚动照片画廊,每个项目都有圆角,阴影等。