roteren een UIView rond het middelpunt, maar een paar keer

stemmen
16

Ik ben op zoek naar een aantal roteren UIViewrond het middelpunt, zodat de eenvoudige code gaat iets als (in pseudocode):

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

als ik nu ingesteld hoek te zeggen M_PI / 2 het ding draait mooi. als ik stel deze in op 2 * M_PI, goed doet niets. Ik kan begrijpen dat de matrix vertaalt naar iets dat niets doet (roterende 360 betekent verblijf in zekere zin), maar toch, ik wil om het te draaien 5 keer (denk aan een krant draaien schaal op je afkomt effect - ik ben niet geweldig op het beschrijven, hoop dat iemand begrijpt). Dus probeerde ik het toevoegen van het instellen van hoek tot 180 graden (M_PI) en voeg een geneste animatationBlock. maar ik denk dat sinds ik ben het opzetten dezelfde eigenschap ( someview.transition) opnieuw negeert een of andere manier). Ik heb geprobeerd het instellen van aantal herhalingen van de animatie tot 2 met hoek M_PI maar het lijkt gewoon draaien 180, terug te gaan naar rechte stand en dan weer de inleiding van de roteren.

Dus, ik ben een beetje uit ideeën, alle hulp op prijs gesteld! --T

De vraag is gesteld op 06/02/2009 om 00:49
bron van user
In andere talen...                            


4 antwoorden

stemmen
36

U kunt de volgende animatie op laageigenschap van uw UIView gebruiken. Ik heb het getest.

UIView *viewToSpin = ...;    
CABasicAnimation* spinAnimation = [CABasicAnimation
                                  animationWithKeyPath:@"transform.rotation"];
spinAnimation.toValue = [NSNumber numberWithFloat:5*2*M_PI];
[viewToSpin.layer addAnimation:spinAnimation forKey:@"spinAnimation"];
antwoordde op 06/02/2009 om 01:26
bron van user

stemmen
6

Zoals Brad Larson aangegeven, kunt u dit doen met een CAKeyframeAnimation. Bijvoorbeeld,

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

U kunt de duur van de totale animatie met de controle rotationAnimation.durationpand, en de versnelling en vertraging (en de berekening van de stappen in tussen) met de rotationAnimation.timingFunctioneigenschap.

antwoordde op 29/02/2012 om 00:37
bron van user

stemmen
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"];
antwoordde op 22/06/2015 om 15:35
bron van user

stemmen
1

Het krijgen van een continu draaiende effect is een beetje lastig, maar beschrijf ik een manier om het te doen hier . Ja, lijkt Core Animation om transformaties naar de dichtstbijzijnde einde positie binnen de eenheid cirkel te optimaliseren. De methode die ik beschrijf er ketens een paar halve omwenteling animaties samen om volledige rotaties te maken, hoewel u nog steeds kleine stotteren in de overdracht van de ene animatie naar de volgende.

Misschien een CAKeyframeAnimation gebouwd met deze half-rotatie waarden zou de juiste weg te gaan. Dan kun je ook versnelling en vertraging controle.

antwoordde op 06/02/2009 om 14:50
bron van user

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