相关疑难解决方法(0)

Objective-C检查旋转的UIViews的子视图是否相交?

我不知道从哪里开始.显然CGRectIntersectsRect在这种情况下不起作用,你会明白为什么.

我有一个UIView的子类,里面有一个UIImageView,放在UIView的确切中心:

旋转前的UIView

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

旋转后的UIView

我需要阻止用户使这些UIImageViews相交,但我不知道如何检查两个UIImageViews之间的交集,因为它们的框架不仅不适用于父UIView,而且它们在不影响其框架的情况下旋转.

我尝试的唯一结果是不成功的.

有任何想法吗?

intersection objective-c frame ios separating-axis-theorem

10
推荐指数
1
解决办法
1522
查看次数

在滚动视图内缩放旋转图像以适合(填充)叠加矩阵的帧

通过这个问题和答案,我现在有了一种检测何时任意旋转的图像不完全在裁剪矩形之外的工作方法.

下一步是弄清楚如何正确调整它包含滚动视图缩放,以确保裁剪矩形内没有空格.为了澄清,我想放大(放大)图像; 作物直肠应保持未转化.

布局层次结构如下所示:

containing UIScrollView
    UIImageView (this gets arbitrarily rotated)
        crop rect overlay view
Run Code Online (Sandbox Code Playgroud)

... UIImageView也可以在scrollView中进行缩放和平移.

有4个手势事件需要考虑:

  1. 平移手势(完成):通过检测它是否被错误地平移并重置contentOffset来完成.
  2. 旋转CGAffineTransform
  3. 滚动视图缩放
  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)

objective-c uiscrollview cgaffinetransform ios

7
推荐指数
1
解决办法
1528
查看次数