首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Swift无法将“UIView”类型的值转换为“SKView”

Swift无法将“UIView”类型的值转换为“SKView”
EN

Stack Overflow用户
提问于 2018-01-19 19:14:21
回答 1查看 2.2K关注 0票数 2

首先,我回顾了相关的问题:

所有这些都没有给我一个明确的答案,我无法从我的主ViewController中提供一个包含ViewController的控制器,例如:

代码语言:javascript
复制
import UIKit
import SceneKit
import SpriteKit

class ViewController: UIViewController {
  var sceneView: SCNView!
  var gameScene = GameScene()
  var spriteScene: OverlayScene!

  override func viewDidLoad() {
    super.viewDidLoad()

    sceneView = SCNView(frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height))
    sceneView.scene = gameScene
  }

  func showModal() {
    let popupViewController = PopupViewController()
    popupViewController.modalPresentationStyle = .popover
    present(popupViewController, animated: true, completion: nil)
  }  
}

但问题似乎是当PopupViewController被调用时:

代码语言:javascript
复制
import UIKit
import SpriteKit

class PopupViewController:UIViewController {
  var sceneView:SKView!
  var spriteScene:PopupScene!

  override func viewDidLoad() {
    view.backgroundColor = UIColor.green
    view.scene = spriteScene

    super.viewDidLoad()
  }
}

引起的错误如下:

代码语言:javascript
复制
Could not cast value of type 'UIView' (0x1b48c69c8) to 'SKView' (0x1b3b254b0).
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-19 19:37:46

查看您的答案,您似乎使用了您的PopupViewController的主sceneView来添加场景,而不是您声明的新sceneView。解决这个问题的第一种方法是,正如Nathan在评论中所说的那样,重写loadView并设置self.view = sceneView。另一个选项是打开故事板或.xib,并将主视图的类类型设置为SKView,然后可以完全删除sceneView变量并使用self.view。这两种方法本质上都是一样的,但有两种不同的方式。确保您在使用sceneView之前也给它一个值,因为目前它似乎没有初始化。如果你需要我澄清什么,请告诉我。

第一种选择如下所示:

代码语言:javascript
复制
override func loadView() {
    sceneView = SKView()
    sceneView.backgroundColor = .white

    self.view = sceneView
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48348041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档