过于频繁地更新UILabel文本

时间:2019-03-26 10:24:36

标签: ios objective-c performance user-interface uilabel

我需要在我的应用中显示设备的倾斜度。该算法非常简单,我使用CMMotionManager的姿态来计算倾斜度,并且正在更新一个显示像这样的度数的标签:

- (void)tiltUpdated:(float)tilt
{
    _degreesLabel.text = [NSString stringWithFormat:@"%.1f°", tilt];
}

我的问题是下一个-CMMotionManager每秒调用陀螺仪更新大约10次。每次我计算新的倾斜度并每次调用tiltUpdated方法时。而当我这样做时,我的应用程序开始变得异常滞后。我需要澄清的几件事:

  1. 滞后原因在于更新标签。我很容易定义它 通过评论。所以不是倾斜计算(这就是为什么我 此处未提供代码)

  2. 应用程序还始终显示摄像机输出。我关了     摄像头,情况有所改善,但应用程序仍然落后。

有什么方法可以优化更新UILabel文本吗?预先感谢!

1 个答案:

答案 0 :(得分:0)

好的,最后回答了我自己的问题,但我希望这对某些人会派上用场:)。

我没有找到有关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还是一种“动画”文本更改,带有轻微的“ fadeIn / fadeOut”,我很喜欢:)