Как позволить взгляду вращаться вечно - PullRequest
5 голосов
/ 27 сентября 2010

Есть ли способ позволить вращению вида навсегда с заданной скоростью?Мне это нужно для индикаторных вещей.Я знаю, что есть странная константа Lxxxxx00ff (точно ее не помню), которая обозначает «навсегда».

Ответы [ 3 ]

20 голосов
/ 27 сентября 2010

Вы можете использовать HUGE_VAL для плавающего значения (если я правильно помню, свойство repeatCount для анимации является плавающим).

Для настройки анимации вы можете создать объект CAAnimation, используя метод +animationWithKeyPath::

CABasicAnimation* animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
animation.fromValue = [NSNumber numberWithFloat:0.0f];
animation.toValue = [NSNumber numberWithFloat: 2*M_PI];
animation.duration = 3.0f;
animation.repeatCount = HUGE_VAL;
[rotView.layer addAnimation:animation forKey:@"MyAnimation"];

Если я правильно помню, создание такого вида вращения с использованием только анимации UIView невозможно, поскольку вращения на 360 градусов (2 * радианы M_PI) оптимизированы так, что вращения вообще не происходит.

2 голосов
/ 11 октября 2010

мое решение для этого немного хакерское, поскольку оно не использует базовую анимацию, но, по крайней мере, оно работает действительно навсегда и не требует настройки нескольких шагов анимации.

...
// runs at 25 fps
NSTimer* timer = [NSTimer scheduledTimerWithTimeInterval:1.0/25
                          target:self
                          selector:@selector(rotate)
                          userInfo:nil
                          repeats:YES];
[timer fire];
...

- (void)rotate {
    static int rotation = 0;

    // assuming one whole rotation per second
    rotation += 360.0 / 25.0;
    if (rotation > 360.0) {
        rotation -= 360.0;
    }
    animatedView.transform = CGAffineTransformMakeRotation(rotation * M_PI / 180.0);
}
0 голосов
/ 27 сентября 2010

моя ставка:

-(void)animationDidStopSelector:... {
  [UIView beginAnimations:nil context:NULL];
  // you can change next 2 settings to setAnimationRepeatCount and set it to CGFLOAT_MAX
  [UIView setAnimationDelegate:self];
  [UIView setAnimationDidStopSelector:@selector(animationDidStopSelector:...)];
  [UIView setAnimationDuration:...

  [view setTransform: CGAffineTransformRotate(CGAffineTransformIdentity, 6.28318531)];

  [UIView commitAnimations];
}

//start rotation
[self animationDidStopSelector:...];

ок, лучше ставка:

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationRepeatCount: CGFLOAT_MAX];
[UIView setAnimationDuration:2.0f];

[view setTransform: CGAffineTransformMakeRotation(6.28318531)];

[UIView commitAnimations];
...