【问题标题】:Calling presentViewController in main ViewController of SpriteKit Game在 SpriteKit 游戏的主 ViewController 中调用 presentViewController
【发布时间】:2014-05-20 13:28:30
【问题描述】:

我正在构建“spritekit”游戏,我需要展示另一个 viewController 而不是主要的 viewcontroller。 我尝试与代表和通知中心一起执行此操作,以发送请求以显示新的视图控制器。两种方式都正确地从“SkScene”(tuGameOver) 中的 main viewController(tuViewController) 中调用了这个函数。重点是正确呈现FacebookLikeViewDemoViewController

-(void)showShareScreen{
    NSLog(@"VIEWCONTROLER RECEIVED");
    FacebookLikeViewDemoViewController *helpVC = [[FacebookLikeViewDemoViewController alloc]initWithNibName:@"FacebookLikeViewDemoViewController" bundle:nil];
    [self presentViewController: helpVC animated: YES completion:nil];
}

当这个函数被执行时,我得到了NSlog,然后是terminating with uncaught exception of type NSException SIGABRT 错误。

我也尝试将这个函数修改为:

-(void)showShareScreen{
    NSLog(@"VIEWCONTROLER RECEIVED");

    UIViewController *vc = [[UIApplication sharedApplication] keyWindow].rootViewController;
        FacebookLikeViewDemoViewController *helpVC = [[FacebookLikeViewDemoViewController alloc]init];
    [vc presentViewController: helpVC animated: YES completion:nil];
}

有了这个,我没有崩溃,并且出现了一些东西,但这是空白的黑屏。

FacebookLikeViewDemoViewController 是典型的viewController 类,固定在情节提要中查看控制器。 有什么想法吗?

【问题讨论】:

    标签: ios iphone objective-c uiviewcontroller


    【解决方案1】:

    Mc.Lover(笑)想出了一个在 SKScene 中展示 VC 的解决方案。以下是他的解决方案的要点。我已将它添加到 touchesBegan: 方法中,以便您轻松测试它。

    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
    {
        UIView *Sview  = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 512, 512)];
        UIImageView *image = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"shareScoreImg.png"]];
        image.frame = Sview.frame;
        [Sview addSubview:image];
    
        UIGraphicsBeginImageContextWithOptions(Sview.bounds.size, Sview.opaque, 0.0);
        [Sview.layer renderInContext:UIGraphicsGetCurrentContext()];
        UIImage * screenshot = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
    
        UIActivityViewController* activityViewController =
        [[UIActivityViewController alloc] initWithActivityItems:@[screenshot] applicationActivities:nil];
    
        UIViewController *vc = self.view.window.rootViewController;
        [vc presentViewController: activityViewController animated: YES completion:nil];
    }
    

    他原来的问答是here

    【讨论】:

    • 我不知道如何使用它来解决我的问题,你能给我看一个 viewController 的例子吗?我阅读了您提供的问答,但它并没有帮助我解决这个问题。
    • @karek - 你不想在你的 VC 中展示 Facebook/Twitter 吗?
    • 我想展示我在其中创建了 facebook 插件的 ViewController,以及来自 github 的 FaceBookLikeView 组件。
    • @karek - 我发布的代码拍摄了屏幕快照并显示了活动控制器,然后用户可以选择邮寄、打印、推特、Facebook 等...
    • 我更喜欢坚持我的想法(我只需要在游戏中点赞我的页面),我有正在工作的点赞代码,我只需要在通知中心提供来自 SkScene 的 ViewController。
    【解决方案2】:

    试试这个代码:

     FacebookLikeViewDemoViewController *helpVC = [[FacebookLikeViewDemoViewController alloc]initWithNibName:@"FacebookLikeViewDemoViewController" bundle:nil];
            [self.navigationController pushViewController:helpVC animated:YES] ;
    

    【讨论】:

    • 我从函数中收到了 Nslog,但什么也没发生,没有崩溃并呈现 viewController
    • 在情节提要中向您当前的 viewController 添加一个 navigationController
    • 我无法将navigationController 添加到我当前的主viewController,我只能添加导航栏,没有任何改变。
    • @karek 你能用图片编辑你的回复
    猜你喜欢
    • 2014-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多