iOS에서 각 회전 감지 방법과 그 결과
검증시 환경
개발 환경: Xcode9beta
iOS 버전: 11beta
언어: Swift4
단말의 종횡 상태 취득
단말의 종횡 상태는 이하의 2 종류로 취득했습니다.
UIInterfaceOrientation
let isPortrait = UIInterfaceOrientationIsPortrait(UIApplication.shared.statusBarOrientation))
let isLandscape = UIInterfaceOrientationIsLandscape(UIApplication.shared.statusBarOrientation))
UIDeviceOrientation
let isPortrait = UIDeviceOrientationIsPortrait(UIDevice.current.orientation))
let isLandscape = UIDeviceOrientationIsLandscape(UIDevice.current.orientation))
회전 감지 방법
viewDidLoad
앱 시작 직후를 상정한 결과입니다.
- UIInterfaceOrientation과의 조합만 감지는 정확
NSNotification
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(MainViewController.onOrientationDidChange(notification:)), name: NSNotification.Name.UIDeviceOrientationDidChange, object: nil)
}
@objc
func onOrientationDidChange(notification: NSNotification) {
// ここに回転時の処理
}
- 감지는 정확
- 앱 시작 직후 처리
- 백그라운드 마이그레이션 후 두 번 처리됨
- ViewController가 겹친 상태에서도 감지됨
viewWillLayoutSubviews
- 감지는 정확
- ViewController가 겹친 상태에서는 감지되지 않음
viewDidLayoutSubviews
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
// ここに回転時の処理
}
- 감지는 정확
- ViewController가 겹친 상태에서는 감지되지 않음
viewWillTransition
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
super.viewWillTransition(to: size, with: coordinator)
// ここに回転時の処理
}
- UIDeviceOrientation과의 조합만 감지는 정확
- 회전 시에만 처리됨
- ViewController가 겹친 상태에서 감지됨
약속
단말의 종횡 상태는 이하의 2 종류로 취득했습니다.
UIInterfaceOrientation
let isPortrait = UIInterfaceOrientationIsPortrait(UIApplication.shared.statusBarOrientation))
let isLandscape = UIInterfaceOrientationIsLandscape(UIApplication.shared.statusBarOrientation))
UIDeviceOrientation
let isPortrait = UIDeviceOrientationIsPortrait(UIDevice.current.orientation))
let isLandscape = UIDeviceOrientationIsLandscape(UIDevice.current.orientation))
회전 감지 방법
viewDidLoad
앱 시작 직후를 상정한 결과입니다.
- UIInterfaceOrientation과의 조합만 감지는 정확
NSNotification
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(MainViewController.onOrientationDidChange(notification:)), name: NSNotification.Name.UIDeviceOrientationDidChange, object: nil)
}
@objc
func onOrientationDidChange(notification: NSNotification) {
// ここに回転時の処理
}
- 감지는 정확
- 앱 시작 직후 처리
- 백그라운드 마이그레이션 후 두 번 처리됨
- ViewController가 겹친 상태에서도 감지됨
viewWillLayoutSubviews
- 감지는 정확
- ViewController가 겹친 상태에서는 감지되지 않음
viewDidLayoutSubviews
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
// ここに回転時の処理
}
- 감지는 정확
- ViewController가 겹친 상태에서는 감지되지 않음
viewWillTransition
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
super.viewWillTransition(to: size, with: coordinator)
// ここに回転時の処理
}
- UIDeviceOrientation과의 조합만 감지는 정확
- 회전 시에만 처리됨
- ViewController가 겹친 상태에서 감지됨
약속
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(MainViewController.onOrientationDidChange(notification:)), name: NSNotification.Name.UIDeviceOrientationDidChange, object: nil)
}
@objc
func onOrientationDidChange(notification: NSNotification) {
// ここに回転時の処理
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
// ここに回転時の処理
}
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
super.viewWillTransition(to: size, with: coordinator)
// ここに回転時の処理
}
Reference
이 문제에 관하여(iOS에서 각 회전 감지 방법과 그 결과), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/www51k/items/7be9abff8f6efea5748e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)