我有UIScrollView和数量的对象(UIView组合)与其中的UI
ImageViews.一些UI
ImageViews有圆形边框(我使用myImageView.layer.masksToBounds = YES;为此).其他具有矩形边框和其中的一部分图像(我在Interface Builder中使用Clip subviews属性).
对于iPod touch(第4代)分析结果:
>启用剪辑属性(两者或其中之一)滚动时,我有大约30 fps
>禁用剪辑属性我在滚动时拥有所有60 fps
我真的需要剪辑一些图像到圆形边框和其他矩形边界(以显示图像的一部分).所以,这是我的问题:有什么方法来提高性能?可能有低级别的方法来做(drawRect:或某事),或者可能是玩阿尔法掩护或我只是做错了吗?
解决方法
当你有图形密集的面具和东西时,一个简单而简单的方法来提高性能(通常是时间性的)是在该项目的图层上设置ShouldRasterize为YES:
#import <QuartzCore/QuartzCore.h> // ... view.layer.shouldRasterize = YES;
这将使视图大小化为缓冲区,因此不会不断重新呈现.这将为每个视图占用额外的内存,所以您应该在滚动时真正尝试回收/重用视图,类似于表视图.
对于视网膜显示器上的正确行为,您还需要为rasterizationScale设置一个适当的值:
view.layer.rasterizationScale = view.window.screen.scale; // or [UIScreen mainScreen]
我已经取得了巨大的成功,就像滚动照片画廊,每个项目都有圆角,阴影等.