Détecter si un label ou une view est à  l' écran

Bonjour,


 


Je fais une scroll qui contient des petite view à  l' intérieur desquelles il y a des label.


En fonction du label qui est a l' écran je pensais passer une variable et l' afficher dans un autre label à  l' écran.


 


Y a t il un moyen de détecter qu' elle vue ou qu' elle label est visible à  l' écran ?


 


Merci.


Réponses

  • AliGatorAliGator Membre, Modérateur
    décembre 2014 modifié #2
    Hello,

    Je suis pas sûr que ta stratégie soit la bonne (à  vrai dire je ne comprends pas trop ce que tu veux faire avec ton "en fonction du label à  l'écran je pensais passer une variable et l'afficher dans un autre label à  l'écran", et ça me parait assez bizarre et pas très clair).

    Ceci dit si tu veux une réponse à  ta question, cela dépend de ce que tu appelles "si une vue est visible à  l'écran".
    • Si c'est au sens "est-elle dans la hiérarchie des vues", il suffit de vérifier si sa propriété window ou superview est à  nil, si oui c'est qu'elle n'a pas de parent donc qu'elle n'est pas dans la hiérarchie de vue.
    • Si c'est au sens "elle est peut-être dans la hiérarchie de vues mais elle est cachée", le plus simple c'est de faire une intersection (CGRectIntersect) entre sa frame et les bounds de sa superview. Si cette intersection des deux CGRect vaut CGRectZero, c'est qu'aucune partie de la frame de ta vue n'est visible dans les bounds de sa vue parente, donc si clipToBounds est à  YES, ta vue sera alors forcément non visible à  l'écran.
    Mais encore une fois, j'ai du mal à  voir la logique qu'il y a derrière tout cela et à  comprendre ce que tu veux faire exactement et pourquoi ?!
  • En fait c' est juste un scrollView dans le ses horizontal et qui contient des labels. J' aimerai qu' un autre label disposé en dessous affiche ce qui est écrit juste en haut (dans le scroll view). Le label correspondant (label 1, label 2).


    J' utilise déjà  une intersection mais je l' ai placé derrière la première vue contenant le label 1. donc des qu' on fait glisser la scrollView vers la gauche le label en dessous reste avec l' inscription du labell 1 au lieu d' écrire label 2 puisque avec la scrollView on se déplace à  l' intérieur. On ne fait pas deplacer les contenus.


  • AliGatorAliGator Membre, Modérateur
    Pourquoi ne pas utiliser une UICollectionView ?! Et demander quelle cell est visible ?

    En + ça permettrait le recyclage...


    Et sinon je ne comprends pas ta phrase "J' utilise déjà  une intersection mais je l' ai placé derrière la première vue contenant le label 1" ça veut rien dire du tout. CGRectIntersect est une fonction C tu peux pas placer une fonction derrière un label...


    Décidément, tu es très doué pour faire des phrases qui n'ont pas de sens, à  se demander si tu comprends ce que tu écris toi-même...
  • J' utilise déjà  une fonction CGrectIntersect avec deux vues.


  • Je voulais dire que j' ai mis une vue derrière une autre vue.


  • AliGatorAliGator Membre, Modérateur
    Et ?
  • Et si les vues disposer dans la scrollView rencontraient la première placée derrière je pensais envoyer une variable diffrente en fonction de chaque vue rencontrée. Mais j' avais mal calcule l'a histoire. Dans une scrollView on se déplace à  l' intérieur. C' est pas ce qui est à  '' intérieur qui bouge. Donc CGRectIntersept ne peut pas fonctionner.
  • Joanna CarterJoanna Carter Membre, Modérateur
    Est-ce que tu peux nous montrer une image (en simulation) de ce que tu veux réaliser ?
  • AliGatorAliGator Membre, Modérateur
    décembre 2014 modifié #10


    Et si les vues disposer dans la scrollView rencontraient la première placée derrière je pensais envoyer une variable diffrente en fonction de chaque vue rencontrée. Mais j' avais mal calcule l'a histoire. Dans une scrollView on se déplace à  l' intérieur. C' est pas ce qui est à  '' intérieur qui bouge. Donc CGRectIntersept ne peut pas fonctionner.

    Ce sont les bounds de la scrollView qui bougent, donc si ça fonctionne. A condition de faire l'intersection avec les bonnes propriétés donc (avec scrollView.bounds en particulier et pas sa frame), comme je l'ai décrit dans ma reponse.
  • Joanna, c'est un peu difficile de montrer en image ce que je veux veux faire. Il faudrait envoyer une vidéo.


    AliGator, tu as raison. J' ai changé frame par bounds ( james... bounds... haha :-) humour :-) ) ça à  l' air de vouloir marcher.


    Mais ça ne marche pas encore. C' est quoi la différence entre bounds et frame ?


  • Joanna CarterJoanna Carter Membre, Modérateur



     


     


    Super cool ce truc ; je m'en souviendras  8--)

  • frame vs bounds




    Génial ! Mais comment fait tu ce genre de vidéo (désolée si ça pollue le post) ?
  • Joanna CarterJoanna Carter Membre, Modérateur

    C'est pas un vidéo, c'est fait automatiquement en fonction de l'URL par lmgtfy.com  :-*


  • Merci AliGator.


  • Pour faire simple, il faudrait que je connaisse la position d' un label ou d' une vue et en fonction de la position un message s' inscrit dans un label.


     


    if (position du label 1 == 0, 0, 120, 60) {


    label2.text = @texte;


    }


     


    De quel côté je dois aller chercher ?


     


    Merci.


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