UILabel 层cornerRadius 对性能产生负面影响

2023-11-29

我创建了一个文档视图,在角落显示页码。页码是一个具有半透明背景色的uilabel,并且有一个角半径(使用cornerRadius的财产view's layer)。我已将其放置在UIScrollView。然而,这会使滚动变得不稳定。如果我删除cornerRadius,性能良好。我能做些什么吗?什么是更好的解决方案?看来已经实现了UIWebView没有任何性能问题。


对于标签或带有圆角的视图和/或滚动视图上的背景颜色和阴影,解决方案非常简单:

最大的问题来自 maskToBounds 图层选项。这似乎对性能产生了很大的影响,但是标签似乎需要打开此选项来将背景颜色掩盖到圆角。因此,要解决此问题,您需要设置标签图层背景颜色并关闭 maskToBounds。

第二个问题是,默认行为是尽可能重绘视图,这对于滚动视图上的静态或缓慢变化的项目来说是完全没有必要的。这里我们简单设置layer.shouldRasterize = YES。这将允许 CA“缓存”视图的光栅化版本,以便在滚动时快速绘制(可能使用硬件加速)。

您需要确保您的图层具有 Alpha 通道,否则光栅化会影响圆角的绘制。我从来没有遇到过问题,因为我为背景颜色设置了 Alpha,但您可能需要检查您的情况。

这是一个设置为在滚动视图上很好地工作的 UILabel 示例:

UILabel *lbl = [[UILabel alloc] initWithFrame:CGRectMake(4, 4, 40.0, 24.0)];
lbl.font = [UIFont fontWithName:@"Helvetica" size:14.0];
lbl.textAlignment = UITextAlignmentRight;
lbl.text = @"Hello World";
// Must set the label background to clear so the layer background shows
lbl.backgroundColor = [UIColor clearColor];        
// Set UILabel.layer.backgroundColor not UILabel.backgroundColor otherwise the background is not masked to the rounded border.
lbl.layer.backgroundColor = [UIColor colorWithRed:1 green:0 blue:0 alpha:0.5].CGColor;

lbl.layer.cornerRadius = 8;
lbl.layer.borderColor = [UIColor blackColor].CGColor;
lbl.layer.borderWidth = 1;
// Huge change in performance by explicitly setting the below (even though default is supposedly NO)
lbl.layer.masksToBounds = NO;
// Performance improvement here depends on the size of your view
lbl.layer.shouldRasterize = YES;
lbl.layer.rasterizationScale = [UIScreen mainScreen].scale;
// self here is the child view in the scroll view
[self addSubview:lbl];
[lbl release];

我可以用这样的视图填满 iPad 1 屏幕,并且仍然可以平滑滚动:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UILabel 层cornerRadius 对性能产生负面影响 的相关文章

随机推荐

  • Android Studio - 创建模块而不复制文件?

    我正在 Android Studio 中创建具有依赖项的项目 我知道如何通过添加模块来链接项目 但我意识到 导入模块 会在项目内创建 libProject 的副本 有办法防止这种情况吗 就像 外部模块 由于我负责这两个项目 因此我希望能够将
  • Ajax 联系表单问题 - 未发送电子邮件

    抱歉我是个菜鸟 但我正在尽力 我已经完成并阅读了我能找到的所有内容 但我从未让它发挥作用 非常感谢您的帮助 表单 ID 在 html 和 javascript 中匹配 PHP 链接在 Javascript 中 我将 javascript 链
  • 选择GUI时如何去除黑色边框?

    我正在尝试添加一个Entry小部件到Frame with a Scrollbar 当我点击 GUI 时 会出现黑色边框 import Tkinter as tk class Example tk Frame def init self ro
  • 如何在基于servlet的项目中获取部署根目录?

    我正在尝试从 java 获取基于 servlet 的项目的部署根目录 我正在使用以下代码行来获取路径详细信息 Type 1 File directory new File try System out println Current dir
  • 在 iPhone 中保留计数

    我用过 anArray retainCount 获取数组的保留计数 我知道这不应该使用 但我只是为了学习保留概念而使用 以下是我的代码 NSString str NSString alloc initWithFormat a b c d N
  • 两个函数的 JavaScript 回调

    有没有办法用Javascript ES6 实现下面的代码 如果是 我该怎么做 我尝试了这个例子 但没有成功 const funcA callback arg1 gt console log Print arg1 arg1 Print arg
  • GMail 上下文小工具无法正常工作

    我正在尝试在我的域中部署上下文小工具 我已遵循开发指南 但该小工具未显示 我认为问题在于 数据访问 如果安装似乎顺利 则发生事件 在 Google Apps 控制台中 小工具的数据访问部分显示一个红色 X 如果我尝试通过按特定链接授予访问权
  • 我可以更改之前创建的 matplotlib FuncAnimation 的间隔吗?

    我试图弄清楚是否有任何方法可以更改现有 matplotlib FuncAnimation 的间隔 我希望能够根据用户输入调整动画的速度 我发现了类似的问题如何更改帧之间的间隔 python 但既然没有得到答案 我想我还是会问它 我需要和拥有
  • 如果字符串以“1”开头,则替换标签之间的字符串

    我有一个巨大的 XML 文件 大约 100MB 每一行都包含以下内容
  • 允许延期交货并通知客户有关 Woocommerce 中的特定产品类别

    在 woocommerce 中 我正在尝试添加一些代码functions php允许特定产品类别的缺货 但代码不起作用 如何在 Woocommerce 中允许延期交货并通知客户特定产品类别 Updated 尝试以下操作 您将在数组中为每个函
  • 使用任何东西在 Objective-C 中加密/在 Ruby 中解密

    我们使用此代码在 iPhone 上的 Objective C 中进行加密 NSMutableData EncryptAES NSString key char keyPtr kCCKeySizeAES128 1 bzero keyPtr s
  • 为什么C++11没有模板typedef?

    为什么 C 11 没有 模板类型定义 例如 template
  • Liferay portlet:从 javascript 重定向到其他 jsp 页面

    我想从 js 重定向到 liferay portlet 中的另一个 jsp 页面 我发现的想法是使用 renderurl 我发现可以帮助我迈出第一步的最佳代码是 a href This render URL link is created
  • 使用rollapply函数使用R进行VaR计算

    我执行了以下操作来计算 20 个周期滚动窗口的风险价值 VaR require PerformanceAnalytics require zoo data edhec class edhec 1 xts zoo class edhec CT
  • 有条件地将字符串替换为另一个字符串

    我的数据结构如下 所有变量均采用字符串格式 v1 v2 c1 c2 c1c2 00035A 943567 00088E 63968E 00088E 63968E 00088E 63968E 00088E 63968E 00088E 6396
  • 是否可以创建一个可点击的类似Toast的通知?

    我需要显示一个最小侵入性的非阻塞通知 它是not与其显示的活动相关联 例如Toast and这是可点击的 有谁知道这是否可能 不幸的是 看来Toast通知 自定义或其他 不可点击 即设置单击监听器对其观点没有影响 我所知道的所有替代方案 即
  • Python构造函数和默认值[重复]

    这个问题在这里已经有答案了 不知何故 在下面的 Node 类中 wordList and adjacencyList变量在 Node 的所有实例之间共享 gt gt gt class Node def init self wordList
  • CUDA:归约还是原子操作?

    我正在编写一个 CUDA 内核 其中涉及计算给定矩阵上的最大值 并且我正在评估可能性 我能找到的最好方法是 强制每个线程在共享内存中存储一 个值 然后使用缩减算法来确定最大值 优点 最小分歧缺点 共享内存在 2 0 设备上限制为 48Kb
  • 按属性在对象数组数组中查找重复项的最短方法

    嗨 我有一系列对象 每个对象都有一个对象数组 我需要找到在特定属性中具有相同值的 内部 对象的重复项 我在循环内创建了一个循环并使用 include 有没有更短的方法来做到这一点 Verify that there are no dupli
  • UILabel 层cornerRadius 对性能产生负面影响

    我创建了一个文档视图 在角落显示页码 页码是一个具有半透明背景色的uilabel 并且有一个角半径 使用cornerRadius的财产view s layer 我已将其放置在UIScrollView 然而 这会使滚动变得不稳定 如果我删除c