일부 ViewController의 터미널 회전 방법

2574 단어 SwiftUIViewiOS

주의점


UnivegationController에 걸려 있는 ViewController는 shouldAutorotate()라고 부르지 않습니다.
UINaviation Controller에 View Controller가 걸려 있는 경우 UINaviation Controller의 should Autorotate로 불리기 때문에 View Controller 단위로 제어할 수 없습니다.
걸림돌이 없으면 ViewController라고 합니다.

방법 소개의 전제


Project의 회전 설정은 다음과 같습니다.

포트레이트, 랜스캐프 레프트, 랜스캐프 라이트에서 검사를 진행했다.

UnivegationController에 ViewController가 걸려 있지 않은 경우


회전하려는 ViewController


회전하는 논리 포함
// ## hogehogeViewController.swift

override func shouldAutorotate() -> Bool {
    return true
}

override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
    let orientation: UIInterfaceOrientationMask = [UIInterfaceOrientationMask.Portrait, UIInterfaceOrientationMask.LandscapeRight, UIInterfaceOrientationMask.LandscapeLeft]
    return orientation
}

회전하지 않으려는 ViewController


회전을 허용하지 않는 설정만 삽입하면 됩니다.
// ## fugafugaViewController.swift

override func shouldAutorotate() -> Bool {
    return true
}
이것은 매우 간단하다.

UINaviation Controller에 ViewController가 걸려 있는 경우


이 경우 UINaviation Controller가 확장되어 걸려 있는 UIView Controller의 설정을 얻을 수 있습니다.
// ## UINavigationController+Orientation.swift

public override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {

    if let _ = self.visibleViewController {
        return self.visibleViewController!.supportedInterfaceOrientations()
    }

    // ViewControllerが無い場合は、縦画面のみ許容します
    let orientation: UIInterfaceOrientationMask = [UIInterfaceOrientationMask.Portrait]
    return orientation
}

public override func shouldAutorotate() -> Bool {
    if let _ = self.visibleViewController {
        return self.visibleViewController!.shouldAutorotate()
    }

    // ViewControllerが無い場合は、回転を許容しません。
    return false
}
이렇게 되면 UINaviation Controller는 아이의 View Controller 설정을 가져와서 회전을 허용하고자 하는 View Controller에 아까와 같은 설정을 기술하였다.
// ## hogehogeViewController.swift

override func shouldAutorotate() -> Bool {
    return true
}

override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
    let orientation: UIInterfaceOrientationMask = [UIInterfaceOrientationMask.Portrait, UIInterfaceOrientationMask.LandscapeRight, UIInterfaceOrientationMask.LandscapeLeft]
    return orientation
}

좋은 웹페이지 즐겨찾기