在 ios 的滚动视图中绘制缩放的图像视图?
Posted
技术标签:
【中文标题】在 ios 的滚动视图中绘制缩放的图像视图?【英文标题】:Drawing on zoomed imageview in scrollview in ios? 【发布时间】:2013-09-21 12:26:04 【问题描述】:嗨朋友们,我正在创建 ipad 应用程序,我在 UIScrollView 中使用 UIImageView。因此,当我缩放图像并尝试绘制一些东西时,它并没有在我触摸的那个点上绘制。我放大了多少它在绘图上有所不同,并在左上角而不是中心创建图像。 伙计们建议我。 这是我的代码
if (isFreeHand==YES)
mouseSwiped = YES;
UITouch *touch = [touches anyObject];
CGPoint currentPoint = [touch locationInView:self];
self.frame = CGRectIntegral(self.frame);
UIGraphicsBeginImageContextWithOptions(self.frame.size, self.opaque, 0.0);
[self.tempDrawImage.image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x-mWidht, lastPoint.y-mHeight);
CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), currentPoint.x-mWidht, currentPoint.y-mHeight);
CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
CGContextSetLineWidth(UIGraphicsGetCurrentContext(), brush );
CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), red, green, blue, 1.0);
CGContextSetBlendMode(UIGraphicsGetCurrentContext(),kCGBlendModeNormal);
CGContextStrokePath(UIGraphicsGetCurrentContext());
self.tempDrawImage.image = UIGraphicsGetImageFromCurrentImageContext();
[self.tempDrawImage setAlpha:opacity];
UIGraphicsEndImageContext();
lastPoint = currentPoint;
【问题讨论】:
我猜你应该使用contentOffset
和zoomScale
来计算正确的点。
@rokjarc 怎么用??
我会试着在一分钟内写一个假设的答案。
【参考方案1】:
当图像被缩放时,它看起来比实际更大。它的原点可能不在 (0,0)。所以你必须重新计算触摸的真实位置。
澄清:
zoom scale ... zs
image offset ... (oX,oY)
touch coordinates ... (tX,tY)
translated touch ... (rtX,rtY)
如果缩放图像的原点仍在 (0,0) 中,那么您将 像这样翻译触摸:
rtX = tX/zs;
rtY = tY/zs;
如果图像原点偏离 (0,0) 偏移量 (oX,oY) 并且 zoomscale 是 1.0,你可以这样翻译 touch:
rtX = tX+oX;
rtY = tY+oY;
把它们放在一起(偏移和缩放),翻译就可以了 像这样:
rtX = oX + tX/zs; //with oX zoomscale is allready taken into account
rtY = oY + tY/zs; //with oY zoomscale is allready taken into account
请注意,这些计算可能并不完全正确,因为 我没有测试它们。但他们应该让你开始。
甚至可能有更优雅的(内置)解决方案来解决您的问题。
【讨论】:
【参考方案2】:在第四行将self
替换为您的 UIImageView 的名称:
CGPoint currentPoint = [touch locationInView: self.tempDrawImage];
locationInView实际上是让一个触摸的坐标相对于某个UIView,这正是你所需要的。
【讨论】:
以上是关于在 ios 的滚动视图中绘制缩放的图像视图?的主要内容,如果未能解决你的问题,请参考以下文章