概要
過去に iPad 対応しました
今度発売される iPhoneX も対応しなければいけなかったのでその対応方法を紹介します
環境
- macOS X 10.12.6
- Xcode 9.0.1 (9A1004)
対応コード
Xcode で Game プロジェクト作成した場合を例に紹介します
デフォルトだと UIViewController を継承した GameViewController があります
そこの viewDidLoad を以下のように変更します
override func viewDidLoad() {
super.viewDidLoad()
if let view = self.view as! SKView? {
// Load the SKScene from 'GameScene.sks'
if let scene = SKScene(fileNamed: "GameScene") {
// Set the scale mode to scale to fit the window
if (UIDevice.current.model.range(of: "iPad") != nil) {
// iPad の場合
print("iPad")
scene.scaleMode = .fill
} else {
if (UIScreen.main.nativeBounds.height == 2436.0) {
// iPhoneX の場合
print("iPhoneX")
scene.scaleMode = .aspectFit
} else {
// iPhone の場合
print("iPhone")
scene.scaleMode = .aspectFill
}
}
view.presentScene(scene)
}
view.ignoresSiblingOrder = true
view.showsFPS = true
view.showsNodeCount = true
}
}
ポイントは UIDevice.current.model.range
と UIScreen.main.nativeBounds.height
を使う点です
まず UIDevice.current.model.range
を使って iPad かどうかを判断します
というのも iPhoneX の場合「iPhone」として認識されるのでまずは iPad かどうか判断する必要があります
次に UIScreen.main.nativeBounds.height
で iPhoneX かそうでないかを判断します
高さが 2436.0 が iPhoneX なのでその高さの場合に aspectFit
を設定することで画面からはみ出ることなく表示されます
そして最後に iPhoneX 以外のデバイスの場合に aspectFill
とします
最後に
SpriteKit で iPhoneX に対応する方法を紹介しました
デバイスのタイプでは判断できないのでサイズを取得して判断する必要があります
UIKit の場合 constraints を使っていれば特に何もしなくても iPhoneX に対応できると思います
SpriteKit には constraints がないのでこのような対応をしなければなりません
執筆時点で iTunesConnect にはすでに iPhoneX 対応版のバイナリをアップロードできるので対応したらすぐにアップロードすると良いと思います
スクリーンショットや AppPreviews も iPhoneX 版をアップロードできます
0 件のコメント:
コメントを投稿