【问题标题】:How to detect CGAffineTransform is flipped?如何检测 CGAffineTransform 是否翻转?
【发布时间】:2016-04-08 09:54:17
【问题描述】:

我想知道检测视图变换是否翻转的方法。

我已阅读this question,但没有我期望的答案。

并且还尝试使用CGAffineTransform 的 3 x 3 矩阵进行检测。 但是我不擅长数学和这种矩阵......

所以云任何人请帮助我...

【问题讨论】:

    标签: objective-c swift cgaffinetransform


    【解决方案1】:

    转换不会翻转。一个视图被翻转。为此,应用了转换。所以转换会翻转视图,它本身不会翻转。

    因此您可以读取视图的转换并检查它是否是翻转转换。 (x 轴的比例因子为 1,y 轴的比例因子为 -1。)但是有可能对视图应用了许多变换。所以也许,你没有得到“纯粹的”翻转转换。归根结底,这取决于您所说的“翻转”。 180°的旋转是翻转吗? (你真正的问题是什么?)

    但是,最稳健的检查方法似乎是获取转换并转换一个点。结果给你一个提示,做了什么。如果 y 坐标的符号发生变化,但 x 坐标的值保持不变,则看起来像翻转。 (在第一个视图上。)

    【讨论】:

      【解决方案2】:

      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,而是另一个负值。正如我在回答中提到的,这个假设只有在你没有进一步转换的情况下才是正确的。
      • 但我们可以用负值检查!如果值为负,则翻转!你觉得不合适?
      • 我不这么认为,因为这仍然可以是旋转或平移。我不认为,您可以检查转换链中的单个转换。仅当您有一个翻转转换时,这才有效。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-16
      • 2023-03-16
      • 1970-01-01
      • 2011-11-29
      • 1970-01-01
      • 2023-03-30
      • 2012-11-08
      相关资源
      最近更新 更多