Как изменить UIImage UIImageView после длительности (эффект мигания)


Я пытаюсь анимировать мигание между двумя изображениями на imageview, чтобы привлечь внимание пользователя к индикатору, чтобы заметить изменение. Я хотел бы, чтобы изображение только моргнуло один или два раза, прежде чем остаться на новом изображении. Хронология событий будет примерно следующей:

  1. старый образ был установлен и ожидает наступления определенного события.
  2. происходит событие и начинается мигающая анимация. Новое изображение отображается в течение 0,25 секунды.
  3. Старый изображение отображается в течение 0,25 секунды.
  4. новое изображение отображается в течение 0,25 секунды. Анимация заканчивается.

Из-за короткого периода анимации у меня сложилось впечатление, что есть способ сделать это без использования NSTimer. Моя текущая попытка находится ниже

+(void)blinkImage:(UIImageView*)view toNewImage:(UIImage*)newImage numOfTimes:(int)numOfTimes{

    float waitInterval = 0.25;
    float totalWaitTime = 0.0;
    UIImage *oldImage = view.image;

    view.image = newImage;
    totalWaitTime = totalWaitTime+waitInterval;

    for (int times = 0; times<numOfTimes; times++) {
        [UIView beginAnimations:@"setOld" context:nil];
        [UIView setAnimationDelay:totalWaitTime];
        [UIView setAnimationDuration:waitInterval];
        view.image = oldImage;
        totalWaitTime = totalWaitTime+waitInterval;
        NSLog(@"SetOld; waitTime %f", totalWaitTime);
        [UIView commitAnimations];

        [UIView beginAnimations:@"setNew" context:nil];
        [UIView setAnimationDelay:totalWaitTime];
        [UIView setAnimationDuration:waitInterval];
        view.image = newImage;
        totalWaitTime = totalWaitTime+waitInterval;
        NSLog(@"SetNew; waitTime %f", totalWaitTime);
        [UIView commitAnimations];
    }
}
Однако это не дало ожидаемых результатов. С помощью приведенного выше кода вид просто менялся на новое изображение и больше ничего не делал. Любая помощь будет весьма признательна. Спасибо вперед!
2 2

2 ответа:

Вот поставьте эту строчку ниже setAnimationDuration

[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:yourView cache:YES];

Здесь другой тип анимации.. также вы можете использовать bellow другой способ для анимации

#define kAnimationKey @"transitionViewAnimation"

CATransition *animation = [CATransition animation];
    [animation setDelegate:self];   
    [animation setType:kCATransitionFromBottom];
    [animation setDuration:1.0];
    [animation setTimingFunction:[CAMediaTimingFunction functionWithName:
                                  kCAMediaTimingFunctionEaseInEaseOut]];
    [[yourView layer] addAnimation:animation forKey:kAnimationKey];

Почему бы просто не использовать встроенные анимации UIImageView?

Animating Images
  animationImages  (property)
  highlightedAnimationImages  (property)
  animationDuration  (property)
  animationRepeatCount  (property)
– startAnimating
– stopAnimating
– isAnimating

Или вы всегда можете просто установить выделенное изображение и переключить его вместо всего изображения

- (id)initWithImage:(UIImage *)image highlightedImage:(UIImage *)highlightedImage