Как связать анимацию масштабирования с iPhone UIImageView?

Я пытаюсь уменьшить изображение, изменить изображение, а затем снова увеличить его.

CABasicAnimation* shrink = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
shrink.toValue = [NSNumber numberWithDouble:0];
shrink.duration = 1;
    shrink.delegate = self;
    [myImageView.layer addAnimation:shrink forKey:@"shrink"];   

делает сжатие, затем, когда оно завершается, я меняю изображение и начинаю увеличивать:

- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag 
{
    myImageView.image = [images objectAtIndex:image];
CABasicAnimation* grow = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
grow.toValue = CGAffineTransformMakeScale(1,1);
    grow.delegate = self;
grow.duration = 1;
[myImageView.layer addAnimation:grow forKey:@"grow"];   
}

Это прекрасно работает на симуляторе, но на устройстве, когда сжатие завершается, я получаю вспышку полноразмерного старого изображения, а затем начинается анимация увеличения с новым изображением.

Любая идея, как избавиться от этой вспышки?

(Я попробовал «removedOnCompletion = NO;» и попытался установить affineTransform равным уменьшенному размеру после первого завершения, но мне не повезло.)

Любые советы приветствуются.

kb

Редактировать:

Отлично! Установка следующего:

shrink.fillMode = kCAFillModeForwards; 
shrink.removedOnCompletion = NO; 

Убрал перепрошивку. Спасибо, Бен!


person KevinButler    schedule 06.03.2009    source источник


Ответы (2)


Попробуйте установить fillMode вашей анимации на kCAFillModeForwards. Это должно оставить элемент таким, каким он был в конце анимации, а не до него.

person Ben Gottlieb    schedule 06.03.2009
comment
Отлично! Установка следующая: out.fillMode = kCAFillModeForwards; out.removedOnCompletion = НЕТ; Убрал перепрошивку. Спасибо, Бен! - person KevinButler; 07.03.2009

У меня была такая же проблема, когда я пытался создать еще одну CAAnimation в методе animationDidStop. Я предлагаю использовать CAKeyframeAnimation.

person hyn    schedule 06.03.2009