objective-c – clipToBounds和masksToBounds的性能问题

前端之家收集整理的这篇文章主要介绍了objective-c – clipToBounds和masksToBounds的性能问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有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]

我已经取得了巨大的成功,就像滚动照片画廊,每个项目都有圆角,阴影等.

猜你在找的C&C++相关文章