检查CGRect是否包含在另一个(转换的)rect中



我正在实现一个裁剪功能,并试图弄清楚如何测试裁剪矩形是否完全包含在转换后的图像视图中。即在图像的裁剪部分中不应该存在空白。

我已尝试复制此组件中实现的行为:https://github.com/heitorfr/ios-image-editor,它实现了类似的检查(见下文),但我无法使它适用于我的情况。

- (void)checkBoundsWithTransform:(CGAffineTransform)transform
{
    CGRect r1 = [self boundingBoxForRect:self.preview.cropRect 
                        rotatedByRadians:[self imageRotation]];
    Rectangle r2 = [self applyTransform:transform 
                                 toRect:self.preview.initialImageFrame];
    CGAffineTransform t = 
     CGAffineTransformMakeTranslation(CGRectGetMidX(self.preview.cropRect), 
                                      CGRectGetMidY(self.preview.cropRect));
    t = CGAffineTransformRotate(t, -[self imageRotation]);
    t = CGAffineTransformTranslate(t, 
                                   -CGRectGetMidX(self.preview.cropRect), -
                                   CGRectGetMidY(self.preview.cropRect));
    Rectangle r3 = [self applyTransform:t toRectangle:r2];
    if(CGRectContainsRect([self CGRectFromRectangle:r3],r1)) {
        self.validTransform = transform;
    }
}

不是性能最好的解决方案,但速度很快,很脏。

NSBezierPath *path = [NSBezierPath bezierPathWithRect:r2];
[path transformUsingAffineTransform:t];
if([path containsPoint:NSMinX(r1)] 
    && [path containsPoint:NSMinY(r1)] 
    && [path containsPoint:NSMaxX(r1)] 
    && [path containsPoint:(NSMaxY(r1)] ){
    self.validTransform = transform;
}

最新更新