2011-01-31 35 views
1

当我试图做一个视图控制器中的两个视图之间的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

的setAnimationDidStopSelector看起来奇怪,这不是清楚你需要设置一个循环里面,因为我觉得它只是获取commitAnimation后调用。 – 2011-01-31 19:17:54

+0

你期望发生什么? – 2011-01-31 19:18:24

+0

我只是希望视图能够滑向另一个方向。但你看到我在说什么吗?没有明显的原因,灰色条从中间到底部。 – VagueExplanation 2011-01-31 19:37:14

回答

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

}

1

beginAnimations:之前,尝试将该灰色条的坐标设置为结束位置。所以CoreAnimation不会尝试对它进行动画处理。如果可行,您可以调整其位置,以便动画看起来不错。它看起来不知何故灰色条的y位置变成了中间屏幕。