Je dois tracer un chemin le long de la forme d'une image de manière à ce qu'elle corresponde toujours à sa position sur l'image indépendamment de l'échelle de l'image. Pensez à cela comme la vue hybride de Google Maps où les noms de rues et les routes sont superposées sur les images aériennes.Superposition de chemins 2D sur UIImage sans mise à l'échelle des artefacts
En outre, cette trajectoire sera dessinée par les mouvements des doigts de l'utilisateur et je dois être en mesure de récupérer les points-clés du chemin sur les coordonnées des pixels de l'image. L'utilisateur effectue un zoom avant afin de définir plus précisément l'emplacement des chemins.
je parviens à en quelque sorte le faire fonctionner en utilisant cette approche:
-Créer un appelé UIView personnalisé CanvasView qui gère des touches d'interaction et offre mise à l'échelle, la rotation, les valeurs de traduction soit à la UIImageView ou PathsView (voir ci-dessous) en fonction un indicateur: deliverToImageOrPaths.
-Créez un UIImageView contenant l'image de base. Ceci est défini comme enfants de CanvasView
-Créez un UIView personnalisé appelé PathsView qui garde la trace de la géométrie des chemins 2D et se dessine avec un drawRect personnalisé. Ceci est défini en tant qu'enfants de UIImageView.
donc la hiérarchie: CanvasView -> UIImageView -> PathsView
De cette façon, quand deliverToImageOrPaths est OUI, les gestes des doigts transforme à la fois le UIImageView et son PathsView des enfants. Lorsque deliverToImageOrPaths est NON, les gestes n'affectent que PathsView en modifiant sa géométrie. Jusqu'ici tout va bien. Le problème que j'ai est que lors de la mise à l'échelle de la base UIImageView (via sa propriété .transform), le PathsView est mis à l'échelle avec des artefacts d'aliasing. drawRect est toujours appelé sur PathsView mais j'imagine qu'il exécute le dessin en utilisant la taille du tampon d'origine et en l'interpolant.
Comment puis-je résoudre ce problème? Existe-t-il de meilleurs moyens de mettre en œuvre ces fonctionnalités? PS: J'ai essayé de changer la classe de calque PathsView en CATiledLayer avec levelsOfDetailBias 4 et levelsOfDetail 4. Il résout le problème d'aliasing dans une certaine mesure, mais il est inacceptable lent à rendre.