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

Posted

技术标签:

【中文标题】无法将 3D 子视图添加到控制器的视图中【英文标题】:Can't add a 3D subview to the view of the controller 【发布时间】:2014-07-25 09:33:07 【问题描述】:

当我想将 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 变量的 cmets(就在 cubeData 下方),我的 GameSceneView 会显示但没有我的控制器视图的内容。

问题:为什么 3D 子视图不能出现在控制器视图上?

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于无法将 3D 子视图添加到控制器的视图中的主要内容,如果未能解决你的问题,请参考以下文章

将子视图添加到视图控制器

将变量发送到添加的子视图视图控制器

iOS - 将子视图添加到子视图控制器视图

如何将子 ViewController 的视图添加到父 View 控制器的子视图中?

我应该将底部工作表作为子视图添加到当前视图控制器还是推送添加了子视图的 UIWindow?

无法更新我的视图的子视图