我有一个简单的动画,只需修改按钮的位置:
[UIView beginAnimation:nil context:nil];
[UIView setAnimationsDuration:3.0];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
mybutton.frame = CGREctMake(20, 233, 280, 46);
[UIView commitAnimations];
我想在这个完成后执行其他一些动画,怎么做?
答案 0 :(得分:5)
您可以查看setAnimationBeginsFromCurrentState:。所有动画都在自己的线程中运行,因此[UIView commitAnimations]
是非阻塞调用。所以,如果你在提交第一个动画后立即开始另一个动画,在适当地设置它是否从当前状态开始之后,我想你会得到你想要的行为。即:
[UIView beginAnimation:nil context:nil];
// set up the first animation
[UIView commitAnimations];
[UIView beginAnimation:nil context:nil];
[UIView setAnimationBeginsFromCurrentState:NO];
// set up the second animation
[UIView commitAnimations];
或者,您可以通过执行类似
的操作来提供回调[UIView beginAnimation:nil context:nil];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)
// set up the first animation
[UIView commitAnimations];
//...
- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {
// set up the second animation here
}
答案 1 :(得分:1)
使用+ [UIVIew setAnimationDelegate:]和+ [UIView setAnimationDidStopSelector:]方法将您的类配置为在动画结束时接收消息。
答案 2 :(得分:1)
用于获取开始的代码段..设置初始(第一个)动画:
- (void) aniPath:(AnimationPath *) path
{
[UIView beginAnimations:path->aniname context:path];
[UIView setAnimationDuration:path->interval];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(aniDone:finished:context:)];
// your initial animation
[UIView commitAnimations];
}
在完成第一个动画时链接到另一个动画:
- (void) aniDone:(NSString *) aniname finished:(BOOL) finished context:(void *) context
{
AnimationPath *path = (AnimationPath *) context;
if ([aniname isEqualToString:path->aniname]) {
[UIView beginAnimations:path->aniname context:context];
[UIView setAnimationDuration:path->interval];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(aniDone:finished:context:)];
// more animations, even recursively
[UIView commitAnimations];
}
}
答案 3 :(得分:1)
这很容易。
你可以
- (void)animationDidContiune:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {
UIView *currentObj = context;
[self callTheAnimation: currentObj];
}
您可以轻松循环动画。
要结束它 - 我会创建一个animationDidEnded并使用它而不是animationDidContiune 一旦你想要停止它(就像在动画中选择要么连续或结束一样简单)。
HF。
什么是重要的:
使用这种类型的动画制作方法:
- (void)callTheAnimation:(UIView*)itemView
{
[UIView beginAnimations:@"animation" context:itemView];
.
.
.
}
它们非常灵活 - 由于对象的层次结构,您可以在此处设置动画。