obrócić UIView wokół jego środka, ale kilka razy

głosy
16

Próbuję obracać niektóre UIViewwokół jego środka, więc prosty kod wygląda mniej więcej tak (w Pseudokod):

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

teraz jeżeli ustawić kąt powiedzieć M_PI / 2 rzeczą obraca się estetycznie. jeśli ustawić go na 2 * M_PI, dobrze robi „nic”. Mogę zrozumieć, że matryca przekłada się na coś, co nic nie robi (obracanie 360 oznacza „pobyt” w pewnym sensie), ale chcę, aby obrócić go 5 razy (myślę gazety obracać skala na ciebie efekt - nie jestem świetny w opisywaniu, nadzieję, że ktoś zrozumie). Tak więc, próbuje dodanie kąt ustawienia do 180 ° C (M_PI) i dodać zagnieżdżone animatationBlock. ale myślę, że ponieważ jestem ustawiania same właściwości ( someview.transition) ponownie ignoruje go jakoś). Próbowałem ustawienie powtarzania zliczania animacji do 2 z kąta M_PI ale wydaje się, że wystarczy obrócić 180, wracając do pozycji wyprostowanej, a następnie ponownie inicjując obracania.

Tak, jestem trochę pomysłów, każda pomoc mile widziana! --t

Utwórz 06/02/2009 o 00:49
źródło użytkownik
W innych językach...                            


4 odpowiedzi

głosy
36

Można użyć następującego animację na właściwości warstwy Twojego UIView za. Przetestowałem go.

UIView *viewToSpin = ...;    
CABasicAnimation* spinAnimation = [CABasicAnimation
                                  animationWithKeyPath:@"transform.rotation"];
spinAnimation.toValue = [NSNumber numberWithFloat:5*2*M_PI];
[viewToSpin.layer addAnimation:spinAnimation forKey:@"spinAnimation"];
Odpowiedział 06/02/2009 o 01:26
źródło użytkownik

głosy
6

Jak wskazano Brad Larson, można to zrobić z CAKeyframeAnimation. Na przykład,

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

Można kontrolować długości całkowitej animacji z rotationAnimation.durationmienia oraz przyspieszenie i hamowanie (i kalkulacje krokach pomiędzy) z rotationAnimation.timingFunctionnieruchomości.

Odpowiedział 29/02/2012 o 00:37
źródło użytkownik

głosy
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"];
Odpowiedział 22/06/2015 o 15:35
źródło użytkownik

głosy
1

Pierwsze ciągły efekt wirowania jest trochę trudne, ale opisują sposoby, aby to zrobić tutaj . Tak, Core Animation wydaje optymalizacji przekształca się w najbliższym położeniu końcowym wewnątrz okręgu jednostkowego. Metoda opisuję tam łańcuchy kilka animacji pół-obrotowe razem do pełnych obrotów, chociaż trzeba zauważyć nieznaczne zacinać w animacji przełączania z jednego do drugiego.

Może CAKeyframeAnimation zbudowane z tych wartości pół obrotu byłaby właściwa droga. Następnie można również kontrolować przyspieszania i zwalniania.

Odpowiedział 06/02/2009 o 14:50
źródło użytkownik

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