2017-08-04 4 views
0

J'ai une application de dessin qui utilise UIBezierpaths (vecteurs) et j'essaie de créer une fonction qui me permet de zoomer autour de la toile/UIView comme d'autres applications de dessin le font. Je ne veux pas agrandir les bezierpaths individuels, je sais déjà comment faire ça. Je veux une pincée pour zoomer fonctionnalité comme safari qui zoome la toile/vue.Zoomer dans UIView sans pixelliser

Si j'utilise le code suivant:

self.transform = CGAffineTransform(scaleX: 2, y: 2) 

Ce: enter image description here

Se transforme en ce que vous remarquerez est assez floue/pas lisse comme vecteurs sont censés être: enter image description here

Mais je veux qu'il ressemble à ceci, ce qui se passe sur une autre application de dessin enter image description here

Je comprends que cette question peut avoir une réponse compliquée, mais j'ai du mal à trouver cette réponse par moi-même.

+1

Si vous souhaitez implémenter le zoom vectoriel, vous devez recalculer les points vous-même. 'CGAffineTransform' n'est pas basé sur un vecteur. – the4kman

+0

CGaffinetransform agrandit uibezierpaths correctement, mais je veux transformer la vue – user3290287

Répondre

0

J'ai fait une application de dessin qui a été en mesure de zoomer. Je ne me souviens pas Comment j'ai réussi à gérer cela. Mais je pense que vous devriez absolument utiliser UIScrollView pour gérer la partie zoomer/glisser.
UIImageView pinch zoom swift

Vous pourrez pincer pour zoomer, glisser etc. pour presque gratuitement. Et il ne sera pas pixélisé Je pense

+0

Merci pour cela. Je jouais avec cela plus tôt sans succès en supposant que ce n'était pas la solution, mais je continuerai à essayer maintenant que vous m'avez informé que c'est probablement la solution – user3290287

0

Ajoutez un UIPinchGestureRecognizer et UIPanGestureRecognizer à votre affichage de mise en plan. Ensuite, gérer les événements de délégué à partir d'eux pour mettre à jour votre échelle et décalage. Vous utilisez enfin l'échelle et le décalage résultants pour redessiner (en appelant généralement setNeedsDisplay()).

Je peux vous dire par expérience que ces calculs sont un peu compliqués mais faisables.