2010-12-15 4 views
1

Je réalise une animation UIView sur des sous-vues individuelles qui ont un certain nombre de vues de frères et sœurs que je ne veux pas voir affectées par l'animation à vue unique. Cependant layoutSubviews est appelée sur la vue de présentation contenant lorsque je fais l'animation, provoquant ainsi la réorganisation des autres frères et sœurs. (Je devrais expliquer que je fais la mise en page de sous-vue initiale dans la méthode layoutSubviews de la vue parente, je veux seulement qu'elle soit appelée la première fois que je configure les sous-vues, pas quand je les anime individuellement plus tard activé.)Pourquoi l'animation d'une sous-vue provoque l'appel de la méthode layoutSubviews de sa vue parente?

Pourquoi la méthode layoutSubviews de la vue parente est appelée lors de l'animation de ses sous-vues?

Répondre

1

Je peux imaginer "trier une grille d'icônes", il vous suffira d'animer une icône et le reste fonctionnera automatiquement.

De l'autre côté: quels masques autoresizing avez-vous définis pour la vue que vous animez? Peut-être que cela a à voir avec ça. Quel type d'UIView animez-vous? Peut-être change-t-il de forme et appelle [self.superview setNeedsLayout] pour indiquer à l'aperçu qu'il a changé de forme.

Autre idée: Votre vue d'ensemble "autoresizedSubviews" est-elle définie?

+0

Vous avez répondu à l'une de mes questions: pourquoi la méthode layoutSubviews de ma super-vue est-elle appelée à changer une de ses sous-vues? Je ne pouvais pas comprendre pourquoi cela pourrait arriver. Mais évidemment, si l'une des sous-vues change de forme, vous voudriez que la vue précédente appelle sa méthode layoutSubviews pour donner à tout le monde en aval une chance de se réajuster. Alors maintenant je dois juste comprendre comment ne pas avoir cela se produire dans ce cas particulier. – hkatz

+0

De plus, j'ai essayé d'éteindre autoresizesSubviews mais cela n'a pas aidé. Et à la fois le superview et toutes ses sous-vues ont autoresizingMask == UIViewAutoresizingNone. – hkatz

+0

Impossible de le tester maintenant, en essayant de le reproduire le soir – Dunkelstern

0

J'ai découvert que même les transformations de définition sur les couches d'une vue peuvent déclencher setLayoutSubviews de la vue. Cela m'a pris par surprise aussi, mais peut-être juste parce que je n'ai pas besoin du comportement pour le moment. Il peut parfois devenir pratique, je suppose ...

Questions connexes