【问题标题】:Xcode image rotation toValue and fromValueXcode 图像旋转 toValue 和 fromValue
【发布时间】:2012-01-27 14:38:50
【问题描述】:

我想在按下按钮时将图像旋转 190 度。那行得通,但是当我再次按下按钮时,动画需要从上次结束的地方开始,而不是从 0 开始。所以每次我按下按钮时,动画都需要旋转 190 度。

每次都从 0 开始,因为我的 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"];
}

【问题讨论】:

    标签: xcode image rotation cabasicanimation


    【解决方案1】:

    感谢您的回答,但我是这样做的。希望人们可以使用这个: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 2011Core Animation Essentials 视频,了解为什么需要设置图层属性而不是设置removedOnCompletion = NO

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-04-08
        • 2015-06-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多