UIImageView在rect中绘制,图像大小而不是图像视图

时间:2012-11-28 06:09:19

标签: iphone objective-c ios cocoa-touch uiimageview

我想在UIImageView上绘图,以下是我的绘图代码。我的图像查看模式是宽高比。当我使用以下代码绘制时,因为我正在使用drawinrect并给出UIImageView的矩形所以所有图像都缩小到`imageview的大小。我想要绘制图像大小而不是图像视图的图像。因为我正在检测图像视图上的触摸点,所以点击点和图像上的实际绘图是不同的。任何人都可以告诉我如何直接在图像上绘图。以及如何计算图像触摸点的这种偏移或差异,而不是图像视图。

    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
 {

    UITouch *touch = [touches anyObject];
    lastTouch = [touch locationInView:self];

 }

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{

CGPoint   currentTouch = [[touches anyObject] locationInView:self];

UIGraphicsBeginImageContext(self.image.size);
CGContextRef context = UIGraphicsGetCurrentContext();

[self.image drawInRect:CGRectMake(0, 0, self.image.size.width, self.bounds.size.height)];

CGContextSetLineCap(context, kCGLineCapRound);
CGContextSetLineWidth(context, _brushSize);

CGContextBeginPath(context) ;

CGContextMoveToPoint(context, lastTouch.x, lastTouch.y);
CGContextAddLineToPoint(context,currentTouch.x,currentTouch.y) ;

CGContextSetAlpha( context , 1 );

CGContextSetStrokeColorWithColor(context, [_brushColor CGColor]);

CGContextStrokePath(context) ;

self.image = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

lastTouch = currentTouch;


 }

1 个答案:

答案 0 :(得分:1)

你不应该真的让我们归类UIImageView。它不打算被子类化。

更好的方法是使用UIView代替UIImageView

然后两种可能的方法是......

UIImage直接绘制到drawRect中的UIView,但这会给您带来与当前相同的问题。

或者...

UIView中有一个UIImageView。调整大小以使其为UIImage的正确大小/形状。 (即自己进行缩放)然后在UIImageView放置第二个UIView(并将其子类化),这第二个将被限制为DrawingView或其他东西。您现在可以在此处完成所有绘图。所有的触摸检测也都在这里。因此,您不再需要将触摸点转换为不同的绘图点。