旋转UIView的中心,但几次

我想旋转一些UIView的中心,所以简单的代码就像(伪代码):

 [UIView beginAnimations:@"crazyRotate" context:nil]; [UIView setAnimationDuration:1.0]; someview.transform = CGAffineTransformMakeRotation(angle); [UIView commitAnimations] 

现在如果我设置angular度说M_PI / 2的东西很好地旋转。 如果我将它设置为2 * M_PI,那么它“没有”。 我可以理解,matrix转化为什么都不做(旋转360意味着“停留”在某种意义上),但是,我想旋转它5次(想到一个报纸旋转的规模来到你的效果 – 我不是善于描述,希望有人能理解)。 所以,我试着把设置angular度加到180度(M_PI)并添加一个嵌套的animatationBlock 。 但我想,因为我设置相同的属性( someview.transition )再忽略它)。 我尝试将angular度为M_PI的animation的重复计数设置为2,但似乎只是简单地旋转180,回到直线位置,然后再次启动旋转。

所以,我有点想法,任何帮助表示赞赏! –t

你可以在你的UIView的图层属性上使用下面的animation。 我testing过了。

 UIView *viewToSpin = ...; CABasicAnimation* spinAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"]; spinAnimation.toValue = [NSNumber numberWithFloat:5*2*M_PI]; [viewToSpin.layer addAnimation:spinAnimation forKey:@"spinAnimation"]; 

正如Brad Larson指出的,你可以用CAKeyframeAnimation来做到这CAKeyframeAnimation 。 例如,

 CAKeyframeAnimation *rotationAnimation; rotationAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform.rotation.z"]; rotationAnimation.values = [NSArray arrayWithObjects: [NSNumber numberWithFloat:0.0 * M_PI], [NSNumber numberWithFloat:0.75 * M_PI], [NSNumber numberWithFloat:1.5 * M_PI], [NSNumber numberWithFloat:2.0 * M_PI], nil]; rotationAnimation.calculationMode = kCAAnimationPaced; rotationAnimation.removedOnCompletion = NO; rotationAnimation.fillMode = kCAFillModeForwards; rotationAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; rotationAnimation.duration = 10.0; CALayer *layer = [viewToSpin layer]; [layer addAnimation:rotationAnimation forKey:@"rotationAnimation"]; 

您可以使用rotationAnimation.duration属性控制整个animation的持续时间,并使用rotationAnimation.duration属性控制加速度和减速度(以及其间的步骤计算)。

获得持续的纺纱效果是有点棘手,但我描述了一个在这里做的手段。 是的,核心animation似乎优化转换到单位圈内最接近的结局位置。 我在那里描述的方法把几个半旋转的animation链接在一起,以便进行完整的旋转,尽pipe在从一个animation到另一个animation的切换中你会注意到一个轻微的结局。

用这些半旋转值构build的CAKeyframeAnimation也许是正确的select。 那么你也可以控制加速和减速。

 CABasicAnimation* animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; animation.fromValue = [NSNumber numberWithFloat:0.0f]; animation.toValue = [NSNumber numberWithFloat: 2*M_PI]; animation.duration = 8.0f; animation.repeatCount = INFINITY; [self.myView.layer addAnimation:animation forKey:@"SpinAnimation"];