Overlay avec des ViewControllers

Bonjour tout le monde,


 


Dans le cadre d'une application sur ipad, j'aimerais positionner des overlays sur une vue.


Ces overlays sont des viewControllers et ils peuvent être multiple. Si je clique en dehors d'un overlay, tous se ferme (si il y en a plusieurs).


 


ça peut paraà®tre un peu bizarre comme type d'architecture mais en voyant les designs que j'ai, ça peut donner quelque chose de pas trop mal. Idéalement, j'aimerais également rajouter la possibilité de pouvoir les déplacer en restant appuyé dessus.


 


Cependant, je ne sais pas trop comment m'y prendre. Je me suis tourné en premier lieu vers le UIPopoverController mais il ne me plaà®t pas du tout. Je vais peut-être donc devoir écrire un composant custom. 


 


Sur ma seconde idée, je pensais partir du côté des childViewControllers. Mon viewController principal aurait un tableau qui contiendrait mes différents childviewControllers et je les manipulerais, cependant, je me demande si ça ne me gênera pas pour les déplacer et si c'est réellement le bon chemin. 


 


Un troisième que j'ai cru voir sur le net consisterait à  jouer avec différentes window. Seulement je n'ai jamais jouer avec les UIWindow.


 


Voilà  donc où j'en suis. Qu'en pensez-vous et que feriez-vous?


 


Réponses

  • AliGatorAliGator Membre, Modérateur
    Tu te crées une classe "OverlayManager : UIViewController" dont view de ce OverlayManager devra avoir un backgroundColor = [UIColor clearColor].
    Tu lui ajoutes une méthode "-showOverlaysOnViewController:(UIViewController*)vc" qui va :

    - Ajouter sa propre view en subview à  vc.view (en fait tu vas ajouter des NSLayoutConstraints "H:|[overlayview]|" + "V:|[overlayview]|" à  vc.view), et s'ajouter en childViewController à  vc

    - Ajouter un UITapGestureRecognizer à  sa propre view pour que quand elle est tapée, elle se removeFromSuperview et que ton OverlayManager se remove des childViewControllers de vc

    - Ajouter des childViewControllers à  ton OverlayManager pour chaque overlay que tu veux ajouter pour qu'ils se positionnent par dessus

    Ainsi, tu as une vue transparente, pilotée par ton OverlayManager, pour gérer tous tes overlays que tu veux mettre par dessus ton interface, sans les mélanger avec les vrais autres childViewControllers que ton interface peut avoir indépendamment de ça (parce que tu as un SplitViewController ou un NavigationController qui sont des ContainerViewController et ont déjà  leur childs et que tu ne veux pas risquer de te mélanger avec)

    Pour ce qui est du déplacement de tes overlays, tu peux ajouter un UILongTapGestureRecognizer à  tes VC overlays qui va appeler un selector de ton OverlayManager. Ce dernier va alors ajouter un UIPanGestureRecognizer à  son tour, pour gérer le déplacement du VC sélectionné et mettre à  jour sa frame (ou ses NSLayoutConstraint le positionnant)
  • Ok dac, je pars sur ça alors.


    Merci AliisMyGod  :)


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