加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 05:53:39 所属栏目:百科 来源:网络整理
导读:我有UIScrollView和数量的对象(UIView组合)与其中的UI ImageViews.一些UI ImageViews有圆形边框(我使用myImageView.layer.masksToBounds = YES;为此).其他具有矩形边框和其中的一部分图像(我在Interface Builder中使用Clip subviews属性). 问题是我发现剪辑
我有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]

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读