9

我有 UIScrollView 和里面有 UIImageViews 的对象(UIView 组合)。一些 UIImageViews 有圆形边框(我用myImageView.layer.masksToBounds = YES;这个)。其他有矩形边框和部分图像(我Clip subviews为此使用 Interface Builder 中的属性)。

问题是我发现剪辑属性在滚动时会强烈影响性能:

对于 iPod touch(第 4 代)的分析结果:

  • 启用剪辑属性(两者或其中之一)滚动时我有大约 30 fps
  • 在禁用剪辑属性的情况下,我在滚动时拥有所有 60 fps

我真的需要将一些图像剪辑到圆形边界和其他矩形边界(以显示图像的一部分)。所以,这是我的问题:有什么方法可以提高性能?可能有低级的方法(drawRect:或其他方法),或者玩阿尔法掩蔽可能有用,或者我只是做错了什么?

4

1 回答 1

30

当您有图形密集型蒙版和事物时,一种简单而简单的提高性能(通常是显着)的方法是在该项目的图层上shouldRasterize设置:YES

#import <QuartzCore/QuartzCore.h>

// ...

view.layer.shouldRasterize = YES;

这会将视图栅格化为缓冲区,因此不会不断地重新渲染。这将为每个视图占用额外的内存,因此您应该真正尝试在滚动时回收/重用视图,类似于表视图的方式。

为了在视网膜显示器上正确行为,您还需要为 设置适当的值rasterizationScale

view.layer.rasterizationScale = view.window.screen.scale; // or [UIScreen mainScreen]

我在这方面取得了巨大的成功,比如滚动照片画廊,每个项目都有圆角、阴影等。

于 2012-06-15T10:56:40.677 回答