2012-01-27 3 views
3

Я хочу повернуть изображение на 190 градусов при нажатии кнопки. Это работает, но когда я снова нажимаю кнопку, анимация должна начинаться там, где она заканчивалась, вместо того, чтобы начинать с 0. Поэтому каждый раз, когда я нажимаю кнопку, анимация должна поворачиваться на 190 градусов.Вращение изображения Xcode toValue и fromValue

Он начинается в 0 каждый раз becouse мой fromValue устанавливается в 0.

ли кто-нибудь знает, как я могу сделать fromValue начать где мое изображение заканчивается. Мой код ниже.

- (IBAction)buttonPressed 
{ 
    CABasicAnimation *imageRotation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"]; 

    imageRotation.fromValue = [NSNumber numberWithFloat:0]; 
    imageRotation.toValue = [NSNumber numberWithFloat:((190*M_PI)/ -180)]; 

    imageRotation.duration = 1.5; 
    imageRotation.repeatCount = 1; 

    imageRotation.removedOnCompletion = NO; 
    imageRotation.autoreverses=NO; 
    imageRotation.fillMode = kCAFillModeForwards; 

    [image.layer addAnimation:imageRotation forKey:@"imageRotation"]; 
} 

ответ

5

Спасибо за ваш ответ, но вот как я это сделал. Надежда люди могут использовать это: D

Мой .h файл выглядит следующим образом:

#import <UIKit/UIKit.h> 
#import <QuartzCore/QuartzCore.h> 

@interface testViewController : UIViewController { 
    IBOutlet UIImageView *image; 
    NSObject *lastValue; 
} 

- (IBAction)buttonPressed; 

@property(nonatomic, retain) IBOutlet NSObject *lastValue; 

@end 

Мой файл .m выглядит следующим образом:

@synthesize lastValue; 

- (void)viewAnimation0 
{ 
    CABasicAnimation *imageRotation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"]; 

    imageRotation.fromValue = lastValue; 
    imageRotation.toValue = [NSNumber numberWithFloat:((30*M_PI)/ -180)]; 
    lastValue = imageRotation.toValue; 

    imageRotation.duration = 1.5; 
    imageRotation.repeatCount = 1; 

    imageRotation.removedOnCompletion = NO; 
    imageRotation.autoreverses=NO; 
    imageRotation.fillMode = kCAFillModeForwards; 

    [image.layer addAnimation:imageRotation forKey:@"imageRotation"]; 
} 

- (void)viewAnimation1 
{ 
    CABasicAnimation *imageRotation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"]; 

    imageRotation.fromValue = lastValue; 
    imageRotation.toValue = [NSNumber numberWithFloat:((60*M_PI)/ -180)]; 
    lastValue = imageRotation.toValue; 

    imageRotation.duration = 1.5; 
    imageRotation.repeatCount = 1; 

    imageRotation.removedOnCompletion = NO; 
    imageRotation.autoreverses=NO; 
    imageRotation.fillMode = kCAFillModeForwards; 

    [image.layer addAnimation:imageRotation forKey:@"imageRotation"]; 
} 

- (void)viewAnimation2 
{ 
    CABasicAnimation *imageRotation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"]; 

    imageRotation.fromValue = lastValue; 
    imageRotation.toValue = [NSNumber numberWithFloat:((90*M_PI)/ -180)]; 
    lastValue = imageRotation.toValue; 

    imageRotation.duration = 1.5; 
    imageRotation.repeatCount = 1; 

    imageRotation.removedOnCompletion = NO; 
    imageRotation.autoreverses=NO; 
    imageRotation.fillMode = kCAFillModeForwards; 

    [image.layer addAnimation:imageRotation forKey:@"imageRotation"]; 
} 

- (IBAction)buttonPressed 
{ 
    static int counter = 0; 
    switch (++counter) { 

    case 1: 
     [self viewAnimation1]; 
     break; 

    case 2: 
     [self viewAnimation2]; 
     break; 

    default: 
     [self viewAnimation0]; 
     counter = 0; 
     break; 
    } 
    // animateButton.enabled = NO; 
} 
2

Вы должны сделать две вещи: вам нужно на самом деле установить вращение слоя (вместо установки removedOnCompletion = NO), и вам нужно не установить fromValue.

- (IBAction)buttonPressed 
{ 
    CABasicAnimation *imageRotation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"]; 

    imageRotation.toValue = [NSNumber numberWithFloat:((190*M_PI)/ -180)]; 

    imageRotation.duration = 1.5; 
    imageRotation.repeatCount = 1; 

    [image.layer setValue:imageRotation.toValue forKey:imageRotation.keyPath]; 
    [image.layer addAnimation:imageRotation forKey:@"imageRotation"]; 
} 

Смотреть Core Animation Основы видео с WWDC 2011 понять, почему вам необходимо установить свойство слоя вместо установки removedOnCompletion = NO.