rotere en UIView rundt sitt sentrum, men flere ganger

stemmer
16

Jeg prøver å rotere litt UIViewrundt sitt sentrum, så enkel kode går noe sånt som (i pseudokode):

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

nå hvis jeg setter vinkel si M_PI / 2 ting roterer pent. hvis jeg setter den til 2 * M_PI, vel det gjør ingenting. Jeg kan forstå at matrisen betyr noe som ikke gjør noe (roterende 360 betyr stay på en måte), men likevel, jeg ønsker å rotere det 5 ganger (tenk på en avis rotere skala kommer mot deg effekt - jeg er ikke gode på å beskrive, håper noen forstår). Så prøvde å legge innstillingen vinkel til 180 ° (M_PI) og tilsett en nestet animatationBlock. men jeg antar at siden jeg setter samme egenskap ( someview.transition) igjen det ignorerer det liksom). Jeg prøvde å sette antall gjentakelser av animasjonen til 2 med vinkel M_PI men det ser ut til å bare rotere 180, som går tilbake til rett posisjon og deretter initiere rotere igjen.

Så, jeg er litt tom for ideer, noen hjelp verdsatt! --T

Publisert på 05/02/2009 klokken 23:49
kilden bruker
På andre språk...                            


4 svar

stemmer
36

Du kan bruke følgende animasjon på din UIView er lag eiendom. Jeg har testet den.

UIView *viewToSpin = ...;    
CABasicAnimation* spinAnimation = [CABasicAnimation
                                  animationWithKeyPath:@"transform.rotation"];
spinAnimation.toValue = [NSNumber numberWithFloat:5*2*M_PI];
[viewToSpin.layer addAnimation:spinAnimation forKey:@"spinAnimation"];
Svarte 06/02/2009 kl. 00:26
kilden bruker

stemmer
6

Som Brad Larson angitt, kan du gjøre dette med en CAKeyframeAnimation. For eksempel,

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

Man kan kontrollere varigheten av det totale animasjon med den rotationAnimation.durationegenskap, og den akselerasjon og retardasjon (og beregning av trinnene i mellom) med den rotationAnimation.timingFunctionegenskapen.

Svarte 28/02/2012 kl. 23:37
kilden bruker

stemmer
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"];
Svarte 22/06/2015 kl. 15:35
kilden bruker

stemmer
1

Å få en kontinuerlig spinnende effekt er litt vanskelig, men jeg beskrive en måte å gjøre det her . Ja, synes Core Animation å optimalisere forvandler til nærmeste sluttposisjonen innenfor enhetssirkelen. Metoden jeg beskrive det kjeder noen halvrotasjons animasjoner sammen til fulle rotasjoner, selv om du legger merke til en liten stamme i overlevering fra en animasjon til den neste.

Kanskje en CAKeyframeAnimation konstruert med disse halvrotasjons verdier ville være den riktige veien å gå. Da kan du også styre akselerasjon og retardasjon.

Svarte 06/02/2009 kl. 13:50
kilden bruker

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