Ce sujet a été rayé une ou deux fois, mais je suis toujours perplexe. Et Google n'était pas sympathique non plus. Puisque Quartz permet des systèmes de coordonnées arbitraires en utilisant des transformations affines, je veux être capable de dessiner des choses comme des plans d'étage en utilisant des coordonnées réelles, par ex. pieds. Par conséquent, à titre d'exemple, je veux redimensionner la vue de sorte que lorsque je dessine un rectangle 10x10 (par exemple une boîte de 10 pouces), j'obtiens un rectangle de 60x60 pixels.Comment configurer un système de coordonnées Quartz2D utilisateur avec mise à l'échelle qui évite le dessin flou?
Cela fonctionne, sauf que le rectangle que je reçois est assez flou. Une autre question ici a obtenu une réponse qui explique pourquoi. Cependant, je ne suis pas sûr d'avoir compris pourquoi, et de plus, je ne sais pas comment y remédier. Voici mon code:
Je mis mon système de coordonnées dans ma méthode vue awakeFromNib
personnalisée:
- (void) awakeFromNib {
CGAffineTransform scale = CGAffineTransformMakeScale(6.0, 6.0);
self.transform = scale;
}
Et voici ma routine de tirage:
- (void)drawRect:(CGRect)rect {
CGContextRef context = UIGraphicsGetCurrentContext();
CGRect r = CGRectMake(10., 10., 10., 10.);
CGFloat lineWidth = 1.0;
CGContextStrokeRectWithWidth(context, r, lineWidth);
}
La place que je reçois est mis à l'échelle très bien , mais totalement flou. Jouer avec lineWidth
n'aide pas: quand lineWidth
est réglé plus petit, il devient plus léger, mais pas plus net.
Y a-t-il un moyen de configurer une vue pour avoir un système de coordonnées mis à l'échelle, afin que je puisse utiliser mes coordonnées de domaine? Ou devrais-je revenir en arrière et implémenter la mise à l'échelle dans mes routines de dessin?
Notez que ce problème ne se produit pas pour la traduction ou la rotation.
Merci
Si vous souhaitez définir la largeur de trait en points, quel que soit le facteur d'échelle, définissez-le sur le "nombre de points/facteur d'échelle souhaité". Exemples: La valeur par défaut est 1 pt/1 × = 1; une ligne de 1 pt à votre facteur 6 × est '1,0/6,0'; une ligne de 2 points serait '2.0/6.0'. –