【发布时间】: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
如何获取倾斜图像的当前角度?
我用来歪曲它的代码是:
CGAffineTransform t = CGAffineTransformMake(1.0, 0.0, tan(angle*(M_PI/480)), 1.0, 0.0, 0.0);
【问题讨论】:
标签: iphone xcode uiview cgaffinetransform skew
试试这个:
CGFloat radians = atan2f([self myview].transform.b, [self myview].transform.a);
有了这个你可以得到任何UIView的当前角度。
继续摇摆...享受... :)
【讨论】:
你可以试试这样的:
CGFloat angle = [(NSNumber *)[view valueForKeyPath:@"layer.transform.rotation.z"] floatValue];
【讨论】:
试试这个:
CGFloat skew_c = [(NSNumber *)[view valueForKeyPath:@"layer.transform.c"] floatValue];
Keypath 是猜测的,但应该可以工作。 CGAffineTransformMake docs.
编辑:
看起来 CGAffineTransform 被转换为 4x4 CATransform3D 矩阵。
transform 是 CALayer 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 也很有帮助,但相当复杂。