ruotare un'UIView attorno al suo centro, ma più volte

voti
16

Sto cercando di ruotare un po ' UIViewattorno al suo centro, in modo che il semplice codice più o meno così (in pseudocodice):

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

Ora, se ho impostato l'angolo di dire M_PI / 2 la cosa gira bene. se ho impostato a 2 * M_PI, bene fa nulla. Posso capire che la matrice si traduce in qualcosa che non fa nulla (rotazione di 360 mezzi soggiorno in un certo senso), ma, voglio ruotare 5 volte (si pensi a un giornale ruotare scala vengono voi effetto - io non sono grande a descrivere, spero che qualcuno capisca). Così, ho provato ad aggiungere angolo di impostazione a 180 gradi (M_PI) e aggiungere un nidificato animatationBlock. ma credo che, dal momento che sto impostando la stessa proprietà ( someview.transition) di nuovo l'ignora in qualche modo). Ho provato a installare numero di ripetizioni dell'animazione a 2 con angolo M_PI ma sembra ruotare semplicemente 180, tornando in posizione diritta e quindi avviare di nuovo la rotazione.

Quindi, io sono un po 'a corto di idee, qualsiasi aiuto apprezzato! --t

È pubblicato 06/02/2009 alle 00:49
fonte dall'utente
In altre lingue...                            


4 risposte

voti
36

È possibile utilizzare il seguente animazione sulla proprietà strato del UIView. Ho provato.

UIView *viewToSpin = ...;    
CABasicAnimation* spinAnimation = [CABasicAnimation
                                  animationWithKeyPath:@"transform.rotation"];
spinAnimation.toValue = [NSNumber numberWithFloat:5*2*M_PI];
[viewToSpin.layer addAnimation:spinAnimation forKey:@"spinAnimation"];
Risposto il 06/02/2009 a 01:26
fonte dall'utente

voti
6

Come Brad Larson indicato, si può fare questo con una CAKeyframeAnimation. Per esempio,

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

È possibile controllare la durata dell'animazione totale con la rotationAnimation.durationstruttura e l'accelerazione e decelerazione (e calcolo di passaggi in mezzo) con la rotationAnimation.timingFunctionstruttura.

Risposto il 29/02/2012 a 00:37
fonte dall'utente

voti
1
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"];
Risposto il 22/06/2015 a 15:35
fonte dall'utente

voti
1

Ottenere un effetto di filatura continua è un po 'difficile, ma io descrivere un mezzo per farlo qui . Sì, Core Animation sembra per ottimizzare trasforma nella posizione di termine più vicino all'interno del cerchio unitario. Il metodo che ho descritto ci catene alcune animazioni mezza rotazione insieme per fare rotazioni complete, anche se si nota una leggera balbuzie nel handoff da un'animazione a quella successiva.

Forse un CAKeyframeAnimation costruito con questi valori mezza rotazione sarebbe la strada giusta da percorrere. Poi si potrebbe anche controllare l'accelerazione e la decelerazione.

Risposto il 06/02/2009 a 14:50
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more