otočit UIView kolem jeho středu, ale několikrát

hlasů
16

Snažím se otočit některé UIViewkolem svého středu, takže jednoduchý kód jde něco podobného (v pseudokódu):

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

Nyní když jsem nastavit úhel říci M_PI / 2 věc otáčí pěkně. kdybych nastavte ji na 2 * M_PI, dobře to dělá „nic“. Chápu, že matrice překládá na něco, co nedělá nic (rotující 360 znamená „pobyt“ v jistém smyslu), ale chci to otočit 5x (myslím novin otočit stupnice přichází na vás efekt - Nejsem skvěle popisuje, že někdo zná). Tak jsem se snažil přidat nastavení úhlu 180 ° (M_PI) a přidat vnořené animatationBlock. ale myslím, že od té doby jsem nastavit stejnou vlastnost ( someview.transition) opět ignoruje nějak). Snažil jsem se nastavit počet opakování animace na 2 s úhlem M_PI, ale zdá se, že stačí otočit o 180 °, se vrací do přímé polohy a znovu zahájení otáčet.

Takže jsem trochu mimo nápadů, jakoukoliv pomoc ocení! -T

Položena 06/02/2009 v 00:49
zdroj uživatelem
V jiných jazycích...                            


4 odpovědí

hlasů
36

Můžete použít následující animace na majetku vrstvy vašeho UIView je. Testoval jsem to.

UIView *viewToSpin = ...;    
CABasicAnimation* spinAnimation = [CABasicAnimation
                                  animationWithKeyPath:@"transform.rotation"];
spinAnimation.toValue = [NSNumber numberWithFloat:5*2*M_PI];
[viewToSpin.layer addAnimation:spinAnimation forKey:@"spinAnimation"];
Odpovězeno 06/02/2009 v 01:26
zdroj uživatelem

hlasů
6

Jako Brad Larson bylo uvedeno, můžete to udělat s CAKeyframeAnimation. Například,

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

Můžete ovlivnit délku celkové animace s rotationAnimation.durationmajetkem, a zrychlení a zpomalení (a výpočet kroků mezi tím) s rotationAnimation.timingFunctionmajetkem.

Odpovězeno 29/02/2012 v 00:37
zdroj uživatelem

hlasů
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"];
Odpovězeno 22/06/2015 v 15:35
zdroj uživatelem

hlasů
1

Získání kontinuální předení efekt je trochu složitější, ale já popsat způsob, jak to udělat zde . Ano, Core Animation Zdá se, že optimalizovat transformace do nejbližší polohy zakončení uvnitř kruhu jednotky. Způsob Popisuji tam řetězy několik half-rotace animace dohromady, aby plných otáček, i když si všimnete mírné koktání v předání z jedné animace ke druhému.

Možná CAKeyframeAnimation konstruována s těmito hodnotami poloviční rotace by byla správná cesta. Pak můžete také ovládat zrychlování a zpomalování.

Odpovězeno 06/02/2009 v 14:50
zdroj uživatelem

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