画面回転をロックしよう
通常のプロジェクトであれば
Generalタブ > Deployment info > Device Orientation
でロックできます。
ただアプリプレイグラウンドでないと提出できないようなコンテストなど用にコードで回転をロックするのを書いときます。
ContentView.swift
import SwiftUI
import UIKit
// UIViewControllerを拡張して、特定の向きを設定
extension UIViewController {
func lockOrientation(_ orientation: UIInterfaceOrientationMask) {
if let delegate = UIApplication.shared.delegate as? AppDelegate {
delegate.orientationLock = orientation
}
}
// 任意のビューで特定の向きを設定するためのメソッド
func lockOrientation(_ orientation: UIInterfaceOrientationMask, andRotateTo rotateOrientation: UIInterfaceOrientation) {
self.lockOrientation(orientation)
UIDevice.current.setValue(rotateOrientation.rawValue, forKey: "orientation")
UINavigationController.attemptRotationToDeviceOrientation()
}
}
// AppDelegateでの設定
class AppDelegate: UIResponder, UIApplicationDelegate {
var orientationLock = UIInterfaceOrientationMask.all
func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
return orientationLock
}
}
// SwiftUIビューで使用
struct ContentView: View {
var body: some View {
Text("Hello, World!")
.onAppear {
// ここでポートレートにロックする
UIViewController().lockOrientation(.portrait, andRotateTo: .portrait)
}
.onDisappear {
// 画面が消えるときにロックを解除
UIViewController().lockOrientation(.all)
}
}
}