我后使用此代码在我viewDidLoad方法:代码只有在viewDidLoad方法工作
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:.5];
self.view.frame = CGRectMake(0, 0, 250, 50);
[UIView commitAnimations];
它工作正常,但如果我尝试做同样的事情在其他的方法,如相同的实现文件这:
- (void)setViewMovedUp:(BOOL)movedUp {
NSLog(@"test movedUp ");
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:.5];
self.view.frame = CGRectMake(0, 0, 250, 50);
[UIView commitAnimations];
}
然后动画不再工作(但NSLog仍然打印)。为什么此方法的行为与“viewDidLoad”之后有所不同?在按下按钮之后调用setViewMovedUp,因此我假设该视图已被加载?我应该添加一个条件来确保视图被加载吗?
编辑后米哈尔的评论:
我按下按钮使用这个IBAction为在MyViewController.m:
- (IBAction)viewUp {
MainViewController *moveUp = [[MainViewController alloc] init];
[moveUp setViewMovedUp:YES];
}
,这是MainViewController.m代码:
- (void)setViewMovedUp:(BOOL)movedUp {
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.5];
self.view.frame = CGRectMake(0, 0, 250, 250);
[UIView commitAnimations];
}
Button的IBAction不是通讯使用MainViewController方法(setViewMovedUp)很好地发挥作用。
在你的例子中,它在同一个类中运行良好。
对不起,这只是一个错字,我已经编辑了这个问题。 – 2010-09-24 21:51:35
你真的在改变框架吗?因为你在'viewDidLoad'中设置了与'setViewMovedUp:'中相同的帧。还是又是一个错字? – Michal 2010-09-25 07:52:40
尝试将NSLog更改为NSLog(@“test movedUp from:%@”,NSStringFromCGRect(self.view.frame));'并比较这些帧。如果帧是相同的,那么就没有动画。 – Michal 2010-09-25 07:53:55