iPod touch의 Landscape 모드를 조심하자 (Titanium)

9421 단어 Titanium
Titanium에서는 tiapp.xml에서 Portrait 모드와 Landscape 모드에서 어떤 방향을 사용할지 설정합니다.

프로젝트 신규 작성시에는 다음과 같이 초기 설정되어 있습니다.

tiapp.xml
                ...
                <key>UISupportedInterfaceOrientations~iphone</key>
                <array>
                    <string>UIInterfaceOrientationPortrait</string>
                </array>
                <key>UISupportedInterfaceOrientations~ipad</key>
                <array>
                    <string>UIInterfaceOrientationPortrait</string>
                    <string>UIInterfaceOrientationPortraitUpsideDown</string>
                    <string>UIInterfaceOrientationLandscapeLeft</string>
                    <string>UIInterfaceOrientationLandscapeRight</string>
                </array>
                ...

iPhone에서 Landscape에도 대응하려고 다음과 같이 설정했을 경우, 하나 함정이 있습니다.

tiapp.xml
                ...
                <key>UISupportedInterfaceOrientations~iphone</key>
                <array>
                    <string>UIInterfaceOrientationPortrait</string>
                    <string>UIInterfaceOrientationLandscapeLeft</string>
                    <string>UIInterfaceOrientationLandscapeRight</string>
                </array>
                <key>UISupportedInterfaceOrientations~ipad</key>
                <array>
                    <string>UIInterfaceOrientationPortrait</string>
                    <string>UIInterfaceOrientationPortraitUpsideDown</string>
                    <string>UIInterfaceOrientationLandscapeLeft</string>
                    <string>UIInterfaceOrientationLandscapeRight</string>
                </array>
                ...

보충: Apple에서 만든 사진 앱이나 캘린더 앱과 마찬가지로 iPhone에서는 UIInterfaceOrientationPortraitUpsideDown을 뽑았습니다. 전화를 하는 데 지장을 주지 않기 때문입니다.

실은 위와 같이 설정해도 iPod touch에서는 회전으로 방향이 바뀌지 않고, 「UIInterfaceOrientationPortrait」의 방향 밖에 대응하지 않습니다. (iPod touch 5th, iOS 9.1, Titanium SDK 5.1.1.GA에서 확인)

iPod touch에서도 iPhone과 같이 회전에 대응시키기 위해서는 다음과 같이 기술해야 합니다.

tiapp.xml
                ...
                <key>UISupportedInterfaceOrientations~iphone</key>
                <array>
                    <string>UIInterfaceOrientationPortrait</string>
                    <string>UIInterfaceOrientationLandscapeLeft</string>
                    <string>UIInterfaceOrientationLandscapeRight</string>
                </array>
                <key>UISupportedInterfaceOrientations~ipod</key>
                <array>
                    <string>UIInterfaceOrientationPortrait</string>
                    <string>UIInterfaceOrientationLandscapeLeft</string>
                    <string>UIInterfaceOrientationLandscapeRight</string>
                </array>
                <key>UISupportedInterfaceOrientations~ipad</key>
                <array>
                    <string>UIInterfaceOrientationPortrait</string>
                    <string>UIInterfaceOrientationPortraitUpsideDown</string>
                    <string>UIInterfaceOrientationLandscapeLeft</string>
                    <string>UIInterfaceOrientationLandscapeRight</string>
                </array>
                ...

또한 아이폰과 아이팟을 함께 사용하여 다음과 같이 작성할 수 있습니다. 이쪽이 간단하고 실수가 없기 때문에 추천입니다.

tiapp.xml
                ...
                <key>UISupportedInterfaceOrientations</key>
                <array>
                    <string>UIInterfaceOrientationPortrait</string>
                    <string>UIInterfaceOrientationLandscapeLeft</string>
                    <string>UIInterfaceOrientationLandscapeRight</string>
                </array>
                <key>UISupportedInterfaceOrientations~ipad</key>
                <array>
                    <string>UIInterfaceOrientationPortrait</string>
                    <string>UIInterfaceOrientationPortraitUpsideDown</string>
                    <string>UIInterfaceOrientationLandscapeLeft</string>
                    <string>UIInterfaceOrientationLandscapeRight</string>
                </array>
                ...

이제 겨우 iPod touch에서도 회전에 대응할 수 있습니다.
Default Alloy Project를 이렇게 재작성하고 iPod touch에서 확인하면 다음과 같이 무사히 회전하게 됩니다.



보통 iPhone은 Portrait 모드만으로 하는 경우가 많기 때문에 거의 문제가 되지 않습니다만, Landscape 모드를 사용하는 경우에, iPod touch만 가로 방향이 되지 않는다고 하는 불편에 연결될 수 있으므로 주의해 주세요. 나중에 Landscape 모드를 도입했을 때 신경 쓰지 않게하기 위해서, 프로젝트 작성 직후에 다음과 같이 '~iphone' 부분을 삭제하고 있습니다.

tiapp.xml
                ...
                <key>UISupportedInterfaceOrientations</key>
                <array>
                    <string>UIInterfaceOrientationPortrait</string>
                </array>
                <key>UISupportedInterfaceOrientations~ipad</key>
                <array>
                    <string>UIInterfaceOrientationPortrait</string>
                    <string>UIInterfaceOrientationPortraitUpsideDown</string>
                    <string>UIInterfaceOrientationLandscapeLeft</string>
                    <string>UIInterfaceOrientationLandscapeRight</string>
                </array>
                ...

Apple의 자세한 사양은 다음 문서를 참조하십시오.
iOS Developer Library - About Information Property List Files

또한 Landscape 모드에 대응한 앱에서는 iPhone 외에도 iPod touch도 실제 기기에서 테스트하는 것이 바람직합니다. iOS 사양의 이야기이므로 Titanium 이외에서 만든 앱에서도 테스트하는 것을 추천합니다.

이 게시물은 Appcelerator Titanium Advent Calendar 2015의 7 일째 기사였습니다. 여담입니다만, 최근에는 Titanium의 WebView에서 iOS, Android 모두 LocalStorage를 사용할 수 있게 된 것 같습니다(Titanium SDK 5.1.1.GA). 이 대응 방법을 예정하고 있었습니다만, 급히 바꿨습니다(^^;)

좋은 웹페이지 즐겨찾기