forgatása UIView középpontja körül, de többször

szavazat
16

Próbálok forgatni néhány UIViewközéppontja körül, így az egyszerű kódot megy valami hasonló (pszeudokód):

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

ha most beállított szög mondani M_PI / 2 dolog forog szépen. ha én meg azt, hogy a 2 * M_PI, jól csinál „semmit”. Megértem, hogy a mátrix fordítja valamit, nem csinál semmit (forgó 360 azt jelenti: „tartózkodás” bizonyos értelemben), mégis, azt akarom, hogy fordítsa el 5-ször (gondolom, egy újságot forgatva skála jön rád hatás - nem vagyok nagy a leírására, remélem valaki megérti). Így megpróbáltam hozzátéve beállítási szög 180 ° (M_PI), és adjunk hozzá egy beágyazott animatationBlock. de azt hiszem, hogy mivel én beállításával azonos tulajdonság ( someview.transition) ismét figyelmen kívül hagyja azt, hogy valahogy). Próbáltam beállítás ismétlődésszámot az animáció, 2 szög M_PI de úgy tűnik, hogy egyszerűen csak forgatni 180 megy vissza egyenes helyzetben, majd megindítjuk a forgatás újra.

Szóval én egy kicsit ki a gondolatok, minden segítséget értékelik! --t

A kérdést 06/02/2009 00:49
a forrás felhasználó
Más nyelveken...                            


4 válasz

szavazat
36

Használhatja az alábbi animáció a UIView rétegét tulajdon. Kipróbáltam.

UIView *viewToSpin = ...;    
CABasicAnimation* spinAnimation = [CABasicAnimation
                                  animationWithKeyPath:@"transform.rotation"];
spinAnimation.toValue = [NSNumber numberWithFloat:5*2*M_PI];
[viewToSpin.layer addAnimation:spinAnimation forKey:@"spinAnimation"];
Válaszolt 06/02/2009 01:26
a forrás felhasználó

szavazat
6

Mivel Brad Larson jelzett, akkor ezt egy CAKeyframeAnimation. Például,

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

Beállítható az időtartam a teljes animációt az rotationAnimation.durationingatlan, és a gyorsulás és lassulás (és számítási lépések között) az rotationAnimation.timingFunctioningatlan.

Válaszolt 29/02/2012 00:37
a forrás felhasználó

szavazat
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"];
Válaszolt 22/06/2015 15:35
a forrás felhasználó

szavazat
1

Első folyamatos centrifugálás hatás egy kicsit trükkös, de leírom eszközeként kell csinálni itt . Igen, Core Animation úgy tűnik, hogy optimalizálja transzformáció a legközelebbi vége helyzetben az egységen belül kör. A módszer, amit leírni olyan láncok néhány fél fordulata animációk össze, hogy a fordulatot, de te észre enyhe dadogás az átadás-átvétel animációs a másikra.

Talán egy CAKeyframeAnimation épített ezekkel fél fordulata értékeket lenne a helyes út. Akkor is ellenőrizni gyorsulás és lassulás.

Válaszolt 06/02/2009 14:50
a forrás felhasználó

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