2013-05-14 67 views
0

我已經給出了使用UITabBarController的UI,並且在標籤ViewControllers之一中,需要相對於標籤指標定位(箭頭爲UIImageView)(箭頭需要指向以x軸爲中心的指標)。我使用基礎數學來模擬基於已知變量的位置,它可以在橫向和縱向方向上適用於iPhone/Pod,但在iPad上無法正常工作(在兩種方向上都有點過分 - 在風景上看起來更糟糕,但可能會只是我的看法)。相對於標籤指標的位置視圖

下面是我用什麼:

int visibleWidth = self.view.frame.size.width; 
int tabBarSize = self.tabBarController.tabBar.frame.size.width; 
int tabSize = tabBarSize/[self.tabBarController.viewControllers count]; 
int tabPosition = 2; // hint should point at the 3rd tab 
int arrowIconWidth = hintIcon.image.size.width; 
int arrowIconHeight = hintIcon.image.size.height; 

int tabEmulationPosition = visibleWidth/2 - tabBarSize/2; 
int tabOffsetPosition = tabEmulationPosition + (tabSize * tabPosition); 
int iconPosition = tabOffsetPosition + (tabSize/2 - arrowIconWidth/2); 

有沒有更好的辦法不是試圖「假」數學(也許getBoundingClientRect類型的方法?)或者是數學接近最好的選擇,假設有一個正確的我有什麼缺陷?

TYIA

回答

0

你數學好起來,似乎只是一個警告:核芯顯卡距離全都型CGFloatint的。請記住,整數除法的工作方式不同使用C比你想象的東西:

int x = 5/2; // x == 2 

因此,通過2.0 CGFloat S和鴻溝取代你int真是讓人大於2

此外,在iPad上的標籤按鈕並不一定均勻地分佈在整個酒吧中,而是在左側和右側有一定的填充。你必須找到一個合適的常量,或者通過實驗找到一種可靠的方法來根據視圖控制器的數量來計算它。

假設一個固定的標籤欄按鈕的寬度,你可以計算偏移量添加到您的圖像的X:

CGFloat tabSize = 
    FIXED_TAB_BUTTON_WIDTH * self.tabBarController.viewControllers.count; 
CGFloat offset = (tabBarSize - tabSize)/2.0; 
+0

感謝您的答覆。我用花車取代了但效果是一樣的。在iPad中,箭頭看起來像是在正確的標籤內,但在最右側。在iPad風景中,它甚至更遠了一點,並且似乎在相鄰標籤指示符的左邊緣。任何其他想法? – momo

+0

也許原因在於標籤欄中的按鈕居中,並且沒有均勻分佈在整個標籤欄上,而是具有兩個頁邊距。你假設它們在你的代碼的第3行中間隔均勻。看到我的編輯解決方案。 – Mundi