2013-02-14 4 views
0

Мне нужно изображение, чтобы изменить его .image в начале и конце каждой анимации.Изменить изображение после запуска/завершения анимации UIImageView

Это анимация:

- (void)performLeft{ 

    CGPoint point0 = imView.layer.position; 
    CGPoint point1 = { point0.x - 4, point0.y }; 

    CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"position.x"]; 
    anim.fromValue = @(point0.x); 
    anim.toValue = @(point1.x); 
    anim.duration = 0.2f; 
    anim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]; 

    // First we update the model layer's property. 
    imView.layer.position = point1; 
    // Now we attach the animation. 
    [imView.layer addAnimation:anim forKey:@"position.x"]; 
} 

Я знаю, что я мог бы назвать ...

[anim animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)]; 

Но я не знаю, как я мог бы использовать анимацию, чтобы изменить образ imView ? Как я могу использовать анимацию для изменения .image моего изображения?

Спасибо!

+0

Какой тип анимации вы ищете? Вы можете попробовать использовать [myView commitAnimations]. См. Здесь: http://www.raywenderlich.com/2454/how-to-use-uiview-animation-tutorial –

+0

Ну, этот вопрос требует Core-Animations ... – Tanner

ответ

2

Короткий ответ заключается в том, что вы не можете использовать Core Animation для изменения изображения изображения. Core Animation работает на слоях, а не на представлениях. Кроме того, Core Animation только создает видимость изменений. Подсловляющие слои фактически не меняются вообще.

Я бы предложил использовать анимацию UIView вместо объектов CAAnimation. Затем вы можете использовать свой метод завершения для изменения изображения.

Анимация UIImage проще в использовании, и она изменяет свойства изображений, которые вы анимации.

UIImage анимации код на основе будет выглядеть примерно так:

- (void)performLeft 
{ 
    CGFloat center = imView.center; 
    center.x = center.x - 4; 
    imView.image = startingImage; //Set your stating image before animation begins 
    [UIView animateWithDuration: 0.2 
    delay: 0.0 
    options: UIViewAnimationOptionCurveEaseIn 
    animations: 
    ^{ 
    imView.center = center; 
    } 
    completion: 
    ^{ 
    imView.image = endingImage; //Set the ending image once the animation completes 
    } 
    ]; 
}