我正在尝试为包含多个游戏的项目创建侧滚动菜单。我想让用户水平滚动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的方法。
答案 0 :(得分:1)
正如方法名称所示,-presentViewController:animated:completion:
只接受UIViewController
。最简单的方法是创建一个新的UIViewController
子类来处理SKScene
的创建并呈现它。
根据您的评论/编辑,问题在于此行。
if(!skView.scene) { ...
UIViewController上的view
属性默认只是一个UIView。由于UIView没有scene
属性,这就是错误的原因。您需要做的是让它成为SKView。由于您没有笔尖,最简单的方法是覆盖SKSceneLoader中的-loadView
以将view
设置为SKView。
- (void)loadView
{
self.view = [[SKView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
}