2016-09-06 1 views
0

Je détecte l'orientation de l'appareil avec ces lignes de code:orientation de l'appareil détection en fonction Init

UIDevice.currentDevice().orientation.isPortrait.boolValue 
UIDevice.currentDevice().orientation.isLandscape.boolValue 

Et je DETECT vérifier si c'est un iPad avec ce code:

userInterfaceIdiom == .Pad 

J'ai utilisé cette code dans la fonction commonInit() appelée dans la fonction Init(). Lorsque j'exécute mon code sur l'iPad, les deux premières lignes renvoient à la fois false ce qui est incorrect, l'une d'entre elles doit être true. La troisième ligne fonctionne bien.

Si j'utilise le code dans d'autres fonctions, telles que supportedInterfaceOrientations(), cela fonctionne correctement. Savez-vous quel pourrait être le problème?

+2

'init()' ... 'init()' ..., dont on parle de la méthode 'init()'? – holex

+0

La méthode init() de la classe où j'essaie d'utiliser les lignes de code. Je veux inventer la classe avec des valeurs dépendant de l'orientation de l'iPad – user567

+0

@holex demandait le * type * de la classe ... est-ce un UIViewController? L'application a-t-elle été entièrement initialisée et a indiqué à AppDelegate qu'elle est prête avant la construction de cette classe? – BaseZen

Répondre

1

Vous négligez probablement cette documentation:

Vous pouvez également utiliser l'instance UIDevice pour détecter les changements caractéristiques de l'appareil, telles que l'orientation physique. Vous obtenez l'orientation actuelle en utilisant la propriété d'orientation ou recevez des notifications de modification en vous inscrivant à la notification UIDeviceOrientationDidChangeNotification . Avant d'utiliser l'une ou l'autre de ces techniques pour obtenir des données d'orientation, vous devez activer la transmission de données à l'aide de la méthode beginGeneratingDeviceOrientationNotifications . Lorsque vous n'avez plus besoin de suivre l'orientation de l'appareil, appelez la méthode endGeneratingDeviceOrientationNotifications pour désactiver la remise des notifications .

En outre, c'est une orientation 3-D. Tu ne veux probablement pas ça. Quelle est la valeur réelle de simplement la propriété orientation? Voir:

enum UIDeviceOrientation : Int { 
    case Unknown 
    case Portrait 
    case PortraitUpsideDown 
    case LandscapeLeft 
    case LandscapeRight 
    case FaceUp 
    case FaceDown } 

probablement ce que vous voulez vraiment est ici: "interfaceOrientation" is deprecated in iOS 8, How to change this method Objective C

Parfois TraitCollections ne remplit pas tous vos besoins de conception. Pour ces cas, Apple recommande de comparer les limites de vue:

si view.bounds.size.width> view.bounds.size.height {...} //