Frame d'une UIView après une rotation du device
Hello à tous !
Voila un bon moment que je ne suis pas passée faire un petit coucou !!! ::)
Je souhaiterais récupérer le frame d'une UIView (et de certaines subViews), juste après la rotation, et je rencontre des petits problèmes...
J'ai essayé de faire un truc via un abonnement à la notification "UIDeviceOrientationDidChangeNotification ", mais malheureusement le frame que je récupère n'est pas à jour lorsque je reçois la notification : il semble qu'il y ait un retard, un peu comme si la notification était appelée au moment du " willRotate " et pas du " didRotate ". Par contre, l'information concernant l'orientation du device est bonne...
Voici mon code :
dans le viewDidAppear :
// Abonnement à la notification "changement d'orientation"
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(orientationChanged
name:UIDeviceOrientationDidChangeNotification
object:nil];
la méthode " orientationChanged " :
- (void)orientationChanged:(NSNotification *)notification{
NSLog(@Orientation changed);
UIDeviceOrientation Orientation=[[UIDevice currentDevice]orientation];
if(Orientation==UIDeviceOrientationLandscapeLeft || Orientation==UIDeviceOrientationLandscapeRight) {
NSLog(@Landscape);
} else if(Orientation==UIDeviceOrientationPortrait) {
NSLog(@Potrait Mode);
}
NSLog(@frame : %f %f,self.view.frame.size.width,self.view.frame.size.height);
NSLog(@bounds : %f %f,self.view.bounds.size.width,self.view.bounds.size.height);
}
Et la console :
2017-08-15 17:46:22.620 MyApplication[35923:679059] Orientation changed
2017-08-15 17:46:22.620 MyApplication[35923:679059] Landscape
2017-08-15 17:46:22.621 MyApplication[35923:679059] frame : 768.000000 1024.000000
2017-08-15 17:46:22.621 MyApplication[35923:679059] bounds : 768.000000 1024.000000
2017-08-15 17:46:41.884 MyApplication[35923:679059] Orientation changed
2017-08-15 17:46:41.884 MyApplication[35923:679059] Potrait Mode
2017-08-15 17:46:41.885 MyApplication[35923:679059] frame : 1024.000000 768.000000
2017-08-15 17:46:41.885 MyApplication[35923:679059] bounds : 1024.000000 768.000000
2017-08-15 17:46:53.421 MyApplication[35923:679059] Orientation changed
2017-08-15 17:46:53.421 MyApplication[35923:679059] Landscape
2017-08-15 17:46:53.422 MyApplication[35923:679059] frame : 768.000000 1024.000000
2017-08-15 17:46:53.422 MyApplication[35923:679059] bounds : 768.000000 1024.000000
Vu que l'information sur l'orientation du device est bonne, je pourrais bidouiller un truc... mais ce serait vraiment crade !!!
Quelqu'un a une idée ?
Merci d'avance...
Réponses
Salut Alf, ça plane pour toi ?
Faut oublier tout ça.
Hello Draken ! ça plane !!!!
Merci Joanna, j'avais vu cette méthode, mais je ne savais pas trop comment l'utiliser ! Je vais regarder de plus près.
En fait, je récupère le size de la View, c'est çà ? Et du coup, si je veux les subViews comment çà se passe ?
Chaque vue conserve ses sous-vues dans un tableau appelé subviews. Il suffit de piocher dedans pour accéder à toutes les infos sur les vues filles.
https://developer.apple.com/documentation/uikit/uiview/1622614-subviews
Dans le même esprit, au niveau de ta view, tu peux faire ça (c'est en swift) :
Swift ? kesako ???
Désolée je ne me suis pas encore convertie... Merci quand même Jérémy.
Tu dois avoir un équivalent en Objective-c, non ? ^_^