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

Why is SKScene's view property not being set when presenting a scene?

我最近更新到 Xcode、Swift 和 SDK 的最新“稳定”版本。更新后,GameScene.view?总是returnsnil。 SKScene 的视图 属性 似乎没有在呈现给定场景时设置。这使我无法向我的游戏添加任何手势识别器(至少使用呈现视图)。

知道我是否忽略了什么或者这可能是一个错误吗?我过去使用与下面代码中显示的基本相同的实现向 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) {}