Bug UIScrollView / Zoom / Autolayout
Bonjour à tous !
Je rencontre un soucis de zoom dans une UIScrollView. Cette UIScrollView contient une UIImageView centrée, scrollable horizontalement. Lors du zoom, alors que l'image est bien centrée la propriété "y" de l'offset de la scroll view semble remise à 0 entre le "scrollViewWillBeginZooming" (Offset: 187.5 / 160) et le premier appel de "scrollViewDidZoom" (Offset: 189 / 4) ce qui donne un effet graphique du plus mauvais effet
Au niveau des contraintes, la scroll view est fixée en top / bottom / leading / trailing de la vue principale (full screen). Pour l'UIImageView contenue dans la scroll view j'ai des contraintes pour la largeur / hauteur (assignée dans le code selon l'image) et également 4 contraintes top / bottom / leading / trailing. La seule particularité pour ces 4 contraintes est qu'elles ne valent pas 0 car l'image n'est pas collée aux bords de la scroll view. J'ai en effet besoin d'une marge de chaque côté pour pouvoir réaliser un traitement particulier (un pin est constamment présent au milieu de la vue et je dois donc pouvoir placer, en scrollant, le pin dans chaque coin de l'image).
Quand j'enlève cette marge de chaque côté (et que l'image est collée aux bords de la scroll view), plus aucun soucis, le zoom dans l'image se passe sans problème. Par contre avec ces marges, aucun moyen de comprendre cet effet de jump et ce reset de l'offset de la scrollview au zoom. Je pense à une mauvaise cohabitation entre mes contraintes et la gestion du zoom par la scroll view sans avoir pour autant trouvé la cause du problème.
Une idée ? Un grand merci d'avance pour votre aide !
Réponses
Attention à contraintes + zoom.
cf. http://revealapp.com/blog/constraints-and-transforms.html
Oui effectivement Zoom + contraintes autolayout ne semblent pas toujours faire bon ménage.
Plutôt que d'ajouter des marges manuellement et de center mon UIImageView j'ai utilisé la propriété contentInset de la UIScrollView. Du coup plus de contraintes et le résultat est identique.
Un grand merci pour vos réponses