0

を使用する UI が与えられておりUITabBarController、タブ付きの 1 つでViewControllersView(a としての矢印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型メソッドですか?) または、私が持っているものに修正可能な欠陥があると仮定して、数学アプローチが最善の策ですか?

ティア

4

1 に答える 1

0

1 つの注意点を除いて、あなたの計算は問題ないようです。Core Graphics の距離はすべてタイプCGFloatnotintです。C での整数除算の動作は、予想とは異なることに注意してください。

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

intしたがって、 s をsに置き換え、CGFloat2 ではなく 2.0 で割ります。

また、iPad では、タブ ボタンは必ずしもバー全体に均等に配置されているわけではなく、左右に一定のパディングがあります。適切な定数を見つけるためにいじる必要があるか、View Controllerの数に基づいて信頼できる計算方法を実験的に見つける必要があります。

タブ バー ボタンの幅が固定されていると仮定すると、画像の x に追加するオフセットを計算できます。

CGFloat tabSize = 
   FIXED_TAB_BUTTON_WIDTH * self.tabBarController.viewControllers.count;
CGFloat offset = (tabBarSize - tabSize) / 2.0;
于 2013-05-14T19:35:16.800 に答える