有没有什么办法可以做到像下面这样“简单易行”的方式?该曲线似乎仍然使用EaseOut
。ios UIView动画曲线
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
[UIView animateWithDuration:0.5 animations:^{
// ... do stuff here
}];
有没有什么办法可以做到像下面这样“简单易行”的方式?该曲线似乎仍然使用EaseOut
。ios UIView动画曲线
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
[UIView animateWithDuration:0.5 animations:^{
// ... do stuff here
}];
你混合两种不同的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,因为它在动画完成后更容易/更清晰地进行回调)。
您可以使用Core Animation,CAKeyFrameAnimation来定义曲线点。请参阅本教程:http://nachbaur.com/blog/core-animation-part-4
我们取曲线点p1,p2,p3,p4和p5,&找到每对相邻点的中点。将m1标记为p1和p2的中点。类似地,m2,m3,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];
复制过去上面的代码到一些方法,并尝试调用方法...
注意,链接只有答案在这里气馁的SO。请考虑[编辑您的答案](http://meta.stackexchange.com/a/8259/186599)并在此处添加摘要。 – NAZIK
@NAZIK你的荣誉,我在这里回答问题,找到一个合适的解决方案! – Steve
我已经通过教程,采取我upvote – NAZIK