4

我正在尝试在我的 iPhone 应用程序的 UIScrollView 上绘制一个小图像。我从一个包含在我的包中的 png 创建的 UIImage 开始,它工作正常。每次缩放/平移停止时,滚动视图的委托都会重新计算该 UIImage 的框架(这是 UIScrollView 的 contentView 的子视图)并调用 setNeedsDisplay。当您放大滚动视图时,框架的宽度/高度测量值越来越小,因为我希望图像在屏幕上保持相同大小。当用户缩放图像时,图像尺寸错误,但一旦缩放停止,它就会得到纠正。不是很好,但也不是最糟糕的事情。

现在的问题是我想自己绘制图像而不是静态 png。我已经将 UIView 子类化并进入了 drawRect 方法,但是当视图放大时,我无法正确地绘制出平滑的路径。我想我可以缩小线宽和圆的半径正在绘制 (CGContextAddArc) 但看起来 iPhone 试图在两个或三个像素上绘制一个细线圆然后放大这些像素,而不是放大视图并在其上绘制一个高度准确的圆。

这是调整 UIView 大小的 ViewController(它是 UIScrollView 的 contentView 的子视图)

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

这是 UIView 的 drawRect

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);

我对将 UIView 子类放置在其他地方的想法持开放态度,但我必须让它与 UIScrollView 的 contentview 同步移动

4

1 回答 1

1

请参阅这个问题的回答。UIScrollView 在进行捏缩放时会对您的内容视图应用转换,这就是导致您的模糊的原因。如果您遵循我描述的方法,您可以覆盖它以清晰地绘制您自己的内容。

于 2010-01-12T15:23:26.770 回答