在我的viewDidLoad方法中,我将一个按钮放在视图左侧,屏幕外。
然后我使用这两种方法为它设置动画:
-(void) viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[self showButton];
}
方法:
-(void) showButton {
[myButton setTitle:[self getButtonTitle] forState:UIControlStateNormal];
// animate in
[UIView beginAnimations:@"button_in" context:nil];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationDone)];
[UIView setAnimationDuration:1.0];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
[UIView setAnimationBeginsFromCurrentState:YES];
[myButton setFrame:kMyButtonFrameCenter]; // defined CGRect
[UIView commitAnimations];
}
该按钮会立即显示,并且不会设置动画。此外,立即调用animationDone选择器。
为什么不将我的按钮设置为屏幕动画?
编辑:这必须与在viewDidAppear中尝试启动动画有关...
答案 0 :(得分:6)
我尝试了你的动画代码,它运行正常。
在哪里设置按钮的初始框架?在开始动画之前,是否可能错误地将按钮的框架设置为kMyButtonFrameCenter
?这可以解释为什么立即调用animationDone选择器。
以下是有效的代码:
-(void) showButton {
UIButton *myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[myButton setTitle:@"test" forState:UIControlStateNormal];
myButton.frame = CGRectMake(-100.0, 100.0, 100.0, 30.0);
[self.view addSubview:myButton];
// animate in
[UIView beginAnimations:@"button_in" context:nil];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationDone)];
[UIView setAnimationDuration:1.0];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
[UIView setAnimationBeginsFromCurrentState:YES];
[myButton setFrame:CGRectMake(100.0, 100.0, 100.0, 30.0)];
[UIView commitAnimations];
}
如您所见,我没有更改动画代码中的任何内容。所以我认为问题是按钮的框架。
有点偏离主题:如果您没有为iOS构建应用程序< 4你可能想看看UIView的iOS 4.0附带的“带块的动画”。
[UIView animateWithDuration:1.0 delay:0.0 options:UIViewAnimationCurveEaseIn animations:^void{myButton.frame = kMyButtonFrameCenter} completion:^(BOOL completed){NSLog(@"completed");}];
===编辑===
看完你的评论后,我的怀疑似乎不正确。 inspire48指出正确的方向和他的回答。您应该将按钮的位置放在viewDidAppear
方法或showButton
方法中,以确保在调用动画之前将按钮放在屏幕之外
答案 1 :(得分:3)
将动画调用放在viewDidAppear中。 viewDidLoad用于更多数据类型设置。任何视觉效果(如动画)都应该放在viewDidAppear中。你已经证实了这一点 - 如果你稍等一下就可以了。