【发布时间】:2016-04-08 09:54:17
【问题描述】:
我想知道检测视图变换是否翻转的方法。
我已阅读this question,但没有我期望的答案。
并且还尝试使用CGAffineTransform 的 3 x 3 矩阵进行检测。 但是我不擅长数学和这种矩阵......
所以云任何人请帮助我...
【问题讨论】:
标签: objective-c swift cgaffinetransform
我想知道检测视图变换是否翻转的方法。
我已阅读this question,但没有我期望的答案。
并且还尝试使用CGAffineTransform 的 3 x 3 矩阵进行检测。 但是我不擅长数学和这种矩阵......
所以云任何人请帮助我...
【问题讨论】:
标签: objective-c swift cgaffinetransform
转换不会翻转。一个视图被翻转。为此,应用了转换。所以转换会翻转视图,它本身不会翻转。
因此您可以读取视图的转换并检查它是否是翻转转换。 (x 轴的比例因子为 1,y 轴的比例因子为 -1。)但是有可能对视图应用了许多变换。所以也许,你没有得到“纯粹的”翻转转换。归根结底,这取决于您所说的“翻转”。 180°的旋转是翻转吗? (你真正的问题是什么?)
但是,最稳健的检查方法似乎是获取转换并转换一个点。结果给你一个提示,做了什么。如果 y 坐标的符号发生变化,但 x 坐标的值保持不变,则看起来像翻转。 (在第一个视图上。)
【讨论】:
CGAffineTransform 具有检测这一点的属性,
就像我说的,
aTransformObj.a : 代表scale X
aTransformObj.b : 代表skew Y
aTransformObj.c : 代表skew X
aTransformObj.d : 代表scale Y
aTransformObj.tx : 代表translate x
aTransformObj.ty : 代表translate Y
您可以检查这些值是否为负,
1).a属性值如果是more then 0 to any negative value则水平翻转。
2).d属性值如果是more then 0 to any negative value则垂直翻转。
【讨论】:
d 组件只是矩阵的 [2,2]。对于 180 的旋转,这也是 -1。此外,如果你有翻转和缩放,.d 不是-1,而是另一个负值。正如我在回答中提到的,这个假设只有在你没有进一步转换的情况下才是正确的。