【问题标题】:Rotate and translate UIImageView off and on screen在屏幕上旋转和平移 UIImageView
【发布时间】:2012-02-11 06:01:26
【问题描述】:

如何从屏幕的一侧旋转和平移 UIImageView,然后从另一侧返回.. 假设我有一个轮子,我想从中间旋转和平移,然后离开屏幕到左侧,然后它从右侧“返回”并返回中间......

我使用以下代码将其旋转并平移到屏幕外;

        CABasicAnimation* rotationAnimation;
        rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
        rotationAnimation.toValue = [NSNumber numberWithFloat: -M_PI * 2.0 /* full rotation*/ * 2 * 1 ];
        rotationAnimation.duration = 1;
        rotationAnimation.cumulative = YES;
        rotationAnimation.repeatCount = 1.0; 
        rotationAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
        rotationAnimation.delegate = self;

        CABasicAnimation* translationAnimation;
        translationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.translation.x"];
        translationAnimation.toValue = [NSNumber numberWithFloat:-700];
        translationAnimation.duration = 1;
        translationAnimation.cumulative = YES;
        translationAnimation.repeatCount = 1.0; 
        translationAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
        translationAnimation.removedOnCompletion = NO;
        translationAnimation.fillMode = kCAFillModeForwards;

不知道这是否是正确的方法,所以请帮忙!

【问题讨论】:

    标签: iphone ios animation uiimageview cabasicanimation


    【解决方案1】:

    试试这个,它会为你工作

      CABasicAnimation* rotationAnimation;
        rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
        rotationAnimation.toValue = [NSNumber numberWithFloat: -M_PI * 2.0 /* full rotation*/ * 2 * 1 ];
        rotationAnimation.duration = 1;
        rotationAnimation.cumulative = YES;
        rotationAnimation.repeatCount = 1.0; 
        rotationAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
        rotationAnimation.delegate = self;
    
        CABasicAnimation* translationAnimation;
        translationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.translation.x"];
        translationAnimation.toValue = [NSNumber numberWithFloat:-700];
        translationAnimation.duration = 1;
        translationAnimation.cumulative = YES;
        translationAnimation.repeatCount = 1.0; 
        translationAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
        translationAnimation.removedOnCompletion = NO;
        translationAnimation.fillMode = kCAFillModeForwards;
    
    
    
        CAAnimationGroup *group = [CAAnimationGroup animation];
        group.animations = [NSArray arrayWithObjects:rotationAnimation,translationAnimation, nil];
        group.delegate = self;
        group.removedOnCompletion = NO;
        group.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    
        [[self.imageView.layer addAnimation:group forKey:@"randt"];
    

    【讨论】:

      【解决方案2】:

      Swift 5.4.2(基于 Sanjeev Rao 的回复):

      let rotationAnimation = CABasicAnimation(keyPath: "transform.rotation.z")
      rotationAnimation.toValue = NSNumber(floatLiteral: Double.pi * 2.0 /* full rotation*/ * 2 * 1)
      rotationAnimation.duration = 1
      rotationAnimation.isCumulative = true
      rotationAnimation.repeatCount = 1.0;
      rotationAnimation.timingFunction = CAMediaTimingFunction(name: .easeOut)
      rotationAnimation.delegate = self // can be skipped
              
      let translationAnimation = CABasicAnimation(keyPath: "transform.rotation.x")
      translationAnimation.toValue = NSNumber(floatLiteral: -700)
      translationAnimation.duration = 1
      translationAnimation.isCumulative = true
      translationAnimation.repeatCount = 1.0
      translationAnimation.timingFunction = CAMediaTimingFunction(name: .easeOut)
      translationAnimation.isRemovedOnCompletion = false
      translationAnimation.fillMode = .forwards
              
      let groupAnimation = CAAnimationGroup()
      groupAnimation.animations = [rotationAnimation, translationAnimation] 
      group.delegate = self // can be skipped
      groupAnimation.isRemovedOnCompletion = false
      groupAnimation.timingFunction = CAMediaTimingFunction(name: .easeOut)
              
      self.imageView.layer.add(groupAnimation, forKey: "randt")
      

      【讨论】:

        猜你喜欢
        • 2013-04-11
        • 2018-10-18
        • 1970-01-01
        • 2019-08-17
        • 1970-01-01
        • 1970-01-01
        • 2013-05-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多