有没有办法像下面这样“简单而简单”地做事?该曲线似乎仍在使用EaseOut
。
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
[UIView animateWithDuration:0.5 animations:^{
// ... do stuff here
}];
有没有办法像下面这样“简单而简单”地做事?该曲线似乎仍在使用EaseOut
。
[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];
它们做同样的事情,你可以使用任何一种(尽管 Apple 推荐基于块的 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];
将上面的代码复制到某个方法中并尝试调用该方法...