フルスクリーン時に解像度をそのままで画面全体に広げたい（SpriteKit × Swift4）


私が書いたコードですと、フルスクリーンになった際に左下だけが写ってしまうなど、使用するディスプレイによっておかしな表示になってしまいます。  
例えば 800px * 600pxのViewとウィンドウを用意している状態でフルスクリーンになった際にも800px *
600pxのままで表示されるような方法はないでしょうか。画質が荒くなるなどの問題が生じるかもしれませんが、現状は気にしません。

[![現在のViewのプロパティです](https://i.stack.imgur.com/0IEbO.png)](https://i.stack.imgur.com/0IEbO.png)




`UIImageView`がviewのサイズとは異なる`UIImage`を色々な方法で表示できるよのと似たような感じで、`SKView`はサイズの異なる`SKScene`を表示することができます。

以下のコード例はXcode
10.3でiOS用のGame/SpriteKitのテンプレートプロジェクトを修正したものです。(申し訳ありませんが、古いXcodeは置いていないんで、Swift4ではなく、Swift5です。)

なお、極端な値を指定した方が違いがわかりやすいので、800 x 600ではなく、80 x 60にしてあります。

GameViewController.swift:

[code]

    import UIKit
    import SpriteKit
    
    class GameViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            if let view = self.view as! SKView? {
                //viewの大きさは無視して、固定サイズの`GameScene`(`SKScene`)を作る
                let scene = GameScene(size: CGSize(width: 80, height: 60))
    
                scene.scaleMode = .fill //<- `scene`を縦横比無視してview全体に拡大/縮小
    
                view.presentScene(scene)
    
                view.ignoresSiblingOrder = true
    
                view.showsFPS = true
                view.showsNodeCount = true
            }
        }
    
        override var shouldAutorotate: Bool {
            return true
        }
    
        override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
            if UIDevice.current.userInterfaceIdiom == .phone {
                return .allButUpsideDown
            } else {
                return .all
            }
        }
    
        override var prefersStatusBarHidden: Bool {
            return true
        }
    }
    
[/code]

GameScene.swift:

[code]

    import SpriteKit
    
    class GameScene: SKScene {
    
        private var label : SKLabelNode?
    
        override func didMove(to view: SKView) {
    
            self.label = SKLabelNode(text: "Hello")
            if let label = self.label {
                label.fontColor = .red
                label.verticalAlignmentMode = .center
                label.position = CGPoint(x: 40, y: 30)
                label.alpha = 0.0
                label.run(SKAction.fadeIn(withDuration: 2.0))
                addChild(label)
            }
        }
    
        override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
            if let label = self.label {
                label.run(SKAction(named: "Pulse")!, withKey: "fadeInOut")
            }
        }
    }
    
[/code]

Xcodeのテンプレは`SKView`がフルサイズで表示されるようになっているので、色々な解像度のsimulatorで走らせた上、`SKLabelNode`を置く位置などを変更して動作を確かめてみてください。

* * *

ただ、あなたの問題はむしろ`SKView`のレイアウトの問題のようにも思えます。「私が書いたコード」と言いながら、コードは1行も示していただいていませんから、何か見当違いのことをご説明したかもしれません。

この回答が問題解決のお役に立たないようでしたら、ご質問を編集して、「現在のコードとstoryboard/xibの設定」「期待される表示」「現在の表示」などを、今より詳しく説明してみてください。

