在ios的scrollview中使用缩放的imageview绘图?

时间:2013-09-21 12:26:05

标签: ios uiscrollview uiimageview drawing

嗨朋友我正在创建ipad app我在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;
}

2 个答案:

答案 0 :(得分:0)

当图像缩放时,它看起来比它大。它的起源可能不是(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你会翻译这样的触摸:

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

请注意,这些计算可能不完全正确 我没有测试它们。但他们应该让你开始。

甚至可能有更优雅(内置)的解决方案来解决您的问题。

答案 1 :(得分:0)

在第四行用您的UIImageView名称替换self

CGPoint currentPoint = [touch locationInView: self.tempDrawImage];

locationInView实际上使触摸的坐标相对于某个UIView,这正是你需要的。