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

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

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

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

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

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

【问题讨论】:

    标签: objective-c ios cocoa-touch


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-20
      • 1970-01-01
      • 2016-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多