相对于屏幕属性的位置子视图

时间:2012-07-22 20:49:36

标签: objective-c ios uiview

我想显示多个小UIViews作为相对于屏幕属性的Subviews。这应该适用于不同的屏幕尺寸(iPad,iPhone)/纵向/横向模式。

要显示的每个子视图都有两个带有unsigned int的NSNumber对象,范围从 -100 (min)到 100 (max),需要映射到正确的<用于定位的strong> x 和 y 坐标。

  • 翻译这些值(-100 ... 100)以使用它们在屏幕上定位UIViews的最佳方法是什么?
  • 如何将它们置于相对而不是绝对的方式,以便代码可以跨屏幕旋转和屏幕尺寸工作?

2 个答案:

答案 0 :(得分:1)

好的,所以如果我理解正确你想要x方向上的-100映射到屏幕上最左边的点,x中的100映射到屏幕上最右边的点,y中的-100映射到屏幕上最低点的方向,以及y中100以映射到屏幕上的最高点(或者你可能希望y与我所拥有的相反,以便它与y变得更大的屏幕坐标系一致你得到的屏幕下方?)。 我们还想考虑轮换。

据我了解,请UIScreen查询heightwidth

CGFloat width = [UIScreen mainScreen].bounds.size.width;
CGFloat height = [UIScreen mainScreen].bounds.size.height;

但这并不考虑轮换。我所知道的唯一另一种方法就是让UIView覆盖屏幕上的widthheight(最简单的说,你可以让你的viewcontroller视图覆盖整个屏幕)。

如果你有一个完全覆盖整个屏幕的UIView(我们称之为myView),你可以尝试:

CGFloat width = myView.frame.size.width;
CGFloat height = myView.frame.size.height;

这些应该自行调整方向(根据我的经验,如果你在height或之后的任何内容中得到widthviewDidAppear:animated:,那么它肯定会有用。还有{{1} }需要是UIView的视图属性或此视图的子视图。如果没有,您将必须实现UIViewController或找到其他方式来告诉您有关任何旋转的视图)。一旦我们拥有屏幕的“宽度”和“高度”,我们就可以将您的int转换为屏幕位置。尝试类似:

didRotateFromInterfaceOrientation:

在x和y中将-100转换为100到屏幕上各自的点。

答案 1 :(得分:0)

如果您正在使用+/- 100的范围,那么您可能希望使用基础CALayers来定位您的视图。关于CALayers的好处是,它们的锚点被映射到设备无关的网格,在笛卡尔平面上的范围从0.0到+1.0。