我正在尝试在我的 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 同步移动