2012-06-11 149 views
11

有没有什么办法可以做到像下面这样“简单易行”的方式?该曲线似乎仍然使用EaseOutios UIView动画曲线

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

回答

25

你混合两种不同的UIView的动画的。你应该使用类似这样的东西:

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

这是来自基于块的新的UIView动画API。第一行,在另一方面,是老的UIView动画API的一部分,看起来像这样:

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

他们做了同样的事情,你可以使用(尽管苹果建议的基于块的API,因为它在动画完成后更容易/更清晰地进行回调)。

2

您可以使用Core Animation,CAKeyFrameAnimation来定义曲线点。请参阅本教程:http://nachbaur.com/blog/core-animation-part-4

+4

注意,链接只有答案在这里气馁的SO。请考虑[编辑您的答案](http://meta.stackexchange.com/a/8259/186599)并在此处添加摘要。 – NAZIK

+0

@NAZIK你的荣誉,我在这里回答问题,找到一个合适的解决方案! – Steve

+0

我已经通过教程,采取我upvote – NAZIK

0

我们取曲线点p1,p2,p3,p4和p5,&找到每对相邻点的中点。将m1标记为p1和p2的中点。类似地,m2,m3,m4。

  • 将四边形曲线添加到以p2作为控制点的m2点。
  • 将p3的四边形曲线添加到点m3作为控制点。
  • 以p4作为控制点,将四条曲线添加到点m4。

代码:

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

复制过去上面的代码到一些方法,并尝试调用方法...