【问题标题】:Present SKScene from UIVIewController after selection on UICollectionView在 UICollectionView 上选择后从 UIVIewController 呈现 SKScene
【发布时间】:2014-07-10 07:32:20
【问题描述】:

我正在尝试为包含多个游戏的项目创建侧滚动菜单。我想让用户水平滚动 UICollectionView(在我的初始 ViewController 内)并点击它以加载其中一个游戏。

我一直在尝试使用:

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
if(indexPath.row == 1) {
    [self showSpinWheel];   
}

- (void)showSpinWheel {
    SKSceneLoader *spinLoaderView = [[SKSceneLoader alloc] init];
   [self presentViewController:spinLoaderView animated:YES completion:nil];
}

当一个单元格被选中时,但当我点击它时它会一直崩溃。

SKSceneLoader 有这段代码,但没关系,因为它甚至在加载之前就崩溃了。

- (void)viewWillLayoutSubviews {
    [super viewWillLayoutSubviews];

    // Configure the view.
    SKView * skView = (SKView *)self.view;

    if(!skView.scene) {

        skView.showsFPS = NO;
        skView.showsNodeCount = NO;

        // Create and configure the scene.
        SKScene * scene = [SpinWheel sceneWithSize:skView.bounds.size];
         scene.scaleMode = SKSceneScaleModeAspectFill;

         // Present the scene.
         [skView presentScene:scene];

        // background sound

    }
}

这是错误:

-[UIView scene]: unrecognized selected sent to instance
NSInvalidArgumentException, etc, etc.

如何判断加载场景的正确视图?据我了解,我正在尝试将 SKCcene 加载到 UIView 中,这是不正确的。我需要先加载另一个 UIViewController 并在那里加载场景吗?必须有一种方法可以从非 skcene 场景加载 SKScene。

【问题讨论】:

    标签: objective-c xcode sprite-kit


    【解决方案1】:

    顾名思义,-presentViewController:animated:completion: 只接受 UIViewController。最简单的做法是创建一个新的 UIViewController 子类来处理 SKScene 的创建并呈现它。


    根据您的 cmets/edits,问题出在这一行。

    if(!skView.scene) { ...
    

    默认情况下,UIViewController 上的 view 属性只是一个 UIView。由于 UIView 没有 scene 属性,这就是错误的原因。你需要做的是让它成为一个 SKView 。由于您没有笔尖,最简单的方法是在 SKSceneLoader 中覆盖 -loadView 以将 view 设置为 SKView。

    - (void)loadView
    {
        self.view = [[SKView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    }
    

    【讨论】:

    • 抱歉听起来像个菜鸟(我是),我从来没有完全理解过子类化,但据我所知,我用 UIVIewController 创建了一个新文件,因为它是类。然后我添加 SKScene 加载方法(在 viewWillLayoutSubviews 下)并使用它来加载 SKScene?如果我是正确的,我试过了,但得到了同样的错误。
    • 你能发布你的代码来创建和显示场景吗?我会更容易从中找出解决方案。
    • 我用整个代码更新了原始问题。感谢您的帮助!
    • SKSceneLoader 是 UIViewController 的子类吗?有笔尖吗?
    • 是的,UIViewController,没有笔尖。
    猜你喜欢
    • 2014-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-20
    • 1970-01-01
    相关资源
    最近更新 更多