UIImageView 在矩形中绘制图像大小而不是图像视图
Posted
技术标签:
【中文标题】UIImageView 在矩形中绘制图像大小而不是图像视图【英文标题】:UIImageView draw in rect with size of image and not image view 【发布时间】:2012-11-28 06:09:18 【问题描述】:我想在UIImageView
上画画,下面是我的绘图代码。我的图像视图模式适合宽高比。当我使用以下代码进行绘制时,由于我使用的是drawinrect
并给出了UIImageView
的矩形,所以所有图像都被缩小到`imageview.xml 的大小。我想绘制图像大小的图像而不是图像视图。因为我正在检测图像视图上的触摸点,所以点击点和图像上的实际绘图是不同的。任何人都可以告诉我如何直接在图像上绘图。以及如何计算触摸点在图像而不是图像视图上的这种偏移或差异。
-(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】:你不应该真的是我们的班级UIImageView
。它不打算被子类化。
更好的方法是使用UIView
而不是UIImageView
。
那么两种可能的方法是……
将UIImage
直接绘制到drawRect 内的UIView
中,但这会给您带来与当前相同的问题。
或者……
在UIView
中有一个UIImageView
。调整它的大小,使其成为UIImage
的正确大小/形状。 (即自己进行缩放)然后在UIImageView
上放置第二个UIView
(和子类),第二个将被封顶 DrawingView 或其他东西。您现在可以在这里完成所有绘图。你所有的触摸检测也将在这里。这样您就不再需要将触摸点转换为不同的绘图点了。
【讨论】:
感谢编辑:D 是在我的 iPhone 上写的,所以当时无法格式化。以上是关于UIImageView 在矩形中绘制图像大小而不是图像视图的主要内容,如果未能解决你的问题,请参考以下文章