UIScrollView中的UIView的DrawRect

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

现在的问题是我想自己绘制图像,而不是使用静态PNG。 我划分了UIView并进入了drawRect方法,但是我无法获得正确的数学运算,以便在放大视图时绘制光滑的路径。我认为我可以缩小线宽并减小圆的半径I (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同步


看到我对这个问题的回答。 当UIScrollView执行缩放缩放时,UIScrollView会将变换应用于您的内容视图,这是造成您模糊的原因。 如果您遵循我描述的方法,您可以重写此以快速绘制您自己的内容。

链接地址: http://www.djcxy.com/p/81997.html

上一篇: DrawRect of UIView inside UIScrollView

下一篇: Where to determine UIView size