2012-07-22 29 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範圍內的設備無關網格。

相關問題