尝试在视图控制器中的两个视图之间进行UI动画时,我遇到了这个奇怪的问题。
当它返回主菜单时,灰色条从中间快速移动到底部。它出现在第二个屏幕上的后退按钮上,但很难看到。因此,视图中的部分内容基本上是飞来飞去,然后转到动画转换结束时应该到达的位置。
我知道动画的这段代码看起来有点奇怪,但这是回到主菜单的方法:
- (void)gotoMain_t{
NSLog(@"switch to main");
[UIView beginAnimations:nil context:NULL]; {
for(UIView *v in [containerView subviews]) {
v.frame = CGRectMake(0, 0, 1024, 768);
[UIView setAnimationDidStopSelector:@selector(removeT:finished:context:)];
}
[[UIApplication sharedApplication] beginIgnoringInteractionEvents];
MainMenu *mainMenu = [[MainMenu alloc] init];
mainMenu.frame = CGRectMake(-1024, 0, 1024, 768);
[containerView insertSubview:mainMenu atIndex:1];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDuration:.4];
[UIView setAnimationDelegate:self];
[[self.view.subviews objectAtIndex:0] setFrame:CGRectMake(1024, 0, 1024, 768)];
mainMenu.frame = CGRectMake(0, 0, 1024, 768);
[mainMenu release];
}
[UIView commitAnimations];}
有什么想法吗?感谢。
答案 0 :(得分:1)
在beginAnimations:
之前,尝试将该灰色条的坐标设置为结束位置。因此,CoreAnimation不会尝试为其设置动画。如果有效,你可以调整它的位置,这样动画在结尾看起来很不错。它看起来不知何故灰色条的y位置变为屏幕中间。
答案 1 :(得分:1)
在视图动画开始之前布置视图中的所有内容非常重要。固定代码如下:
- (void)gotoMain_t{
NSLog(@"switch to main");
[[UIApplication sharedApplication] beginIgnoringInteractionEvents];
for(UIView *v in [containerView subviews]) {
v.frame = CGRectMake(0, 0, 1024, 768);
}
MainMenu *mainMenu = [[MainMenu alloc] init];
mainMenu.frame = CGRectMake(-1024, 0, 1024, 768);
[containerView insertSubview:mainMenu atIndex:1];
[UIView beginAnimations:nil context:NULL]; {
[UIView setAnimationDidStopSelector:@selector(removeT:finished:context:)];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDuration:.4];
[UIView setAnimationDelegate:self];
[[self.view.subviews objectAtIndex:0] setFrame:CGRectMake(1024, 0, 1024, 768)];
mainMenu.frame = CGRectMake(0, 0, 1024, 768);
[mainMenu release];
}
[UIView commitAnimations];
}