我不知道从哪里开始.显然CGRectIntersectsRect在这种情况下不起作用,你会明白为什么.
我有一个UIView的子类,里面有一个UIImageView,放在UIView的确切中心:

然后我旋转自定义UIView以维持内部UIImageView的框架,同时仍然能够执行CGAffineRotation.结果框架看起来像这样:

我需要阻止用户使这些UIImageViews相交,但我不知道如何检查两个UIImageViews之间的交集,因为它们的框架不仅不适用于父UIView,而且它们在不影响其框架的情况下旋转.
我尝试的唯一结果是不成功的.
有任何想法吗?
通过这个问题和答案,我现在有了一种检测何时任意旋转的图像不完全在裁剪矩形之外的工作方法.
下一步是弄清楚如何正确调整它包含滚动视图缩放,以确保裁剪矩形内没有空格.为了澄清,我想放大(放大)图像; 作物直肠应保持未转化.
布局层次结构如下所示:
containing UIScrollView
UIImageView (this gets arbitrarily rotated)
crop rect overlay view
Run Code Online (Sandbox Code Playgroud)
... UIImageView也可以在scrollView中进行缩放和平移.
有4个手势事件需要考虑:
据我所知,我应该能够使用相同的逻辑2,3和4来调整滚动视图的zoomScale,以使图像正确匹配.
如何正确计算使旋转的图像完全适合裁剪矩形所需的缩放比例?
为了更好地说明我想要完成的任务,这里是一个不正确大小的示例:

我需要计算必要的缩放比例,使它看起来像这样:

这是我到目前为止使用的Oluseyi解决方案的代码.当旋转角度很小(例如小于1弧度)时,它可以工作,但除此之外的任何东西都会变得非常不稳定.
CGRect visibleRect = [_scrollView convertRect:_scrollView.bounds toView:_imageView];
CGRect cropRect = _cropRectView.frame;
CGFloat rotationAngle = fabs(self.rotationAngle);
CGFloat a = visibleRect.size.height * sinf(rotationAngle);
CGFloat b = visibleRect.size.width * cosf(rotationAngle);
CGFloat c = visibleRect.size.height * cosf(rotationAngle);
CGFloat d = visibleRect.size.width * sinf(rotationAngle);
CGFloat zoomDiff = MAX(cropRect.size.width / (a + b), cropRect.size.height / (c + d)); …Run Code Online (Sandbox Code Playgroud)