Как реализовать непрерывную мигающую цветовую анимацию на 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
Подход обеспечивает чистый способ запуска и остановки анимации.