ios - 过于频繁地更新 UILabel 文本
问题描述
我需要在我的应用程序中显示设备的倾斜度。该算法非常简单,我使用CMMotionManager
' 的姿态来计算倾斜度,并且我正在更新一个显示度数的标签,如下所示:
- (void)tiltUpdated:(float)tilt
{
_degreesLabel.text = [NSString stringWithFormat:@"%.1f°", tilt];
}
我的问题是下一个 - CMMotionManager 每秒调用陀螺仪更新大约 10 次。每次我都在计算新的倾斜和调用tiltUpdated
方法。当我这样做时,我的应用程序开始出现令人难以置信的滞后。我需要澄清几件事:
滞后的原因在于更新标签。我通过评论很容易地定义了它。所以这不是倾斜计算(这就是为什么我没有在这里提供代码)
应用程序还始终显示相机输出。我关闭了相机,情况有所好转,但应用程序仍然滞后。
有什么方法可以优化更新 UILabel 文本?提前致谢!
解决方案
好的,最后回答了我自己的问题,但我希望这对某人有用:)。
我没有找到任何关于 UILabel 性能的有价值和详细的信息(这太糟糕了,因为我有兴趣了解这方面的知识),但我找到了一个替代方案,即CATextLayer
.
我正在创建CATextLayer
:
_textLayer = [CATextLayer new];
_textLayer.frame = CGRectMake(0.0f, _degreesLabelView.frame.size.height*0.5f - textHeight*0.5f, _degreesLabelView.frame.size.width, textHeight);
_textLayer.backgroundColor = [UIColor clearColor].CGColor;
_textLayer.foregroundColor = [UIColor whiteColor].CGColor;
_textLayer.alignmentMode = kCAAlignmentCenter;
_textLayer.contentsScale = UIScreen.mainScreen.scale;
_textLayer.fontSize = 17.0;
_textLayer.string = @"0°";
[_degreesLabelView.layer addSublayer:_textLayer];
在这里我正在更新文本:
- (void)tiltUpdated:(float)tilt
{
_textLayer.string = [NSString stringWithFormat:@"%.1f°", tilt];
}
CATextLayer 也是一种带有轻微“淡入/淡出”的“动画”文本变化,我喜欢它 :)
推荐阅读
- django - 模板渲染期间出错:__str__ 返回非字符串(NoneType 类型)
- angular - 角度超过最大调用堆栈大小
- python - Python - 从一系列 FreqDist 中获取最新出现的 FreqDist 键
- mamp-pro - MAMP PRO XIP.IO 指向错误的文档根目录
- ios - 如何在可发现的设备名称中使用蓝牙发送图像,并在 swift 5 中使用 CoreBluetooth 发送图像
- kotlin - Kotlin:如何通过对象访问类的私有数据成员?
- django - django - search_fields 中的主键?
- javascript - 在电子邮件中发送 html 内容并将 UTC 日期动态转换为本地时间
- laravel - Laravel - 违反完整性约束:1052 列“created_at”在 Laravel 过滤器中的 where 子句中不明确
- node.js - 如何使用 apollo 服务器对 graphQl 中的数据进行排序?