2012-01-27 34 views
3

我想按一个按钮时将图像转动190度。这有效,但是当我再次按下按钮时,动画需要从最后结束的地方开始,而不是从0开始。所以,每次按下按钮,动画都需要变成190度。Xcode图像旋转toValue和from价值

它从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"]; 
} 

观看核心动画精华WWDC 2011视频来了解为什么你需要设置图层的属性,而不是设置removedOnCompletion = NO的。