2010-09-27 11 views
5

C'è un modo per far ruotare una vista per sempre, con una velocità specificata? Ho bisogno di questo per un tipo di indicatore. So che c'è questa strana costante Lxxxxx00ff (non lo ricordo esattamente) che sta per "per sempre".Come far ruotare una vista per sempre?

risposta

20

È possibile utilizzare HUGE_VAL per il valore flottante (se non ricordo male, la proprietà repeatCount per l'animazione è un float).

Per l'animazione di configurazione è possibile creare l'oggetto CAAnimation utilizzando +animationWithKeyPath: metodo:

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"]; 

se non ricordo male la creazione di questo tipo di rotazione utilizzando solo le animazioni UIView è impossibile, perché le rotazioni su 360 gradi (2 * M_PI radianti) sono ottimizzato per nessuna rotazione.

+0

suona bene! ma come posso impostare l'animazione per far ruotare la vista a 390 gradi e continuare a ruotare? – openfrog

+0

@openfrog, questa è la risposta corretta. Ruota la vista ruotando esplicitamente il livello della vista con un'animazione di base. Continuerà a rotolare se fai ciò che Vladimir ha suggerito. –

0

la mia scommessa è:

-(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:...]; 

ok scommessa migliore:

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

[view setTransform: CGAffineTransformMakeRotation(6.28318531)]; 

[UIView commitAnimations]; 
2

mia soluzione per questo è un po 'hacky in quanto non utilizza l'animazione di base, ma almeno funziona veramente per sempre e non richiede di impostare più passaggi di animazione.

... 
// 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); 
} 
Problemi correlati