2009-09-14 2 views

ответ

2

Если вы имеете в виду, «Как вы сделать изображение по круговому пути», то псевдокод будет:

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

This question спрашивает одно и то же, хотя в разных словах. Ответы в этом вопросе, а также в this question должны обеспечить способ анимации UIView (UIImageView - это просто подкласс этого) вокруг его центра на 360 градусов и более.

+0

Наверное, U r запутался в поворотах и ​​оборотах. Этот вопрос касается революции. – Biranchi

28

Вы можете поворачивать представление некоторым количеством радианов, независимо от того, меньше ли оно полного вращения или много кратных полного вращения, без необходимости разделить поворот на куски. Например, следующий код будет вращать просмотр один раз в секунду в течение заданного количества секунд. Вы можете легко изменить его, чтобы вращать вид на определенное количество вращений или на некоторое количество радианов.

- (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

+3

вращения - это константа. Замените его количеством раз, когда вы хотите, чтобы представление вращалось в течение продолжительности. – mahboudz

3

на основе ответа mahboudz, вы можете установить его бесконечно спина, установив:
rotationAnimation.repeatCount = HUGE_VALF;

1

Создание анимации

- (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? У вас будет более чистый код, если большинство ваших функций возвращают объекты, а не просто манипулируют некоторыми объектами здесь и там.

Смежные вопросы