我对使用 Cocoa 绘图非常陌生,并且正在开发一个涉及六边形网格的实验性应用程序。为了简化这一点,我想倾斜坐标系,使 Y 轴向左旋转 30 度。我在 Apple 的Cocoa Drawing Guide中遇到了这个,这表明它是可能的:
将非均匀缩放变换与旋转变换相结合也可以使您的内容产生倾斜效果。
但是,我无法理解这是如何工作的,也无法找到任何示例。
如何设置 NSAffineTransform 以使 X 轴保持水平而 Y 轴逆时针旋转 30 度?
我对使用 Cocoa 绘图非常陌生,并且正在开发一个涉及六边形网格的实验性应用程序。为了简化这一点,我想倾斜坐标系,使 Y 轴向左旋转 30 度。我在 Apple 的Cocoa Drawing Guide中遇到了这个,这表明它是可能的:
将非均匀缩放变换与旋转变换相结合也可以使您的内容产生倾斜效果。
但是,我无法理解这是如何工作的,也无法找到任何示例。
如何设置 NSAffineTransform 以使 X 轴保持水平而 Y 轴逆时针旋转 30 度?
不幸的是,没有像变换、旋转等那样简单的方法。
您必须创建一个变换矩阵:
0 tan(skewy) 0
tan(skewx) 0 0
0 0 1
setTransformStruct:
与 一起使用NSAffineTransformStruct
:
typedef struct _NSAffineTransformStruct {
CGFloat m11, m12, m21, m22;
CGFloat tX, tY;
} NSAffineTransformStruct;
对于倾斜,m11、m22、tx 和 ty 为零;m12 是棕褐色(歪斜),m21 是棕褐色(歪斜)
在 Apple 的文档中有更多关于矩阵的信息:https ://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaDrawingGuide/Transforms/Transforms.html#//apple_ref/doc/uid/TP40003290- CH204-BCIIICJI
希望这可以帮助!