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

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

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

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

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

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


person DanielH    schedule 11.08.2015    source источник
comment
Поскольку ячейки используются повторно, и я предполагаю, что у вас есть прокрутка, не кажется ли вам, что постоянное мигание этих ячеек может быть не лучшей идеей? Только мое мнение. Я бы предпочел показать пользователю индикатор (возможно, изображение красного креста) в строке, чтобы показать, что что-то не так, или анимировать его только один раз / два раза с красного на белый. Остальное, я также позволю экспертам прокомментировать это :)   -  person Gurtej Singh    schedule 11.08.2015


Ответы (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

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

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

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

person Gavin Hope    schedule 11.08.2015