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 对性能产生负面影响 的相关文章

  • 从iOS iphone中相机返回的图像中读取GPS数据

    我需要获取使用 iOS 设备相机拍摄的图像的 GPS 坐标 我不关心相机胶卷图像 只关心使用 UIImagePickerController SourceType Camera 拍摄的图像 我读过很多 stackoverflow 答案 比如
  • iPad 3 renderInContext 缓慢 - 渲染性能不佳

    我试图从用户可以绘画的视图中获取图像 或添加一些其他视图 到目前为止 iPad1 和 2 一切正常 但在 iPad3 上它却像狗一样跑起来 我只是使用图层 renderInContext 方法 if UIScreen mainScreen
  • 无法更改 UITabBarItem.image:CSI 中不支持的像素格式

    我试图通过代码更改选项卡栏中显示的图像 我目前正在使用 Swift 和 Xcode 6 beta 3 我导入了 tabBarImage png 并 电子邮件受保护 cdn cgi l email protection在 Images xca
  • 使用 cordova 工具集构建应用程序时出错

    我正在使用 Visual Studio 2017 社区版 并且只需使用 vs 文档中的步骤即可使用 macincloud 服务进行远程构建 我基本上遇到了以下明确的错误 来自构建服务器的远程构建错误https xxxx macincloud
  • 具有自定义视图的相机

    我的应用程序使用相机 我想在相机预览上添加叠加层 例如 我想在使用相机时使用相框 还想添加一个用于相机操作的自定义栏 请帮助我做同样的事情 您可能正在尝试使用 UIImagePickerController 但我知道这个可以解决你的问题 您
  • iOS Chrome 中未设置 window.opener

    在一个文件中 我有 a href t2 html target blank go a In t2 html I have 在 iOS 上的 Safari Mac 上的 Chrome 以及几乎所有其他浏览器上 它都会打印出来 object W
  • iOS Swift 3 以编程方式将文件复制到 iCloud Drive

    在我的我有文档下载选项 当用户从我的应用程序下载文档时 我需要将其存储到已安装在用户手机中的用户 iCloud Drive 我已在 Web 和 Xcode 中配置了 iCloud 但问题是我无法将文件正确复制到 iCloud Drive 文
  • 使用离子框架的语音识别

    我正在寻找一种使用离子框架进行语音识别的方法 我想在 ios 和 android 设备上运行一个应用程序 目前 我在 ios 和 android 中提供网络视图 并有一个通用的代码库 我想为其添加语音识别功能并获取语音的输出 如果您在 Go
  • NSString 到 TimeInterval

    我有一个 NSString 的格式00 00 00 00最初获得自 dateFormatter setDateFormat HH mm ss SS 我如何获取该字符串并将其转换为 TimeInterval 如果您 100 绝对肯定这种格式永
  • 检查是否安装了 Google 地图 - iOS 10.2.1

    我刚刚将手机升级到 iOS 10 2 1 在我的 Swift 应用程序 使用 3 0 中 我试图检查手机上是否安装了 Google 地图 如果是 请在 Google 地图中打开该地址 UIApplication shared canOpen
  • 是否可以在不点击的情况下显示多个标记的多个信息窗口?

    我想在谷歌地图中显示多个标记的多个信息窗口 信息窗口应该在不点击标记本身的情况下显示 是否可以 经过研究 我了解到将标记设置为地图视图选定标记可以使信息窗口显示而无需点击它 但是 不能一次选择多个标记作为地图视图的选定标记 有什么可以做的吗
  • 使用 AVVideoCompositionCoreAnimationTool 在 CALayer 中将视频与静态图像混合

    我正在尝试将来自相机的视频与静态图像 水印 混合 我已经检查了这里的问题 答案和一些示例 包括来自 Apple 的 WWDC AVEditDemo 并以以下代码结束 不幸的是 导出的视频不包含带有图像的图层 有任何想法吗 void imag
  • 如何在代码中的UIToolBar中添加UIBarButtonItem

    我有标准 UIBarButtonItem UIBarButtonItem share UIBarButtonItem alloc initWithBarButtonSystemItem UIBarButtonSystemItemAction
  • iOS 11 /“Apps-prefs=root”功能在更新到 Swift 3 后不起作用

    我对 Swift 编程还很陌生 我制作了一个简单的测试应用程序 可以通过特定按钮以编程方式打开设置 不幸的是 更新按钮后 没有打开所需的设置页面 在本例中为 wifi 页面 而是仅打开通用设置屏幕 有人可以帮助我了解 swift 4 中究竟
  • 带有 HTML 的 UIActivityViewController

    当我将包含 HTML 内容的字符串作为数组元素传递给UIActivityViewController initWithActivityItems方法中 它不会在选定的 共享 控制器中将其呈现为 HTML 而是呈现 HTML 源 即标记而不是
  • Sqlite3 查询在 iOS 8.2 下变得非常慢

    我制作了一个可以在应用程序内使用 sqlite 数据库的应用程序 在 iOS 8 2 之前 它工作得很好 但更新后 查询方法的工作速度慢了大约 100 倍 我试图查找有关此问题的信息 但尚未找到任何信息 有人有同样的经历吗 这是我的方法 到
  • 识别用户是否在 iOS 6 设置中定义了本机 Facebook 帐户

    有没有办法通过 FACEBOOK SDK 3 1 和 iOS 6 知道用户是否在 iPhone 设置中定义了其 Facebook 帐户以供本机 Facebook 使用 我想要做的是 当打开我的应用程序时 如果用户在 iPhone 设置中定义
  • iPhone 应用程序在 iPhone 4 尺寸下运行,更新后出现黑条

    此前 该应用程序支持 iPhone 5s SE 屏幕和 iPhone 6 8 屏幕 不包括加大尺寸 这是使用启动图像完成的 因此 在 Plus 尺寸设备和 iPhone X 设备上 它会在应用程序上方和下方显示黑条 然后我们发布了一个更新
  • iOS:如何实现像Android的startActivityForResult这样的行为

    我是一名 Android 开发人员 正在开发我们应用程序的 iOS 版本 我需要知道如何在 Android 上实现类似于 startActivityForResult 的行为 我需要显示一个新的视图控制器 然后在新的视图控制器关闭时将控制权
  • 如何从我的 appDelegate 访问我的 viewController? iOS系统

    我有一个在 xCode 中创建为 基于视图的应用程序 的 iOS 应用程序 我只有一个 viewController 但它会自动显示 而且我没有看到任何将它与我的 appDelegate 关联的代码 我需要将数据从 appDelegate

随机推荐

  • 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