web-dev-qa-db-fra.com

Swift - Autoriser la rotation sur iPad uniquement

Comment autoriser mon application universelle écrite dans Swift sur iOS 8.3 SDK à prendre en charge uniquement le mode portrait sur iPhone, mais les modes portrait et paysage sur iPad?

Je sais que dans le passé, cela a été fait dans AppDelegate. Comment pourrais-je faire cela à Swift?

25
felix_xiao

Vous pouvez le faire par programme, ou mieux encore, vous pouvez simplement éditer Info.plist de votre projet (ce qui devrait être plus pratique, puisqu'il s'agit d'une configuration globale de périphérique).

Ajoutez simplement la touche "Orientations d'interface prises en charge (iPad)"

enter image description here

73
chrisamanse

Vous pouvez le faire par programme

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

et alors

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

ou toute autre orientation de rotation que vous souhaitez avoir par défaut.

Cela devrait détecter si votre appareil est un iPad et ne permettre la rotation que sur cet appareil.

EDIT: Depuis que vous voulez seulement portrait sur iPhone, 

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

Je sais que dans le passé, cela a été fait dans AppDelegate. Comment pourrais-je faire cela à Swift?

Le langage que vous utilisez ne change pas l'architecture de l'application. Vous faites cela dans Swift de la même manière que dans Objective-C, c’est-à-dire en implémentant:

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

dans votre application délégué.

2
Caleb

Je ne sais pas si la réponse de Chris fonctionne simplement en copiant/collant la touche "Orientations d'interface prises en charge (iPad)"; probablement pas à en juger par la source XML de info.plist. pour obtenir différents supports d’orientation. vous pouvez ouvrir la source XML info.plist et la modifier comme suit:

<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> 

Et il y a une approche facile de l'interface utilisateur xcode. Accédez aux paramètres de votre projet. sélectionnez votre cible dans l'onglet "Général", puis dans la section "Informations de déploiement", vous pouvez d'abord sélectionner iphone/ipad, marquer les orientations de périphérique que vous souhaitez prendre en charge séparément pour chaque périphérique, puis les changer en "Universel". il générera le code xml ci-dessus sous le capot .  enter image description here

l'option "Universel" indique ici les sélections courantes entre iPhone et iPad.

2
alizx

Si vous souhaitez définir ceci pour un ViewController spécifique (autoriser tout sur iPad mais uniquement portrait sur iPhone) dans Swift 4:

override var supportedInterfaceOrientations:UIInterfaceOrientationMask {
    return UIDevice.current.userInterfaceIdiom == .pad ? UIInterfaceOrientationMask.all : UIInterfaceOrientationMask.portrait
}
0
Dion