2011-05-16 67 views
0

我有一个在应用程序委托中制作的选项卡栏。通过调用一个按钮点击从标签栏加载的视图中的一个按钮,我打开帮助屏幕,但是在加载后出现一个急动作。为什么在使用此UIView动画块时会看到生涩的动画?

原谅我讲informally..I已经挑选我的大脑试图找出了这一点,在过去的几个小时..

-(void)flipToHelp { 
HelpViewController *helpVariable = [[HelpViewController alloc] initWithNibName:@"HelpView" bundle:nil]; 
[self setHelpViewController:helpVariable]; 
[UIView beginAnimations:@"flipview" context:nil]; 
[UIView setAnimationDuration:0.5]; 
[UIView setAnimationCurve:UIViewAnimationCurveLinear]; 
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft 
forView:_window cache:YES]; 

[_window removeFromSuperview]; 
[helpVariable release]; 
self.window.rootViewController = self.HelpViewController; 
[UIView commitAnimations]; 
} 
+0

你为什么要调用'[_window removeFromSuperview]'?你不应该从窗口中删除标签栏控制器吗? – 2011-05-16 20:30:49

+0

我试过,但我不断收到一个错误,使用“self.window = self.HelpViewController;” ...警告:语义问题:从'HelpViewController *'分配给'UIWindow *'的指针类型不兼容 – BlockReader 2011-05-17 00:52:03

+0

我不确定重新分配rootViewController是否更改视图。如果是这样,所有你需要做的就是删除'[_window removeFromSuperview]'行。如果改变rootViewController是不够的,你可以这样做:'[self.tabBarController removeFromSuperview]; [self.window addSubview:self.HelpViewController.view];'。 – 2011-05-17 01:29:37

回答

0

只是为了从评论线程重申,你不应该从它的超级视图中删除窗口(它在技术上不具有超级视图,所以它可能导致问题)。 并设置窗口的rootViewController属性应该换出视图层次结构显然,这个急动来自更改窗口的rootViewController属性,所以也许解决方案是避免使用该属性。以下是我认为应该足以实现的目标:

-(void)flipToHelp { 
    HelpViewController *helpVariable = [[HelpViewController alloc] initWithNibName:@"HelpView" bundle:nil]; 
    [UIView beginAnimations:@"flipview" context:nil]; 
    [UIView setAnimationDuration:0.5]; 
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:_window cache:YES]; 
    [self.tabBarController removeFromSuperview]; 
    [_window addSubview:helpVariable]; 
    [UIView commitAnimations]; 
} 
+0

我想这太代码,仍然有跃动... – BlockReader 2011-05-17 14:30:00

+0

没有抽搐这里' - (无效){flipToHelp HelpViewController * helpVariable = [[HelpViewController页头] initWithNibName:@ “HelpView” 捆绑:无]。 [self setHelpViewController:helpVariable]; [UIView beginAnimations:@“flipview”context:nil]; [UIView setAnimationDuration:0.5]; [UIView setAnimationCurve:UIViewAnimationCurveLinear]; [UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:_window cache:YES]; [helpVariable release]; [self.window addSubview:self.HelpViewController.view]; [UIView commitAnimations]; }' – BlockReader 2011-05-17 14:31:17

+0

也许在设置'rootViewController'时,UIWindow如何更新视图可能是一个问题。也许你最好的选择是不要使用这个属性 - 我会用你的解决方案更新答案。 – 2011-05-17 16:20:10

0
-(void)flipToHelp { 
    HelpViewController *helpVariable = [[HelpViewController alloc] initWithNibName:@"HelpView" bundle:nil]; 
    [self setHelpViewController:helpVariable]; 
    [helpVariable release]; 

    [UIView beginAnimations:@"flipview" context:nil]; 
    [UIView setAnimationDuration:0.5]; 
    [UIView setAnimationCurve:UIViewAnimationCurveLinear]; 
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft 
         forView:self.window 
          cache:YES]; 

    self.window.rootViewController = self.HelpViewController; 
    [UIView commitAnimations]; 
} 

这个怎么样的代码?它仍然有一个生涩的动画?

+0

@deekpak它仍然生涩 – BlockReader 2011-05-17 00:46:17