无法将3D子视图添加到控制器的视图中

时间:2014-07-25 09:33:08

标签: view swift scenekit

当我想在控制器视图中添加3D子视图时,我遇到了问题。我看不到3D子视图。是GameControllerView类的代码:

override func viewDidLoad() {
    super.viewDidLoad()

    println("Start the game")

    // Model
    cubeData = CubeData()
    /*
    let viewTest = UIView(frame: self.view.frame)
    self.view = viewTest
    */

    // 3D view position
    let sizeScnView = CGSize(width: 350.0, height: 350.0)
    let centerView = CGPoint(x: CGRectGetMidX(self.view.frame) - sizeScnView.width/2, y: CGRectGetMidY(self.view.frame) - sizeScnView.height/2)
    scnView = GameSceneView(frame: CGRect(origin: centerView, size: sizeScnView))

    // add 3D view
    self.view.addSubview(scnView)

    // don't allows the user to manipulate the camera
    scnView.allowsCameraControl = true

    // show statistics such as fps and timing information
    scnView.showsStatistics = false

    // Start Accelerometer
    self.motionManager = CMMotionManager()
    self.startAccelerometer()

    timer = NSTimer.scheduledTimerWithTimeInterval(0.4, target: self, selector: Selector("updateTimer"), userInfo: nil, repeats: true)
}

使用此代码,我无法看到我的GameSceneView,它是SCNView(3D视图)的子类。但是,如果我删除viewTest变量的注释(就在cubeData下面),我的GameSceneView会被显示,但是没有我的控制器视图的内容。

问题:为什么3D子视图无法出现在控制器视图中?

编辑:我刚注意到3D视图位于控制器视图背景之后。如何在视图控制器中包含的背景上添加我的3D视图?

1 个答案:

答案 0 :(得分:0)

如果您的超级视图是GPU渲染的(即SceneKit或SpriteKit视图),则可能存在使用GPU渲染的子视图的问题。一种解决方案可能是将当前您的视图控制器的view放入子视图中,以便scnView是其中的兄弟视图,并使用insertSubview:aboveSubview或相关方法对它们进行分层。