Dans un gestionnaire d'événement donné (pas la méthode "shouldAutorotateToInterfaceOrientation") comment puis-je détecter l'orientation actuelle de l'iPad ? J'ai un champ de texte que je dois animer vers le haut (lorsque le clavier apparaît) dans la vue paysage, mais pas dans la vue portrait et je veux savoir dans quelle orientation je me trouve pour voir si l'animation est nécessaire.
Réponses
Trop de publicités?Les informations sur l'orientation ne sont pas très cohérentes, et il existe plusieurs approches. Si vous êtes dans un contrôleur de vue, vous pouvez utiliser la fonction interfaceOrientation
propriété. Vous pouvez appeler d'autres endroits :
[[UIDevice currentDevice] orientation]
Vous pouvez également demander à recevoir des notifications de changement d'orientation :
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:) name:UIDeviceOrientationDidChangeNotification object:nil];
Certaines personnes aiment aussi vérifier l'orientation de la barre d'état :
[UIApplication sharedApplication].statusBarOrientation
J'ai trouvé une astuce pour résoudre le problème d'orientation de FaceUp ! !!
Retardez la vérification de l'orientation jusqu'à APRÈS le lancement de l'application, puis définissez les variables, les tailles d'affichage, etc.
//CODE
- (void)viewDidLoad {
[super viewDidLoad];
//DELAY
[NSTimer scheduledTimerWithTimeInterval:0.5
target:self
selector:@selector(delayedCheck)
userInfo:nil
repeats:NO];
}
-(void)delayedCheck{
//DETERMINE ORIENTATION
if( [UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortrait ){
FACING = @"PU";
}
if( [UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortraitUpsideDown ){
FACING = @"PD";
}
if( [UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationLandscapeLeft ){
FACING = @"LL";
}
if( [UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationLandscapeRight ){
FACING = @"LR";
}
//DETERMINE ORIENTATION
//START
[self setStuff];
//START
}
-(void)setStuff{
if( FACING == @"PU" ){
//logic for Portrait
}
else
if( FACING == @"PD" ){
//logic for PortraitUpsideDown
}
else{
if( FACING == @"LL"){
//logic for LandscapeLeft
}
else
if( FACING == @"LR" ){
//logic for LandscapeRight
}
}
//CODE
- Vous pouvez ajouter des sous-vues, positionner des éléments, etc. dans la fonction "setStuff"... tout ce qui dépendrait initialement de l'orientation !!!
D
-Chris Allinson
Vous pouvez y parvenir de deux manières :
1- En utilisant la méthode suivante :
**Mettez la ligne suivante dans le fichier -(void)viewDidLoad
Méthode :
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(deviceRotated:) name:UIDeviceOrientationDidChangeNotification object:nil];
puis mettez cette méthode dans votre classe
-(void)deviceRotated:(NSNotification*)notification
{
UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
if(orientation == UIInterfaceOrientationLandscapeLeft || orientation == UIInterfaceOrientationLandscapeRight)
{
//Do your textField animation here
}
}
La méthode ci-dessus vérifiera l'orientation lorsque le dispositif sera tourné.
2- La deuxième façon est d'insérer la notification suivante à l'intérieur -(void)viewDidLoad
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkRotation:) name:UIApplicationDidChangeStatusBarOrientationNotification object:nil];
puis mettez la méthode suivante dans votre classe
-(void)checkRotation:(NSNotification*)notification
{
UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
if(orientation == UIInterfaceOrientationLandscapeLeft || orientation == UIInterfaceOrientationLandscapeRight)
{
//Do your textField animation here
}
}
La méthode ci-dessus vérifiera l'orientation de la barre d'état de l'ipad ou de l'iPhone et en fonction de celle-ci vous ferez votre animation dans l'orientation requise.