iPhone横向应用程序视图轴混乱

Posted

技术标签:

【中文标题】iPhone横向应用程序视图轴混乱【英文标题】:iPhone landscape-only app view axis confusion 【发布时间】:2009-04-10 16:51:13 【问题描述】:

使用此处的信息:iPhone Landscape-Only Utility-Template Application 我只能以横向方式启动、使用和维护我的视图。但是,我对轴感到困惑。

绝对轴的行为与预期一样,意味着(0,0)是左上角,(240,0)是顶部中心,(0,320)是左下角等。但是,当我尝试进行计算时与我正在绘制的视图相关,我发现 x,y 的方向就像左上角的肖像是原点一样。所以要在我的视图控制器的中心点画一些东西,我需要做:

CGPoint center = CGPointMake(self.view.center.y, self.view.center.x);

我假设这是因为我的控制器 self.view 引用的 UIView 给出了相对于它的封闭框架的值,这意味着在纵向模式下其轴原点位于左上角的窗口。

是否有一些简单的方法可以解决我遗漏的问题?

文档表明 transform 属性正是我正在寻找的,但是,我在这里遇到了进一步的困惑。涉及 3 个基本属性:

框架 界限 居中

如果我在 viewDidLoad 中这样做:

// calculate new center point
CGFloat x = self.view.bounds.size.width / 2.0;
CGFloat y = self.view.bounds.size.height / 2.0;
CGPoint center = CGPointMake(y, x);

// set the new center point
self.view.center = center;

// Rotate the view 90 degrees counter clockwise around the new center point.
CGAffineTransform transform = self.view.transform;
transform = CGAffineTransformRotate(transform, -(M_PI / 2.0));
self.view.transform = transform;

现在根据参考文档,如果 transform 未设置为身份转换 self.view.frame 未定义。所以我应该使用边界和中心。

self.view.center 现在是正确的,因为我将它设置为我想要的样子。 self.view.bounds 看起来没有改变。 self.view.frame 似乎正是我想要的,但如上所述,引用声称它是无效的。

因此,虽然我可以得到我认为正确的数字,但我担心我忽略了一些关键的事情,以后会变得麻烦。

谢谢。

【问题讨论】:

【参考方案1】:

使用 Quartz 2D,坐标系的原点 (0,0) 位于图形的左下角,而不是左上角。也许这就是你所缺少的。

见:http://developer.apple.com/documentation/graphicsimaging/Conceptual/drawingwithquartz2d/dq_overview/dq_overview.html#//apple_ref/doc/uid/TP30001066-CH202-CJBBAEEC

【讨论】:

感谢您的回答,但根据 iPhone 应用程序开发人员指南中查看几何的部分:developer.apple.com/iphone/library/documentation/iPhone/… 您指出的不是问题 如果你继续阅读它说“虽然 Quartz 使用的坐标系不使用左上角作为原点,但对于许多 Quartz 调用来说这不是问题。[... ] 只有当你使用 Quartz 自己设置绘图环境时,你才需要考虑这些不同的坐标系。”如果您使用 Quartz 手动将内容绘制到屏幕上,那就是答案 :)

以上是关于iPhone横向应用程序视图轴混乱的主要内容,如果未能解决你的问题,请参考以下文章

Iphone:无法从我的横向视图切换回纵向视图

在 iPad 上运行的 iPhone 应用程序中横向视图顶部的 20 像素间隙

iPhone:如何防止视图旋转到横向视图?

iPhone的横向模式下未显示PayPal视图[重复]

自定义横向/纵向视图

iPhone X横向全屏UICollectionViewCell问题