在我的实验中,我得出以下结论:
YourView.transform = CGAffineTransformMakeRotation( positive value );
将顺时针旋转视图,并且
YourView.transform = CGAffineTransformMakeRotation( Negative value );
将逆时针旋转视图,
但文件说:
旋转仿射变换的角度(以弧度为单位)。在 iOS 中,正值指定逆时针旋转,负值指定顺时针旋转。
这些相互矛盾吗?
在我的实验中,我得出以下结论:
YourView.transform = CGAffineTransformMakeRotation( positive value );
将顺时针旋转视图,并且
YourView.transform = CGAffineTransformMakeRotation( Negative value );
将逆时针旋转视图,
但文件说:
旋转仿射变换的角度(以弧度为单位)。在 iOS 中,正值指定逆时针旋转,负值指定顺时针旋转。
这些相互矛盾吗?
你的困惑是可以理解的。
实际上,正角表示从正 X 轴向正 Y 轴的旋转。负角表示从正 X 轴向负 Y 轴的旋转。
“原生”Core Graphics 坐标系仿照标准笛卡尔坐标系,其中 Y 轴在页面上向上增加。在该系统中,正角表示逆时针旋转:

因此,如果您创建自己的CGContext(例如,通过使用CGBitmapContextCreateor CGPDFContextCreate),旋转将按您的预期工作。
然而,计算机系统在历史上一直使用 Y 轴在页面上向下增加的坐标系。在这样的翻转坐标系中,正角表示顺时针旋转:

请注意,在两个坐标系中,正角度从正 X 轴向正 Y 轴旋转。
事实证明,UIKit 会翻转它为您创建的图形上下文的坐标系。这包括它在发送给您之前设置drawRect:的图形上下文以及它在 中设置的图形上下文UIGraphicsBeginImageContext。(Quartz 2D 编程指南对此进行了解释。)您可以通过查看当前变换矩阵来检查这一点(使用CGContextGetCTM)。你会发现它-1的d元素中有a,这意味着Y轴被翻转了。
AUIView还使用翻转坐标系来布置其子视图,这会影响UIView transform属性的含义。