是否可以使我的视图中心等于(0,0)?

Posted

技术标签:

【中文标题】是否可以使我的视图中心等于(0,0)?【英文标题】:Is it possible to make the center of my view equal to (0,0)? 【发布时间】:2011-07-13 21:34:13 【问题描述】:

我正在尝试开发一个使用一些简单的三角函数的应用程序。不幸的是,在 iPhone 上设置坐标系的方式以及许多其他设备中,我的计算都遇到了问题——所有这些都以偏移为中心。

例如,我正在创建的应用程序有一个围绕我的中心运行的小点。不幸的是,因为中心不是(0,0),我不得不在到达中心时进行任何额外的检查以翻转我的坐标(+180度),并在三角函数中添加额外的计算来调整 - - 只是为了说明原始系统是如何工作的。

我希望喜欢设备的中心,在本例中,(160,240) 是我的应用程序的中心原点。例如(160,240) = (0,0) 这意味着,如果我将任何子视图放置在主视图中心的left,则该视图的 X 坐标将为负 X。否则,我' 将不得不通过更多的计算来调整偏移量 - 到目前为止,这已被证明是一个令人头疼的问题。

我已使用编辑器将视图的原点设置为中心。但是,我放在视图上的任何东西仍然保留顶部,左侧 0,0 坐标结构。

这可能吗?我认为我可以将视图的原点设置为中心,它必须做一些有用的事情吗?

【问题讨论】:

【参考方案1】:

您可以使用视图的layersublayerTransform 属性。

myView.layer.sublayerTransform = CATransform3DMakeTranslation(160.0, 240.0, 0.0);

【讨论】:

那么问题来了——如果我要使用 sublayerTransform,主视图上的任何图像视图是否会在保持其位置的同时重新调整到新坐标?所以本质上,如果我有一个 0,0 的图像,它会变成 (-160,-240) 吗? UIView 也有自己的变换属性,所以你不必深入图层。 @George 是的,任何子视图在设置sublayerTransform后都会调整它们的位置。 @Dancreek 不一样。 transform 转换层/视图本身,而sublayerTransform 转换其子层/视图。 澄清一下:如果你在 (0,0) 有一个图像,然后调整 sublayerTransform,坐标仍然是 (0,0),但它会出现在 (160,240)。跨度> 【参考方案2】:

嗯,

查看 UIScreen "Bounds" 属性:

Apple docs

使用这些来计算中心屏幕的转换应该相对简单。

类似:

myView.center = CGPointMake([[UIScreen mainScreen] bounds].size.width/2, [[UIScreen mainScreen] bounds].size.height/2);

取自here

【讨论】:

以上是关于是否可以使我的视图中心等于(0,0)?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Autolayout iOS 在两个视图之上设置视图

在超级视图的中心保持两个可变宽度视图靠近在一起的约束

Unity3D视图中心 ( 视图中心概念 | 围绕游戏物体旋转 | 添加游戏物体到游戏场景的位置 )

集合视图单元格快速滚动到中心时出现问题

设置根视图宽度等于动态标签的宽度

iOS - 使用滚动视图的奇怪约束