7

Selon le titre. L'appel de [[UIDevice currentDevice] BeginGeneratingDeviceOrientationNotifications] n'a aucun effet.UIDevice currentDevice "orientation" toujours nulle

Les événements etc DidRotateToInterfaceOrientation fonctionnent correctement, mais je dois pouvoir interroger arbitrairement l'orientation du périphérique.

Comment réparer/faire cela? L'histoire longue: J'ai une application d'onglet avec un contrôleur de navigation sur chaque onglet. La vue racine de l'onglet numéro un est un graphique qui passe en plein écran lorsque l'orientation change en paysage; cependant, ceci doit être vérifié à chaque fois que la vue apparaît car le changement d'orientation aurait pu se produire ailleurs, donc j'espérais interroger l'état d'orientation à chaque fois que cette vue apparaîtrait.

Répondre

0

L'orientation [[UIDevice currentDevice]] ne vous donnerait-elle pas l'état d'orientation actuel? Vous pouvez vérifier cela dans votre méthode viewWillAppear du contrôleur de vue qui veut interroger. Editer: Autre que cela, il existe plusieurs façons d'obtenir l'orientation actuelle, telles que l'utilisation de la propriété statusBarOrientation dans UIApplication ou la propriété interfaceOrientation dans UIViewcontroller.

+0

Apparemment, vous n'avez pas lu la question. Il dit que cette méthode retourne NULL même s'il appelle beginGeneratingOrientationNotifications. – Jasarien

2

semble une question stupide, mais est-ce pas

beginGeneratingDeviceOrientationNotifications

(minuscule b) ...

9

la notion d'orientation de UIDevice semble être seulement disponible sur les appareils réels. Le simulateur semble toujours renvoyer 0 ici, que les notifications aient été activées ou non, comme le suggèrent les documents. Irritant inconvénient, mais voilà.

Je trouve cela fonctionne très bien sur le périphérique réel:

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 
    NSLog(@"orientation: %d", [[UIDevice currentDevice] orientation]); 
    [[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications]; 
+1

Yep, j'ai juste perdu 2h à essayer de comprendre ce qui n'allait pas mais en fait c'était juste le simulateur. Tout fonctionne bien sur l'appareil. – samvermette

+3

[[UIDevice currentDevice] orientation] ne fonctionne pas si l'utilisateur a verrouillé l'orientation de son périphérique depuis le Springboard. l'orientation est toujours la dernière valeur, et il n'y a aucune notification pour les changements. – Jeff

+5

UIDeviceOrientation interfaceOrientation = [UIApplication sharedApplication] .statusBarOrientation; cette alternative a fonctionné pour moi – iMeMyself

1

Si vous cochez [[UIDevice currentDevice] orientation] en - (void)viewDidLoad vous obtiendrez toujours nul.

réintégriez * - (void) viewDidAppear:(BOOL) * méthode d'animation et vous

+1

"... vous aurez toujours' nil' ". Est-ce documenté? –

1

c'est comme par iMeMyself dit dans les commentaires ci-dessus - cela me Samed beaucoup de temps et je pense est la bonne réponse si je voulais souligner ici:

UIDeviceOrientation interfaceOrientation = [UIApplication sharedApplication].statusBarOrientation; 

if (UIInterfaceOrientationIsLandscape(interfaceOrientation)) 
{ 
    //do stuff here 
} 
else if (UIInterfaceOrientationIsPortrait(interfaceOrientation)) 
{ 
//or do stuff here 
} 
+0

cela a fonctionné pour moi, mais ne devrait pas être 'UIInterfaceOrientation interfaceOrientation = [....'? – Jimmery

+0

mis à jour pour l'utilisation ci-dessus – craigk

Questions connexes