我有代码可以让我在UIImageView上绘制 - 但我希望能够限制绘图区域。
我已经能够限制大小,但现在我无法定位它:如果我将(0,0)改为其他任何东西,我的图像完全消失并且绘制的能力停止工作
drawImage - 是一个UIImageView
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
mouseSwiped = YES;
UITouch *touch = [touches anyObject];
currentPoint = [touch locationInView:self];
UIGraphicsBeginImageContext(CGSizeMake(560, 660));
[drawImage.image drawInRect:CGRectMake(0, 0, 560, 660)];
CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 5.0);
CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 0, 1, 0, 1);
CGContextBeginPath(UIGraphicsGetCurrentContext());
CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y);
CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), currentPoint.x, currentPoint.y);
CGContextStrokePath(UIGraphicsGetCurrentContext());
[drawImage setFrame:CGRectMake(0, 0, 560, 660)];
drawImage.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
lastPoint = currentPoint;
[self addSubview:drawImage];
}
非常感谢任何帮助
答案 0 :(得分:1)
我不确定我完全明白你要做什么,但我会采取行动:
[drawImage.image drawInRect:CGRectMake(0, 0, 560, 660)];
这告诉分配给drawImage
的图像在0,0
的当前上下文中绘制自己。由于上下文是位图图像上下文,因此其范围将从0,0
到560,660
。在我看来,这可能是你想要做的,否则你的位图中会有空白区域。如果您要将0,0
更改为10,0
,我预计结果位图中会出现10pt宽的空白区域(这看起来很浪费)。
然后你会这样做:
[drawImage setFrame:CGRectMake(0, 0, 560, 660)];
这是在超视图的坐标系中设置UIImageView的坐标。如果您将 0,0
更改为5,5
,我希望您的UIImageView在其超级视图中向下显示5pt并向右显示5pt。
你说你想“限制绘图区域”。我假设你指的是你正在绘制图像的部分。最简单的方法是在绘制之前在位图上下文中设置一个剪辑矩形。例如,如果你想阻止在图像边缘周围的10pt波段绘图,你可以这样做:
UIGraphicsBeginImageContext(CGSizeMake(560, 660));
[drawImage.image drawInRect:CGRectMake(0, 0, 560, 660)];
CGContextClipToRect(UIGraphicsGetCurrentContext(), CGRectMake(10,10,540,640));
CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
// ... and so on
不是100%确定这是否是您正在寻找的,但希望它有所帮助。
答案 1 :(得分:1)
尝试限制currentPoint
if (currentPoint.x <= 20 || currentPoint.x >= 280 ||
currentPoint.y <= 20 || currentPoint.y >= 400)
{
lastPoint = currentPoint;
return;
}