【问题标题】:Get the current skew angle of an UIView获取 UIView 的当前倾斜角度
【发布时间】:2012-06-13 20:11:07
【问题描述】:

如何获取倾斜图像的当前角度?

我用来歪曲它的代码是:

CGAffineTransform t = CGAffineTransformMake(1.0, 0.0, tan(angle*(M_PI/480)), 1.0, 0.0, 0.0);

【问题讨论】:

    标签: iphone xcode uiview cgaffinetransform skew


    【解决方案1】:

    试试这个:

    CGFloat radians = atan2f([self myview].transform.b, [self myview].transform.a);
    

    有了这个你可以得到任何UIView的当前角度。

    继续摇摆...享受... :)

    【讨论】:

    • 谢谢。胖子
    【解决方案2】:

    你可以试试这样的:

    CGFloat angle = [(NSNumber *)[view valueForKeyPath:@"layer.transform.rotation.z"] floatValue];
    

    【讨论】:

      【解决方案3】:

      试试这个:

      CGFloat skew_c = [(NSNumber *)[view valueForKeyPath:@"layer.transform.c"] floatValue];
      

      Keypath 是猜测的,但应该可以工作。 CGAffineTransformMake docs.

      编辑:

      看起来 CGAffineTransform 被转换为 4x4 CATransform3D 矩阵。

      transformCALayer of CATransform3D 类型的属性。

      这意味着您可以通过以下调用访问m11..m44 参数:

      CGFloat m11 = [(NSNumber *)[view valueForKeyPath:@"layer.transform.m11"] floatValue];
      ...
      ...
      CGFloat m44 = [(NSNumber *)[view valueForKeyPath:@"layer.transform.m44"] floatValue];
      

      您仍然需要进行一些计算才能获得偏斜系数。您可以从 this great answer 推导出 c_factor 的方程式。

      【讨论】:

      • 我还不明白怎么做=(
      • 我也想弄清楚。问题是您提供给CGAffineTransformMake 的参数被转换为不同类型的矩阵,因此您无法通过简单地读取它们来取回它们。 3D projection - Wiki 也很有帮助,但相当复杂。
      • 这是一个看起来很有前途的文件:Matrices, Quartz 2D, CGAffineTransform, CATransform3D
      • 我已经解决了创建自定义 UIView 并向其添加 skewAngle 属性的问题。
      • 恭喜,最简单的解决方案通常是最好的:)
      猜你喜欢
      • 1970-01-01
      • 2016-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-16
      • 2017-05-18
      • 2022-08-18
      相关资源
      最近更新 更多