[Obj-C] Vue qui masque une autre vue
Hello,
Je suis toujours sur le même projet test (que vous pouvez trouver en pj de ce sujet).
Il s'avère que parfois lors de certains swipes (notamment ceux vers le haut), mon contenu disparaisse et semble être en dehors des bounds.
J'ai donc essayé de faire ça:
if(CGRectContainsRect(screenBound, view1.frame) && CGRectContainsRect(screenBound, view2.frame) && CGRectContainsRect(screenBound, expandButton.frame))
Mais même comme cela, le contenu part en dehors de la zone visible.
Si vous avez une idée, je suis preneur.
Merci d'avance
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Hello,
Bon il s'avère que j'ai remarqué que c'était la view2 qui cachait la view1 et le expandButton, fait un peu n'importe quoi.
J'ai essayé de mettre des conditions sur la position de ces 3 éléments, mais rien n'y fait j'ai toujours ce souci.
Avez-vous des conseils à m'apporter, j'avoue sécher la.
Tu dois travailler avec les bounds de la vue parente et la frame de la vue.
(Voir Views Programming Guide pour comprendre la difference entre frame et bounds).
Sachant que ma vue parente fait la taille de l'écran ça revient au même de faire [[UIScreen mainScreen] bounds] ou [parentView bounds], non ?
Et la frame de la vue c'est bien ce que je fais en la comparant aux bounds.
C'est pas la bonne solution ?
Par ailleurs, je ne suis pas sûr que l'origine de la vue parente soit en 0, 0, à cause de la barre de statut, donc il est possible que les deux rectangles ne soient pas les mêmes. Comme je ne suis pas essayer ton code, je ne suis pas sûr de l'origine du problème.
Effectivement j'avais pas forcément raisonné comme cela bonne remarque, merci
Après ca n'empêche pas mes 3 éléments de se superposer
Alors qu'on s'en moque, ce qu'on veut, c'est savoir quelle est la nouvelle hauteur de view1. Tout devient alors plus simple: c'est expandView qui s'assure que ni view1 ni view2 n'auront une hauteur inférieure à zéro.
P.S.: il faut vraiment que quelqu'un t'explique comment on déclare des variables d'instance en ObjC. J'ai cru comprendre qu'il y avait quelqu'un qui te chapeautait.
Changer la taille de view1 c'est un fait, mais après comment ordonnancer les autres ? Mettre expandButton.Y à view1.y + view1.height (oui c'est pas la syntaxe mais j'abrège) et mettre view2.y à expandButton.y + expandButton + height ?
Parce que si les 3 composants ont une hauteur supérieur à zéro ils peuvent quand même se superposer et donc ça n'est pas le résultat attendu.
Oui effectivement quelqu'un me chapeaute de manière rapide (même si généralement j'ai souvent le droit à un "J'ai pas le temps"). Concernant les variables d'instances, pourquoi m'en parles tu ? Je sais les utiliser mais j'en ai pas forcément vu l'utilité dans ce cadre la. Tu aurais mis le maxHeight, minHeight et viewBound en tant que tel ?
Non, c'est facile. La hauteur totale est self.view.bounds.size.height.
Tu passes la hauteur voulue de view1, tu détermines le y et la hauteur des autres vues. La seule difficulté est de s'assurer que hauteurView1 < hauteurTotale-hauteurExpandView.
Pas du tout, puisqu'on n'a pas besoin de les mémoriser, on peut les déterminer à tout moment.
Voici ton code annoté. Ne le prends pas mal, j'essaie de te faire progresser:
Ok ça m'éclaire un peu plus du coup.
Ah non au contraire, je suis heureux que tu me fasses un feedback, j'estime que j'ai encore à apprendre et que je peut progresser.
Pour répondre à certains de tes commentaires / remarques dans le code (pour ce que j'en ai vu et corrigé actuellement) :
- j'ai retiré les synthesize
- j'ai réglé la BGColor de la collectionView dans le XIB
- j'ai utilisé les getters au lieu des variable d'instance
- le 10 est une valeur en dur, permettant de laisser un espace entre 2 vues
- la vitesse peut être négative, si l'utilisateur swipe up (c'est la solution qui m'avais été donné par Draken ici )
Le reste je n'ai pas encore regardé / analysé.
Merci en tout cas pour ton aide
Essaie, mais vraiment, c'est plus simple que tu ne le penses, ce sont les concepts que tu utilises qui compliquent tout. Réfléchis sur la hauteur, et pas sur le décalage, tu vas grandement te simplifier la vie. Et franchement, vu le peu de code que tu as, n'hésite pas à tout chambouler.
Problème réglé en faisant comme cela