DrawRect de UIView à l'intérieur de UIScrollView

Je suis en train de dessiner une petite image sur un UIScrollView pour mon iPhone. J'ai commencé avec une UIImage créé à partir d'un png j'ai inclus dans mon bundle et qui fonctionne bien. Chaque fois que le zoom/panoramique s'arrête le délégué de la scrollview recalcule l'image de cette UIImage (qui est une sous-vue de la UIScrollView de contentView) et les appels setNeedsDisplay. Le cadre est plus petit et plus petit en largeur/hauteur de mesures que vous effectuez un zoom dans la scrollview parce que je veux que l'image reste de la même taille à l'écran. Alors que l'utilisateur est le zoom de l'image est à la bonne taille, mais dès que le zoom s'arrête, il fait corriger. Pas génial mais pas la pire chose qui soit.

Le problème est maintenant que je veux attirer l'image de moi-même, plutôt que d'avoir une statique de la png. J'ai sous-classé UIView et a obtenu dans la méthode drawRect mais je ne peux pas obtenir les maths droite pour dessiner un chemin d'aspect lisse lorsque la vue est agrandie. J'ai pensé que je pouvais l'échelle de la largeur de la ligne vers le bas et le rayon du cercle, je suis de dessin (CGContextAddArc), mais il semble que si l'iPhone a essayé de dessiner une fine doublée de cercle de plus de deux ou trois pixels et agrandit les pixels, plutôt que de zoom de la vue et dessiné une très grande précision cercle sur elle.

C'est le ViewController le redimensionnement de la UIView (qui est une sous-vue de la UIScrollView de contentView)

float scaler = (1/scrollView.zoomScale);
[targetView setFrame:CGRectMake(viewCoords.x-11*scaler, viewCoords.y-11*scaler, 22*scaler,22*scaler)]; 
[targetView setNeedsDisplay];

C'est le drawRect de la UIView

float x = rect.origin.x + rect.size.width/2.0;
float y = rect.origin.y + rect.size.height/2.0;
float radius = (rect.size.width-2.0*lineWidth)/2.0;

CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(ctx,lineWidth );

CGContextSetRGBStrokeColor(ctx, 1.0, 0.0, 0.0, 1.0);
CGContextAddArc(ctx, x, y, radius , 0, 2* M_PI, 1);
CGContextClosePath(ctx);
CGContextStrokePath(ctx);

Je suis ouvert à l'idée de placer la sous-classe UIView ailleurs, mais je dois l'avoir déplacer en synchronisation avec le UIScrollView de contentview

OriginalL'auteur Craig | 2010-01-12