Обновление текста UILabel слишком часто - PullRequest
0 голосов
/ 26 марта 2019

Мне нужно показать наклон устройства в моем приложении. Алгоритм довольно прост, я использую отношение CMMotionManager для вычисления наклона, и я обновляю метку, которая показывает градусы следующим образом:

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

Моя проблема следующая - CMMotionManager вызывает обновления гироскопа примерно 10 раз в секунду. И каждый раз, когда я вычисляю новый наклон и вызываю метод tiltUpdated каждый раз. И когда я это делаю, мое приложение начинает невероятно тормозить. Несколько вещей, которые мне нужно уточнить:

  1. Причина лагов в обновлении этикетки. Я определил это довольно легко комментируя это. Так что это не расчеты наклона (вот почему я здесь код не указан)

  2. Приложения также постоянно отображают выходные данные камеры. Я выключил камера и все стало немного лучше, но приложение отстает.

Есть ли способ оптимизировать обновление текста UILabel? Заранее спасибо!

1 Ответ

0 голосов
/ 26 марта 2019

Хорошо, заканчивая тем, что отвечал на мой собственный вопрос, но я надеюсь, что это кому-нибудь пригодится:).

Я не нашел никакой ценной и подробной информации о производительности 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», и мне это нравится:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...