2012-06-11 14 views
11

¿Hay alguna manera de hacer las cosas de la manera "corta y fácil" como se muestra a continuación? La curva parece seguir usando EaseOut.ios Curvas de animación UIView

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

Respuesta

25

Está mezclando dos tipos diferentes de animaciones UIView. Debería utilizar algo como esto cualquiera de éstos:

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

Esto vino de la API UIView-animación basada en bloques más reciente. La primera línea, por el contrario, es parte de la más antigua API de animación UIView que tiene este aspecto:

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

Ellos hacen lo mismo y se puede utilizar cualquiera (aunque Apple recomienda la API basada en bloques, ya que es más fácil/más limpio hacer devoluciones de llamada una vez que termina la animación).

2

Puede hacerlo utilizando Core Animation, CAKeyFrameAnimation para definir los puntos de la curva. Consulte este tutorial: http://nachbaur.com/blog/core-animation-part-4

+4

Nota que enlazan-únicas respuestas se desaniman aquí en la SO. Considere [editar su respuesta] (http://meta.stackexchange.com/a/8259/186599) y agregue una sinopsis aquí. – NAZIK

+0

@NAZIK su honor, estoy aquí para responder a la pregunta y encontrar una solución adecuada para querry! – Steve

+0

He pasado por el tutorial, tomar mi voto popular – NAZIK

0

Tomemos los puntos de curva p1, p2, p3, p4 y p5, & buscamos el punto medio para cada par de puntos adyacentes. Etiqueta m1 como el punto medio para p1 y p2. Del mismo modo para m2, m3, m4.

  • Agregue quad curve a point m2 con p2 como punto de control.
  • Agregue la curva cuádruple al punto m3 con p3 como punto de control.
  • Agregue la curva cuádruple al punto m4 con p4 como punto de control.

Código:

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

Copia pasado por encima de código en algún método y tratar de llamar al método ...

Cuestiones relacionadas