Как реализовать непрерывную мигающую цветовую анимацию на UITableViewCell с управлением Start/Stop?

В моем iOS-приложении я использую UITableView с макс. 8 строк (количество строк может меняться, но максимум 8). Я загружаю некоторые данные, которые обрабатываются и представлены в виде таблицы.

Если некоторые данные неверны (вне диапазона или чего-либо), я должен сообщить об этом пользователю. Это предупреждение должно быть миганием строки. Если какое-то значение в позиции 2 неверно, строка 2 должна мигать (белый / красный).

Мне нужен совет, как лучше всего это осуществить.

Единственная идея, которую я имею, состоит в том, чтобы реализовать таймер backgroud, который работает с интервалом 500 мс и каждый раз проверяет массив с данными, и если некоторые данные не верны, он меняет цвет фона конкретной строки (если цвет фона backgroud белый, он меняется на красный и опозит). Это должно выглядеть как мигание.

Это нормально или у тебя есть идея получше? Спасибо

1 ответ

UIView

Вы можете использовать методы анимации UIView обрабатывать анимацию стороны вещей...

На этот вопрос есть несколько ответов, которые должны повторять анимацию, с проверкой между циклами, чтобы увидеть, должна ли анимация продолжаться или останавливаться.

Тем не менее, учитывая, что вы хотите запустить непрерывную анимацию и прервать / остановить ее на основе какого-либо другого события, я думаю, используя CABasicAnimation может быть лучше...

CABasicAnimation

Вы можете использовать CABasicAnimation для анимации backgroundColor из UITableViewCell,

Например, вот код, который я использовал для анимации цвета UIView:

// UIView* _addressTypeTokenView;
// UIColor* _tokenOnColour;
// UIColor* _tokenOffColour;

CABasicAnimation* colourChange = [CABasicAnimation animationWithKeyPath:@"backgroundColor"];
colourChange.fromValue = (__bridge id)(_tokenOffColour.CGColor);
colourChange.toValue = (__bridge id)(_tokenOnColour.CGColor);
colourChange.duration = 0.6;
colourChange.delegate = self;
_addressTypeTokenView.layer.backgroundColor = _tokenOnColour.CGColor;
[_addressTypeTokenView.layer addAnimation:colourChange forKey:@"colourChangeAnimation"];

Вы захотите создать анимацию, которая повторяется вечно. (Согласно смежному вопросу по этой теме) это законно использовать HUGE_VALF создать такую ​​анимацию. Например

colourChange.repeatDuration = HUGE_VALF;

Как только вы создали CABasicAnimation Вы добавляете это к CALayer рассматриваемого вида вместе с ключом:

- (void)addAnimation:(CAAnimation *)anim forKey:(NSString *)key

В моем примере выше, я использовал ключ @"colourChangeAnimation":

[_addressTypeTokenView.layer addAnimation:colourChange forKey:@"colourChangeAnimation"];

Этот ключ может быть использован позже для удаления анимации с помощью этого метода:

- (void)removeAnimationForKey:(NSString *)key

Вам все еще нужно регулярно проверять, действительны ли данные. Если он станет действительным, вы можете удалить анимацию, чтобы остановить эффект мигания.

Вы можете выполнить эту проверку в контроллере представления с помощью таймера, или, возможно, объект модели будет обрабатывать проверку достоверности данных и использовать обратный вызов делегата для связи с контроллером представления (чтобы разделить ответственность и сохранить ваш уровень контроллера уровня более чистым).

Однако вы обрабатываете проверку достоверности данных, CABasicAnimation Подход обеспечивает чистый способ запуска и остановки анимации.

Другие вопросы по тегам