roti o UIView în jurul centrului său, dar de mai multe ori

voturi
16

Am încercat să se rotească unele în UIViewjurul centrului său, astfel încât codul de simplu merge ceva de genul (în pseudocod):

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

acum , dacă am setat unghiul să spun M_PI / 2 lucru se rotește frumos. dacă l - am setat la 2 * M_PI, bine face „nimic“. Pot să înțeleg că matricea se traduce prin ceva care nu face nimic (rotativ 360 înseamnă „ședere“ , într - un sens), totuși, vreau să - l rotească de 5 ori ( se gândească la un ziar la scară alterna vin la tine efect - Nu sunt mare de a descrie, sper cineva înțelege). Deci, am încercat adăugarea de unghi setarea la 180 grade (M_PI) și se adaugă un imbricate animatationBlock. dar cred că din moment ce eu sunt setarea aceeași proprietate ( someview.transition) , din nou, ignoră într -un fel). Am încercat stabilirea numărului de repetare a animației la 2 cu unghi M_PI dar se pare să se rotească pur și simplu 180, merge înapoi la poziția dreaptă și apoi din nou inițierea Rotație.

Deci, eu sunt un pic de idei, orice ajutor apreciat! --t

Întrebat 06/02/2009 la 00:49
sursa de către utilizator
În alte limbi...                            


4 răspunsuri

voturi
36

Puteți utiliza următoarea animație pe proprietatea strat UIView dumneavoastră. L-am testat.

UIView *viewToSpin = ...;    
CABasicAnimation* spinAnimation = [CABasicAnimation
                                  animationWithKeyPath:@"transform.rotation"];
spinAnimation.toValue = [NSNumber numberWithFloat:5*2*M_PI];
[viewToSpin.layer addAnimation:spinAnimation forKey:@"spinAnimation"];
Publicat 06/02/2009 la 01:26
sursa de către utilizator

voturi
6

După cum Brad Larson indicat, puteți face acest lucru cu un CAKeyframeAnimation. De exemplu,

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

Puteți controla durata animației totale cu rotationAnimation.durationproprietatea, și de accelerare și decelerare (și calcularea în etape între) , cu rotationAnimation.timingFunctionproprietatea.

Publicat 29/02/2012 la 00:37
sursa de către utilizator

voturi
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"];
Publicat 22/06/2015 la 15:35
sursa de către utilizator

voturi
1

Obținerea unui efect de filare continuă este un pic mai complicat, dar eu descriu un mijloc de a face acest lucru aici . Da, Core Animation pare a optimiza transformă poziția cea mai apropiată care se termină în cercul unitate. Metoda am descrie acolo lanțuri câteva animații jumătate de rotație împreună pentru a face rotații complete, cu toate că se observa o ușoară bâlbâi în handoff de la o animație la alta.

Poate un CAKeyframeAnimation construit cu aceste valori jumătate de rotație ar fi modul corect de a merge. Apoi, ai putea controla, de asemenea, accelerare și decelerare.

Publicat 06/02/2009 la 14:50
sursa de către utilizator

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