iphone的UIImageView旋转

问题描述:

谁能告诉我如何在圆周运动iphone的UIImageView旋转

如果你的意思是,旋转图像?“你怎么做的图像追随圆形路径”,那么伪是:

image.x = circleCentre.x + cos(angle) * circleRadius; 
image.y = circleCentre.y + sin(angle) * circleRadius; 
angle += 5; 

This question要求同样的事情,尽管换言之。在这个问题中的答案以及this question应该提供一种方法来为UIView(UIImageView仅仅是它的一个子类)创建一个关于360度或更多中心的动画。

+0

也许你对旋转和革命感到困惑。上述问题是关于革命的。 – Biranchi 2010-04-30 05:28:31

无论是小于完整旋转还是多次旋转,都可以将视图旋转一定数量的弧度,而无需将旋转分割成几部分。作为一个例子,下面的代码会在一个指定的秒数内旋转一个视图,每秒一次。您可以轻松修改它以旋转一定数量的旋转视图,或旋转一定数量的弧度。

- (void) runSpinAnimationWithDuration:(CGFloat) duration; 
{ 
    CABasicAnimation* rotationAnimation; 
    rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; 
    rotationAnimation.toValue = [NSNumber numberWithFloat: M_PI * 2.0 /* full rotation*/ * rotations * duration ]; 
    rotationAnimation.duration = duration; 
    rotationAnimation.cumulative = YES; 
    rotationAnimation.repeatCount = 1.0; 
    rotationAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]; 

    [myView.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"]; 
} 
+0

我收到一个错误,“旋转未声明” – abhinav 2009-09-15 06:17:44

+3

旋转是一个常量。将其替换为您希望视图在持续时间内旋转的次数。 – mahboudz 2009-09-17 11:31:57

基于mahboudz的回答,您可以将其设置设定为无限旋转:
rotationAnimation.repeatCount = HUGE_VALF;

创建动画

- (CABasicAnimation *)spinAnimationWithDuration:(CGFloat)duration clockwise:(BOOL)clockwise repeat:(BOOL)repeats 
{ 
    CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; 
    anim.toValue = clockwise ? @(M_PI * 2.0) : @(M_PI * -2.0); 
    anim.duration = duration; 
    anim.cumulative = YES; 
    anim.repeatCount = repeats ? CGFLOAT_MAX : 0; 
    return anim; 
} 

将它添加到一个视图

CABasicAnimation *animation = [self spinAnimationWithDuration:1.0 clockwise:YES repeat:YES]; 
[self.spinningView.layer addAnimation:animation forKey:@"rotationAnimation"]; 

这个答案如何不同来自@ mahboudz的回答?如果大多数函数都返回对象,而不是仅仅操纵一些对象,那么您将拥有更简洁的代码。