2014-10-19 69 views
0

我正在使用Storyboard处理iPhone应用程序,我需要处理从一个视图控制器到另一个视图控制器的视图更改。我有:从一个场景移动到一个视图控制器 - 尝试呈现其视图不在窗口层次结构中的ViewController

-INTROViewController.m 
-INTROscene.m (this is a SKScene laid out by the above controller) 

-UpgradeViewController.m 

有一个子画面按钮INTROscene.m和当我按下它时,它触发这是由其视图控制器(INTROViewController.m)看到通知,并且这触发了对切换到另一个视图控制器(UpgradeViewController.m)。如果我使用选项1,(甚至增加了,以确保第一观点已经出现了延迟),它会触发以下错误:

“试图提出ViewController中谁的观点是不是在窗口层次!”

我发现的切换视图控制器而不触发此错误(选项2)但视觉效果的方式是可怕的,与示出在两个视图之间的空屏幕少许滞后。此外,我不能使用任何使用modalTransitionStyle的好转换。

在这种情况下切换视图的正确方法是什么?

在我的AppDelegate中,我没有根视图控制器(我不知道应该如何设置)。这是我得到错误的原因吗?如果是这样,我该如何执行它?干杯!

//Option 1 (triggers the error above) 
    -(void)TransitionTo_Upgrades_ViewController:(NSNotification *)notification 
    { 
     //Take from INTROViewController to UpgradeViewController 
     UpgradeViewController *controllerUPGRADES = [self.storyboard instantiateViewControllerWithIdentifier:@"Upgrades_storyboard"]; 
     controllerUPGRADES.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
     [self performSelector:@selector(NowGotoUPRADES) withObject:nil afterDelay:2.0]; 
    } 

    - (void)NowGotoUPRADES 
    { 
     [self presentViewController:controllerUPGRADES animated:YES completion:nil]; 
    } 

//Option 2 (no error but horrible effect) 
-(void)TransitionTo_OPTIONS_ViewController:(NSNotification *)notification 
{ 
     [self performSelector:@selector(NowGotoOPTIONS) withObject:nil afterDelay:2.0]; 
} 
- (void)NowGotoOPTIONS 
{ 
     //Take from INTROViewController to UpgradeViewController 
    UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil]; 
    UIViewController *DesiredViewController = [storyBoard instantiateViewControllerWithIdentifier:@"Options_storyboard"]; 
    [[[[UIApplication sharedApplication] delegate] window] setRootViewController:DesiredViewController]; 
} 

回答

0

我也经历过同样的问题,并发现没有办法解决,因为一旦你从场景的视图控制器移动到现场,你无法移动到其他视图控制器,你已迁出的适当的等级。我的解决方案是将其他视图控制器设置为skscenes,但是您可能希望将大部分视窗作为视图控制器,同时在同一个视图控制器上也不会在场景之间移动。

希望这会有所帮助。如果您需要澄清,请回复。

+0

嗨。感谢您确认我的疑惑。这是疯狂的,但这是不能做到的!你有没有说可以直接在视图控制器中设置整个skscene而不必使用另一个类?我理解正确吗?这可能是一个解决方案 – jeddi 2014-11-19 21:12:19

+0

是的,这应该是可能的。只需使用一个视图控制器即可拥有多个skscenes。 – 16648 2014-11-21 01:00:43

相关问题