2012-06-11 14 views
11

Czy jest jakiś sposób na zrobienie rzeczy w "krótkim i łatwym" sposób jak poniżej? Krzywa wydaje się nadal używać EaseOut.iOS UIView krzywe animacji

[UIView setAnimationCurve:UIViewAnimationCurveEaseIn]; 
[UIView animateWithDuration:0.5 animations:^{ 
    // ... do stuff here 
}]; 

Odpowiedz

25

Mieszacie dwa różne rodzaje animacji UIView. Powinieneś używać czegoś takiego:

[UIView animateWithDuration:0.5 
         delay:0.0 
        options:UIViewAnimationOptionCurveEaseIn 
       animations:^{ 
        // ... do stuff here 
       } completion:NULL]; 

To pochodzi z nowszego interfejsu API UIView-animation opartego na blokach. Pierwsza linia, z drugiej strony, jest częścią starszej UIView animacji API, które wygląda następująco:

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:0.5]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn]; 
// ... do stuff here 
[UIView commitAnimations]; 

Robią to samo i można skorzystać z jednego (choć Apple zaleca API bloku oparte ponieważ jest łatwiejsze/czystsze, aby wykonywać wywołania zwrotne po zakończeniu animacji).

2

Możesz to zrobić za pomocą Core Animation, CAKeyFrameAnimation, aby zdefiniować punkty krzywej. Zobacz ten samouczek: http://nachbaur.com/blog/core-animation-part-4

+4

Zauważ, że łącza są zniechęceni tylko odpowiedzi tutaj na SO. Rozważ [edytuj swoją odpowiedź] (http://meta.stackexchange.com/a/8259/186599) i dodaj streszczenie tutaj. – NAZIK

+0

@NAZIK zaszczyt jestem tutaj, aby odpowiedzieć na pytanie i znaleźć odpowiednie rozwiązanie dla querry! – Steve

+0

Przejrzałem samouczek, wziąłem udział w przeglądzie – NAZIK

0

Weźmy punkty krzywej p1, p2, p3, p4 i p5, & znajdź punkt środkowy dla każdej pary sąsiednich punktów. Oznacz m1 jako punkt środkowy dla p1 i p2. Podobnie dla m2, m3, m4.

  • Dodaj kwadratową krzywą do punktu m2 z p2 jako punktem kontrolnym.
  • Dodaj czterokrotną krzywą do punktu m3 z p3 jako punktem kontrolnym.
  • Dodaj krzywą czteropunktową do punktu m4 z p4 jako punktem kontrolnym.

Kod:

CGFloat screenHeight = self.view.frame.size.height; 
CGFloat screenWidth = self.view.frame.size.width; 

UIView *aniView = [[UIView alloc] initWithFrame:CGRectMake(50, screenHeight, 50, 50)]; 
[aniView setBackgroundColor:[UIColor redColor]]; 
aniView.layer.cornerRadius = 25.0; 
[self.view addSubview:aniView]; 


UIBezierPath *movePath = [UIBezierPath bezierPath]; 
[movePath moveToPoint:aniView.center]; 
[movePath addQuadCurveToPoint:CGPointMake(screenWidth-50,screenHeight-50) 
       controlPoint:CGPointMake(screenWidth/2,screenHeight-150)]; 
CAKeyframeAnimation *moveAnim = [CAKeyframeAnimation animationWithKeyPath:@"position"]; 
moveAnim.path = movePath.CGPath; 
moveAnim.removedOnCompletion = YES; 
CAAnimationGroup *animGroup = [CAAnimationGroup animation]; 
animGroup.animations = [NSArray arrayWithObjects:moveAnim, nil]; 
animGroup.duration = 2.0; 

[CATransaction begin]; { 
    [CATransaction setCompletionBlock:^{ 
     [aniView.layer removeAllAnimations]; 
     [aniView removeFromSuperview]; 
    }]; 

    [aniView.layer addAnimation:animGroup forKey:nil]; 

} [CATransaction commit]; 

Kopiowanie przeszłość powyższy kod do jakiejś metody i próby wywołania metody ...

Powiązane problemy