找到旋转UIView的给定y的最小x

时间:2017-10-07 16:12:33

标签: ios swift uiview

我用CGAffineTransform改造了一些UIView。现在我想知道在UIView中证明y值时是否有可能获得UIView的最小x点。

例如,在下图中,我想知道y值的最小x值,即视图高度的0.75。

enter image description here

someView.frame.origin.x仅提供左上角位置的x值,但我需要更改该位置以获取给定y值的最小x值。

2 个答案:

答案 0 :(得分:1)

因为UIView总是一个矩形,我想你想跟踪给定y的最小x,只是对于矩形。

<强>解

你可以跟踪UIView的4个顶点的位置,总是你旋转它。只需将2x2旋转矩阵的点数相乘即可完成此跟踪。

| cosθ  -senθ | | x | = | x * cosθ - y * senθ |
| senθ   cosθ | | y |   | x * senθ + y * cosθ |

然后,您可以获得最小 x 的顶点(我们称之为 V1 )。

然后你需要获得最小 x 的其他2个顶点(称为 V2 V3 )。

if V1.y > (given y)
    write linear equation from V1 to vertex with minimum y between V2 and V3
else
    write linear equation from V1 to vertex with maximum y between V2 and V3

最后你会有 f(x)= ax + b

f(x)替换给定的 y ,您得到 x =(y - b)/ a

希望有所帮助:)

答案 1 :(得分:1)

我假设您可以计算旋转方块上的最小X及其对应的Y ..然后,一旦知道方形旋转的角度和边长,则计算X2,Y2,如下图所示(它的毕达哥拉斯定理)..

我使用let rotatedRect = CGRectApplyAffineTransform(rotationTransformation, square.frame)来获取旋转的矩形坐标。然后我比较了所有4个点,找到了具有最小X值的那个点和通过该点的正方形的两条线的方程(一个具有正斜率,另一个具有负斜率)。

如果你有X1,Y1和X2,Y2,X3,Y3,如下图所示,你可以通过替换或消除来计算两条线的拦截,如下所示。

为了简单起见,我假设通过正方形的线的斜率为0(水平线)。

要确定哪个是正确的最小X值,您可以比较X&gt; = X1。如果是,那是满足您要求的最低要求。见下面的例子......

enter image description here