Garder le centrage dans une NSScrollView
Chacha
Membre
Bonjour,
Voici un problème de méthodologie plutôt que de codage : je pense savoir le résoudre, mais j'aimerais trouver la méthode la plus simple possible.
Supposons que je dispose d'une NSImageView (ou autre NSView), dans laquelle je vais afficher une image précise de taille fixée. Pour permettre de voir des détails de l'image, il est judicieux de rajouter une fonction de zoom, donc je fais en sorte que ma vue soit une sous-vue de NSScrollView. Si je zoome, je n'ai qu'à modifier la "frame" de la vue, et automatiquement, la NSScollView disposera les ascenceurs.
Deux problèmes se posent alors:
Si je dézoome, la frame de la vue peut devenir plus petite que la NSScrollView. Dans ce cas, j'aimerais que la petite vue s'affiche centrée dans la NSScrollView.
Si je zoome, j'aimerais que le point central visé (donc le centre de la NSClipView ?) reste le même, pour donner l'impression qu'on "rentre" dans l'image, et non pas qu'on l'agrandit par homothétie depuis l'origine.
D'après ce que j'ai vu, je devrais pouvoir faire cela en dérivant la NSScrollView et en surchargeant la méthode "tile". Mais n'y a-t-il pas plus simple ? Un truc tout automatique qui marche tout seul ?
Si je n'ai pas été très clair, n'hésitez pas à me le dire.
+
Chacha
Voici un problème de méthodologie plutôt que de codage : je pense savoir le résoudre, mais j'aimerais trouver la méthode la plus simple possible.
Supposons que je dispose d'une NSImageView (ou autre NSView), dans laquelle je vais afficher une image précise de taille fixée. Pour permettre de voir des détails de l'image, il est judicieux de rajouter une fonction de zoom, donc je fais en sorte que ma vue soit une sous-vue de NSScrollView. Si je zoome, je n'ai qu'à modifier la "frame" de la vue, et automatiquement, la NSScollView disposera les ascenceurs.
Deux problèmes se posent alors:
Si je dézoome, la frame de la vue peut devenir plus petite que la NSScrollView. Dans ce cas, j'aimerais que la petite vue s'affiche centrée dans la NSScrollView.
Si je zoome, j'aimerais que le point central visé (donc le centre de la NSClipView ?) reste le même, pour donner l'impression qu'on "rentre" dans l'image, et non pas qu'on l'agrandit par homothétie depuis l'origine.
D'après ce que j'ai vu, je devrais pouvoir faire cela en dérivant la NSScrollView et en surchargeant la méthode "tile". Mais n'y a-t-il pas plus simple ? Un truc tout automatique qui marche tout seul ?
Si je n'ai pas été très clair, n'hésitez pas à me le dire.
+
Chacha
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Pour ce qui est du point central qui reste constante, le plus simple à mon avis est que avant d'appliquer le zoom, tu récupérères les floatValues des deux scrollers, puis après avoir appliqué tu les réinjectes (c'est une valeur comprise entre 0 et 1). Sinon il y a aussi scrollToPoint (NSClipView), mais avec les zooms ça risque de demander quelques transformations.
Pour ce qui est de centrer la vue si elle est plus petite, je ne vois pas comme ça. Quelques idées en vrac:
- changer l'origine de la document view;
- faire en sorte que la document view ait comme taille minimum la taille de la clip view, et que l'image soit alors centrée.
Pour ce qui est de surcharger "tile", c'est une possibilité aussi.