На делегате:
- (void)blinkAnimation:(NSString *)animationId finished:(BOOL)finished target:(UIView *)target
{
if (shouldContinueBlinking) {
[UIView beginAnimations:animationId context:target];
[UIView setAnimationDuration:0.5f];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(blinkAnimation:finished:target:)];
if ([target alpha] == 1.0f)
[target setAlpha:0.0f];
else
[target setAlpha:1.0f];
[UIView commitAnimations];
}
}
И для запуска анимации:
shouldContinueBlinking = YES;
[self blinkAnimation:@"blinkAnimation" finished:YES target:cursorView];
Также убедитесь, что в вашем классе есть переменная экземпляра shouldContinueBlinking
Выполните основной способ анимации:
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"opacity"];
[animation setFromValue:[NSNumber numberWithFloat:1.0]];
[animation setToValue:[NSNumber numberWithFloat:0.0]];
[animation setDuration:0.5f];
[animation setTimingFunction:[CAMediaTimingFunction
functionWithName:kCAMediaTimingFunctionLinear]];
[animation setAutoreverses:YES];
[animation setRepeatCount:20000];
[[view layer] addAnimation:animation forKey:@"opacity"];
Где view - это UIView, который вы хотите мигнуть. Core Animation делает это очень удобным, потому что он автоматически меняет анимацию для вас. Помните, что ваша полная продолжительность вдвое больше, чем вы установили в поле продолжительности, потому что указанное вами значение применяется к прямому направлению. Если вы хотите, чтобы вся анимация выполнялась (вперед и назад) с указанной продолжительностью, разделите продолжительность пополам.
Скорее всего, вы блокируете основной цикл событий и, таким образом, блокируете анимацию, когда пытаетесь анимировать только по окончании.
Вместо этого установите таймер, который срабатывает после 1 / 2 секунды, которая запускает следующую анимацию. Этот таймер можно сбросить по окончании предыдущей анимации, тем самым уменьшив нагрузку и сделав частоту мигания более регулярной (но вам придется выяснить, что наиболее подходит).
См. Документацию класса NSTimer.
Обратите внимание, что любая подобная постоянная анимация разрядит батарею. Во всяком случае, не большой, но ... все же ...