2012-07-22 42 views
0

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

每个子视图,以显示具有两个带的NSNumber一个unsigned int范围从-100 (分钟),以对象(最大),其需要被映射到正确的Xÿ坐标定位。

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

回答

1

好吧,所以如果我理解正确,你想在x方向上-100来映射到屏幕上最左边的点,x中的100将映射到屏幕上最右边的点,-100 y方向映射到屏幕上的最低点,在y中映射到100点,以映射到屏幕上的最高点(或者您可能希望从我所拥有的内容中翻转y,以便它与y变成的屏幕坐标系统一致你会得到更低的屏幕?)。 而且我们也想考虑轮换。

据我了解,询问UIScreenheightwidth

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; 

这些都应该由自己进行定向调整(从我的经验,应该肯定,如果工作你会得到heightwidthviewDidAppear:animated:或其他任何东西,UIView也需要是UIViewController的视图属性或这个视图的子视图,如果没有,你必须实现didRotateFromInterfaceOrientation:或找到其他方式来告诉你的视图关于任何旋转)。一旦我们获得了屏幕的“宽度”和“高度”,我们就可以从你的int转换到屏幕位置。试试像这样:

(CGPoint)convertX:(NSNumber *)x andY:(NSNumber *)y intoPoint 
{ 
    pointX = ([x intValue] + 100.0)*width/200.0; 
    pointY = (-[y intValue] + 100.0)*height/200.0; // remove the - sign at the front of the expression for y to grow as you move down the screen 
    return CGPointMake(pointX, pointY); 
} 

将x和y从-100转换为100到屏幕上它们各自的点。

0

如果您使用的范围是+/- 100,那么您可能需要使用底层CALayers来定位您的视图。关于CALayers的一个很好的部分是,它们的锚点映射到笛卡尔平面上从0.0到+1.0范围内的设备无关网格。