2017-04-20 3 views
0

J'ai une application avec une visionneuse de photothèque. Dans l'application, vous pouvez sélectionner une photo et en utilisant des gestes échelle et panoramique autour de la photo. Je fais ceci en changeant la transformée affine de l'UIImageView contenant la photo. L'application prend également en charge l'évolution des orientations téléphoniques. Dans certaines situations, le calcul de la trame de l'UIImageView sur le changement d'orientation semble être faux. En règle générale, la taille d'image sera mal calculée.Cadre de UIView transformé après plusieurs changements d'orientation

  • Set UIImageView avec transformation d'identité
  • Set vue transformons donc nous réduisons d'un geste de pincement
  • téléphone Rotation du mode portrait au paysage
  • Appliquer une nouvelle transformation à la vue à l'échelle d'un point différent dans l'image
  • téléphone Rotation du paysage au portrait
  • ensemble Reprenez à l'identité

Après cela, le cadre UIImageView est différent de ce qu'il était à l'origine pour que l'image soit mise à l'échelle.

Les indicateurs d'autoresizing pour UIImageView sont .flexibleWidth et .flexibleHeight. Y a-t-il quelque chose que je puisse faire pour éviter cela? Il semble que LayoutSubviews ne gère pas très bien les UIViews mis à l'échelle. J'ai essayé de supprimer l'échelle dans viewWillLayoutSubviews() et de réappliquer dans viewDidLayoutSubviews() mais cela n'a pas aidé.

Répondre

2

Les transformations ne modifient pas les limites de votre vue; ils sont appliqués après le calcul de l'autolayout. Les transformations doivent être utilisées pour des choses transitoires comme l'animation et non pour le positionnement et le dimensionnement de votre interface utilisateur (cela vous donnerait par exemple des coordonnées incorrectes pour des choses comme panGestureRecognizer).

Je pense que vous feriez mieux de mettre votre imageView dans un UIScrollView que de jouer avec les transformations. UIScrollView gère déjà le panoramique et le pincement pour zoomer. Il vous suffit donc de gérer scrollViewDidZoom et d'ajuster vos contraintes en conséquence. here is an example.

+0

ok les applaudissements vont faire l'affaire. – Spads