如何在旋转仿射变换中摆脱这些神奇的数字?

时间:2011-04-18 21:44:12

标签: iphone objective-c rotation cgaffinetransform

我有一个320x460(标准iPhone屏幕)的视图我想要绘制,就好像它是横向模式,虽然手机不是这样的。这似乎是一个简单的任务,我试图通过创建大小为460x320的子视图,然后通过设置视图转换将其旋转90度来解决。这有效,除了旋转的视图没有正确居中。为了“修复”这个,我添加了一个翻译转换,最终看起来像这样:

CGAffineTransform rotate = CGAffineTransformMakeRotation(M_PI / 2.0);
[landscapeView setTransform: CGAffineTransformTranslate(rotate, 70.0, 70.0)];

我不介意进行一些调整转换,但我不知道神奇数字70的来源。我只是玩弄它直到边缘正确匹配。如何通过消除平移变换或从与高度和宽度相关的某些有意义的数学中导出数字来摆脱它们?

2 个答案:

答案 0 :(得分:4)

只是预感,但我猜测在变换之前你将landscapeView的中心设置(或默认)为(160,230)。旋转时,它会保持左上角位置固定。

(320像素宽度 - 460像素宽度)= -140像素。将它分成两半,因为它居中,你得到-70像素。与垂直相同的想法。

答案 1 :(得分:2)

70是宽度和高度之差除以2。 (460 - 320)/ 2.两分之一是观点的中心。