gpt4 book ai didi

iphone - UIScrollView 内部 UIView 的 DrawRect

转载 作者:行者123 更新时间:2023-12-03 19:23:25 25 4
gpt4 key购买 nike

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

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

这是调整 UIView 大小的 ViewController(它是 UIScrollView 的 contentView 的 subview )

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 同步移动

最佳答案

参见my answerthis question 。 UIScrollView 在进行捏缩放时会对内容 View 应用变换,这就是导致模糊的原因。如果您遵循我描述的方法,您可以覆盖它以清晰地绘制您自己的内容。

关于iphone - UIScrollView 内部 UIView 的 DrawRect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2047619/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com