18

私の目標は、矢印のオフセットを変更するだけで、UIPopoverControllerの同じ座標を維持することです。だから基本的に私はそれらのそれぞれに触れる3つのボタンがポップオーバーを表示します。このポップオーバーを提示すると、画面上の位置が変わりますが、私はそれを望んでいません。スクリーンショットをより明確に見るには:

ここに画像の説明を入力してください

ここに画像の説明を入力してください

ここに画像の説明を入力してください

4

3 に答える 3

15

私のポップオーバーでは、矢印を中央上部 (デフォルト) ではなく左上にしたかったのです。

popoverLayoutMarginsUIPopoverControllerのプロパティを設定することで、以下の結果 (スクリーンショット) を取得できました。これを使用して、UIPopoverController の内部計算で使用される画面領域を縮小し、ポップオーバーを表示する場所を決定できます。

左側の UIPopovercontroller 矢印

コード:

// Get the location and size of the control (button that says "Drinks")
CGRect rect = control.frame;

// Set the width to 1, this will put the anchorpoint on the left side
// of the control
rect.size.width = 1;

// Reduce the available screen for the popover by creating a left margin
// The popover controller will assume that left side of the screen starts
// at rect.origin.x
popoverC.popoverLayoutMargins = UIEdgeInsetsMake(0, rect.origin.x, 0, 0);

// Simply present the popover (force arrow direction up)
[popoverC presentPopoverFromRect:rect inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];

上記を微調整することで、目的の結果を得ることができると思います。

于 2012-09-17T07:57:30.090 に答える
1

はい、できます。alpha=0.0f で補助ビューを作成し、それを使用して矢印をガイドする必要があります。

例えば:

auxView = [[UIView alloc] initWithFrame:firstButton.frame];
auxView.alpha = 0.0 ;
auxView.userInteractionEnabled = NO;
[firstButton.superView addSubview:auxView];
[auxView release];

では、そのビューを矢印のガイドとして使用してポップオーバーを開きます。

[thePopoverController presentPopoverFromRect:auxView.bounds inView:auxView
            permitedArrowDirections:UIPopoverArrowDirectionLeft animated:YES];

ビューを移動するだけです。

auxView.frame = secondButton.frame;

必要に応じて、その動きにアニメーションを使用します。

もう1つ、この種のボタンへの矢印では、矢印がボタンに触れている方が好きです。以下を使用できます。

presentPopoverFromRect:CGRectInset(auxView.bounds, 4.0, 4.0)
于 2012-07-05T06:09:24.340 に答える
1

Apple の組み込み UIPopoverViewController クラスをそのまま使用することはできません。しかし、独自のポップオーバー ビュー コントローラーを実装するのはかなり単純で論理的である必要があります (いくつかの非常に基本的な 2D ジオメトリと、UIView のドキュメントを少し掘り下げるだけです)。

于 2012-07-05T05:59:18.817 に答える