奇怪的UI视图动画效果

时间:2011-01-31 18:58:20

标签: iphone objective-c xcode ipad animation

尝试在视图控制器中的两个视图之间进行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];}

有什么想法吗?感谢。

2 个答案:

答案 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];

}