2015-05-29 16 views
20

Jak mogę zezwolić na używanie mojej uniwersalnej aplikacji napisanej w Swift na iOS 8.3 SDK, aby obsługiwać tylko tryb portretowy na iPhonie, ale zarówno w trybie pionowym, jak i poziomym na iPadzie?Swift - Zezwalaj na rotację tylko na iPadzie

Wiem, że w przeszłości zostało to zrobione w AppDelegate. Jak mogłem to zrobić w Swift?

Odpowiedz

53

Można to zrobić programowo, albo jeszcze lepiej, po prostu można edytować Info.plist swojego projektu (które powinny być bardziej praktyczne, ponieważ jest to konfiguracja urządzenia globalne)

Wystarczy dodać „Obsługiwane kierunki Interface (iPad) "klucz

enter image description here

+0

To jest dobre. Programowo nie pomaga ominąć sklepu-gate-keeper-keeper. – mxcl

+0

Myślę, że możesz zrobić lepiej, Chris – Harout360

6

Można to zrobić programowo

override func shouldAutoRotate() -> Bool { 
    if UIDevice.currentDevice().userInterfaceIdiom == .Pad { 
     return true 
    } 
    else { 
     return false 
    } 
} 

a następnie

override func supportedInterfaceOrientations() -> Int { 
    return UIInterfaceOrientation.Portrait.rawValue 
} 

lub jakąkolwiek inną orientację rotacji, który chcesz mieć domyślnie.

To powinno wykryć, czy urządzenie, z którego korzystasz, to iPad i zezwalać na obracanie tylko tego urządzenia.

EDIT: Ponieważ ty tylko chcesz portret na iPhone,

override func supportedInterfaceOrientations() -> Int { 
    if UIDevice.currentDevice().userInterfaceIdiom == .Phone { 
     return UIInterfaceOrientation.Portrait.rawValue 
    } 
    else { 
     return Int(UIInterfaceOrientationMask.All.rawValue) 
    } 
} 
+0

także więcej informacji na temat obrotów można znaleźć tutaj http://stackoverflow.com/questions/25651969/setting-device-orientation-in-swift-ios – Kilenaitor

+0

Opcja' supportedInterfaceOrientations' ISN całkiem słusznie. Chce "Portretu" tylko na iPhonie, ale chce * dowolnej * orientacji na iPadzie. – nhgrif

+0

Jest to specyficzne tylko dla kontrolera widoku. Możesz zastąpić podobną metodę z UIApplicationDelegate, taką jak odpowiedź @Caleb. Lub edytuj Info.plist. – chrisamanse

2

wiem w przeszłości zostało to zrobione w AppDelegate. Jak mogłem to zrobić w Swift?

Język, którego używasz, nie zmienia architektury aplikacji. Można to zrobić w Swift w ten sam sposób to zrobić w Objective-C, to znaczy poprzez wdrożenie:

optional func application(_ application: UIApplication, 
     supportedInterfaceOrientationsForWindow window: UIWindow?) -> Int 

w delegata aplikacji.

Powiązane problemy