ios - 检查 CGRect 是否包含在另一个(转换后的)矩形中

标签 ios objective-c computational-geometry cgaffinetransform

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

我已尝试复制此组件中实现的行为: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;
}

关于ios - 检查 CGRect 是否包含在另一个(转换后的)矩形中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23247919/

相关文章:

ios - 如何使用 xcassets 构建框架

iphone - 使用带有动态呈现项目的 UIScrollView 消除滚动延迟

java - 如何在扫描线算法中检测正确的端点

c# - 生成复杂(非凸)多面体 UV 贴图

ios - 在同一个 .m 中声明了两个不同的实现,并重复声明了(不同!)方法

ios - 选择 UITableView 中的所有行,并在数组中附加标签

ios - 调用 topLayoutGuide 会完全中断滚动吗?

objective-c - 用两个参数在主线程上执行选择器的好方法?

iphone - 可接受的滚动 FPS 是多少?提高性能的技巧是什么?

math - 如何计算逆运动学