Frame d'une UIView après une rotation du device

Alf1996Alf1996 Membre
août 2017 modifié dans Dev. iOS, watchOS, tvOS #1

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...    B)   B)   B)  


 


 


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 ?   o:)  


Merci d'avance...


Réponses

  • Salut Alf, ça plane pour toi ?

  • Joanna CarterJoanna Carter Membre, Modérateur
    août 2017 modifié #3

    Faut oublier tout ça.



    @implementation ViewController
    {
    - (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
    {
    NSLog(@width %f : height %f, size.width, size.height) // landscape - 1024 : 768 ; portrait - 768 : 1024
    }
    }



  • Salut Alf, ça plane pour toi ?




     


    Hello Draken ! ça plane !!!!


     




     


    Faut oublier tout ça.



    @implementation ViewController
    {
    - (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
    {
    NSLog(@width %f : height %f, size.width, size.height) // landscape - 1024 : 768 ; portrait - 768 : 1024
    }
    }



     


    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 ?

  • DrakenDraken Membre
    août 2017 modifié #5


     


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

     



    override var bounds : CGRect {
    if bounds != oldValue {
    print(bounds) // S'affiche lorsque la view connait une modification
    }
    }
  • Swift ? kesako ??? 


     


    Désolée je ne me suis pas encore convertie... Merci quand même Jérémy.




  •  


    Désolée je ne me suis pas encore convertie...  >:)   >:)   >:)   >:)   >:)





  • 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 ?  ^_^

Connectez-vous ou Inscrivez-vous pour répondre.