是否可以将SKScene与UIView控制器一起使用?

时间:2017-03-13 17:36:04

标签: ios swift uiview sprite-kit core-motion

我在视图中使用CoreMotion来获取手机中的加速度和旋转值。我的应用程序有多个视图使用视图控制器,因为我处理数据传输,所以我使用UIViewController设置我的加速度计/陀螺仪视图。但是我想根据加速度计和陀螺仪的值显示一个在屏幕上移动的球的图像。我一直在寻找教程,这似乎只是在游戏中完成。有没有办法让我在不使用SKScene的情况下展示使用CoreMotion移动的球?

2 个答案:

答案 0 :(得分:5)

  

是否可以将SKScene与UIView控制器一起使用?

是的。你可能已经没有意识到这一点。

SpriteKit和Cocoa Touch的视图架构之间的桥梁是SKView。很多基于SpriteKit的应用程序只有一个视图控制器,其视图为SKView,然后他们通过在SpriteKit中完成所有绘图并只更改精灵场景来处理游戏的不同阶段。但是你不必那样工作 - 你可以将SKView与其他视图和控件混合,你可以使用任意数量的视图控制器。

以下是另一个视图中SKView的镜头,由嵌入在导航控制器中的视图控制器管理:

Hello, world!

紫色区域是普通的UIView - 只有黑色区域是SpriteKit视图。

  

有没有办法让我可以在不使用SKScene的情况下展示使用CoreMotion移动的球?

是的。如果您只想在屏幕上移动球,那么UIKit animation built into UIView几乎肯定是绰绰有余。

答案 1 :(得分:1)

你有2个选择。尝试使用UIView的内置动画控件,如下例所示:

UIView.animate(withDuration: 1) { 

    //Insert Animations Here
}

或者,您始终可以在View Controller的主视图中创建视图,并使该视图成为SKView并随之显示SKScene。

如下所示:

sceneView = SKView(frame: CGRect(x: 0, y: 0, width: 666, height: 500))
sceneView.backgroundColor = UIColor.black
self.view.addSubview(sceneView)

if let view = self.sceneView as SKView? {
    // Load the SKScene from 'GameScene.sks'
    if let scene = SKScene(fileNamed: "GameScene") {
        // Set the scale mode to scale to fit the window
        scene.scaleMode = .aspectFill

        // Present the scene
        view.presentScene(scene)
    }

    view.ignoresSiblingOrder = true


}

用首选值替换宽度和高度。