iOS:围绕绘制的路径裁剪?

iOS: Cropping around a drawn path?

我正在使用 ACEDrawingView 在视图中绘图。

我如何检测绘图的宽度和高度,以便我可以围绕它进行裁剪,如下所示:

更新: @Duncan 指出正确的方向后,我能够查看源代码并找到以下内容:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    // save all the touches in the path
    UITouch *touch = [touches anyObject];

    previousPoint2 = previousPoint1;
    previousPoint1 = [touch previousLocationInView:self];
    currentPoint = [touch locationInView:self];

    if ([self.currentTool isKindOfClass:[ACEDrawingPenTool class]]) {
        CGRect bounds = [(ACEDrawingPenTool*)self.currentTool addPathPreviousPreviousPoint:previousPoint2 withPreviousPoint:previousPoint1 withCurrentPoint:currentPoint];

        CGRect drawBox = bounds;
        drawBox.origin.x -= self.lineWidth * 2.0;
        drawBox.origin.y -= self.lineWidth * 2.0;
        drawBox.size.width += self.lineWidth * 4.0;
        drawBox.size.height += self.lineWidth * 4.0;
        self.drawingBounds = bounds; // I added this property to allow me to extract the bounds and use it in my view controller

        [self setNeedsDisplayInRect:drawBox];
    }
    else if ([self.currentTool isKindOfClass:[ACEDrawingTextTool class]]) {
        [self resizeTextViewFrame: currentPoint];
    }
    else {
        [self.currentTool moveFromPoint:previousPoint1 toPoint:currentPoint];
        [self setNeedsDisplay];
    }

}

但是当我测试边界时我得到了这个:

我会继续努力弄清楚,但如果有人能提供帮助那就太好了!

更新 3: 使用 CGContextGetPathBoundingBox 我终于实现了它。

我不熟悉 AceDrawingView class。不过,我可以告诉您如何使用 iOS 框架:

将您的路径创建为 UIBezierPath。

询问路径的边界 属性。

每得到一个touchesMoved,记录下你现在画的点的位置。当你全部完成后,你就拥有了所有的分数。现在查看所有这些点中的最大 x 值和最小 x 值以及最大 y 值和最小 y 值。那是绘图的边界框。

另一种方法(您已经发现)是保存 CGPath,然后调用 CGContextGetPathBoundingBox。基本上这完全一样。

请注意,路径没有厚度,而笔划有。您需要负向插入边界框以允许这样做(我的截屏视频没有这样做)。