아이폰6 Plus와 처음 시작할 때의 화면 방향

6230 단어 iOS
화면 방향에 대한 설정이 계속 잘못된 부분이 있어서 공유합니다.

UISupportedInterfaceOrientations


대상 Device orientation 설정(plist의 U I Su p o rtedInterface Orientations)은 응용 프로그램이 지원하는 화면 방향을 설정하기 위한 것이지만 올바른 정의는 다음과 같습니다.
  • 응용프로그램 시작 시 화면 방향의 초기 값을 결정합니다.
  • AppDelegate에서 응용 프로그램을 실행하지 않은 경우: s u p o r t e d I n t er faceOrientations ForWindow: 전체 응용 프로그램이 지원하는 화면 방향을 결정하는 데도 사용됨
  • 네.

    예제


    나는 다음과 같은 요구 사항을 가진 프로그램을 만들고 싶다.
  • 앱이 시작된 후 바로 표시되는 화면은portrait
  • 에만 대응한다
  • 이외의 화면은portrait/landscape 쌍방에 대응
  • 잘못된 실현


    따라서 우선 대상 > General > Deployment Info > Device Orientation 을 설정합니다.응용 프로그램 전체로서portrait/landscape 쌍방이 대응하기 때문에 먼저 다음과 같이 설정해 봅시다.

    스토리보드는 다음과 같은 느낌을 준다.

    첫 번째 화면은 포트레이트 전용이고 ViewController는 다음과 같이 설치됩니다.
    FirstViewController.swift
    class FirstViewController: UIViewController {
    
        override func shouldAutorotate() -> Bool {
            return false
        }
    
        override func supportedInterfaceOrientations() -> Int {
            return Int(UIInterfaceOrientationMask.Portrait.toRaw())
        }
    }
    
    그럼 아이폰6 플러스가 화면을 가로로 켠 상태에서 시동을 걸어보자.

    시작!

    랜드스케이트로 시작했어요.
    참고로 이 상태에서persientViewController는 적당한 모드뷰를 만들고 바로dismissViewController를 그리면 예상한portrait에 따라 표시됩니다.징그럽다.

    정확한 실현


    처음에 설명한 대로 U I S u p o rtedInterfaceOrientations는 시작 시 화면 방향의 초기 값을 적용하는 설정입니다.FirstView는 포트레이트에만 대응하기 때문에 이렇게 설정하는 것이 정확합니다.

    단, 이것만 설정하면 전체 응용 프로그램에서 portrait만 지원되므로 AppDelegate에 응용 프로그램을 설치하십시오:s p or t e I n t e I n t e I n t e r faceOrientations ForWindow, 전체 응용 프로그램의 지원 방향으로 설정하십시오.
    AppDelegate.swift
    class AppDelegate: UIResponder, UIApplicationDelegate {
    
        //....
    
        func application(application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow) -> Int {
            return Int(UIInterfaceOrientationMask.AllButUpsideDown.toRaw())
        }
    
    이렇게 아까처럼 아이폰6 플러스가 화면을 가로로 켠 상태에서 시동을 건다

    똑바로 세로로 시동을 걸었다.장치를 가로로 눕혀도

    수직을 유지하다.
    그나저나 FirstView를 제외한 모든 것은 예상대로

    가로 방향

    둘 다 지지합니다.

    총결산


    응용 프로그램이 시작된 후 표시되는 화면은portrait만 지원하고 다른 화면은portrait/landscape를 지원하는데 이런 아이폰 응용 프로그램이 매우 많다.아이폰6 플러스 등장 전 아이폰, 원래 메인 화면은 랜드스케이프를 지원하지 않는다

    이렇게 설정해도 앱이 시작될 때 이 설정은 무시되고 포트레이트에서 바로 시작하기 때문에 문제없습니다.그러나 아이폰6플러스의 메인 화면은 랜드스케이트에 대응하기 때문에 앱이 시작될 때 이 설정을 잘 활용할 수 있으니 주의하세요.

    참고 자료


    애플 Developer Form에서의 토론
    https://devforums.apple.com/message/1051638#1051638
    plist의 U I S u p rtedInterfaceOrientations 키 정의
    https://developer.apple.com/library/IOs/documentation/General/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html#//apple_ref/doc/uid/TP40009252-SW10

    좋은 웹페이지 즐겨찾기