91 votes

Déterminer si UIView est visible par l’utilisateur ?

est-il possible de déterminer si mon `` est visible par l’utilisateur ou non?

My View est ajouté plusieurs fois dans un fichier.

Chaque instance de cette vue a un `` qui met à jour la vue.

Cependant, je ne veux pas mettre à jour une vue qui n’est pas visible par l’utilisateur.

Est-ce possible ?

Merci

82voto

mahboudz Points 23653

Vous pouvez vérifier si :

  • il est masqué, en cochant view.hidden
  • il se trouve dans la hiérarchie des vues, en vérifiant ``
  • vous pouvez vérifier les limites d’une vue pour voir si elle est à l’écran

La seule autre chose à laquelle je peux penser, c’est si votre point de vue est enterré derrière les autres et ne peut pas être vu pour cette raison. Vous devrez peut-être passer en revue toutes les vues qui suivent pour voir si elles obscurcissent votre vue.

21voto

AlexGordon Points 455

La solution qui a fonctionné pour moi a été de vérifier d’abord si la vue a une fenêtre, puis d’itérer sur les supervues et de vérifier si:

  1. la vue n’est pas masquée.
  2. la vue se trouve dans ses limites de supervues.

Semble bien fonctionner jusqu’à présent.

Swift 3.0

8voto

basvk Points 1795

J’ai comparé @Audrey M. et @John Gibb à leurs solutions.
Et @Audrey M. à sa façon a mieux performé (fois 10).
J’ai donc utilisé celui-ci pour le rendre observable.

J’ai créé un observable RxSwift, pour être averti lorsque l’UIView devenait visible.
Cela pourrait être utile si vous souhaitez déclencher un événement de bannière 'view'

Utilisez-le comme ceci:

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X