为什么在呈现场景时没有设置 SKScene 的视图属性?



我最近更新到了最新的"稳定的";Xcode、Swift和SDK的发布。在更新之后,GameScene.view?总是返回nil。SKScene的视图属性似乎没有在呈现给定场景时设置。这让我无法在游戏中添加任何手势识别器(至少使用呈现视图(。

你知道我是在忽略什么,还是这可能是一个bug吗?我过去曾使用下面代码中显示的基本相同的实现将手势识别器添加到SpriteKit游戏中。

class GameViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()

let scene = GameScene(size: CGSize(width: 750, height: 1334))
scene.scaleMode = .aspectFit

// Present the scene
if let view = self.view as! SKView? {
view.ignoresSiblingOrder = true

view.showsFPS = true
view.showsNodeCount = true

view.presentScene(scene)
}
}
class GameScene: SKScene, SKPhysicsContactDelegate {

let ballAnchor: BallAnchor
let ball: Ball

let tap: UITapGestureRecognizer
let doubleTap: UITapGestureRecognizer

override init(size: CGSize) {
self.ballAnchor = BallAnchor()
self.ball = Ball()
self.tap = UITapGestureRecognizer()
self.doubleTap = UITapGestureRecognizer()
super.init(size: size)
}

required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}

override func sceneDidLoad() {
physicsWorld.contactDelegate = self
physicsWorld.gravity = .zero

backgroundColor = Color.background
anchorPoint = CGPoint(x: 0.5, y: 0.5)

ball.configure()
ball.delegate = ballAnchor

ballAnchor.configure()
ballAnchor.anchor(ball)
self.addChild(ballAnchor.sprite)

tap.addTarget(self, action: #selector(GameScene.tap(sender:)))
tap.numberOfTapsRequired = 1
view?.addGestureRecognizer(tap)
}

@objc func tap(sender: UITapGestureRecognizer) {
print("tap")
}

更换

override func sceneDidLoad() {}

带有模板代码

override func didMove(to view: SKView) {}

最新更新