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

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

  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];
    }
}

Однако это не дало ожидаемых результатов. С приведенным выше кодом представление просто изменилось на новое изображение и больше ничего не делало.

Любая помощь будет принята с благодарностью. Заранее спасибо!


person Krejko    schedule 18.06.2012    source источник


Ответы (2)


здесь поместите эту строку ниже setAnimationDuration

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

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

#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];
person Paras Joshi    schedule 18.06.2012
comment
переход анимации не позволяет мне использовать несколько последовательных анимаций, но дает мне гораздо более элегантное решение. Вместо этого я решил просто использовать flipFromLeft с одной анимацией. Спасибо за ответ! - person Krejko; 18.06.2012

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

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

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

- (id)initWithImage:(UIImage *)image highlightedImage:(UIImage *)highlightedImage
person Ryan Poolos    schedule 18.06.2012