5

UIPopoverBackgroundView をサブクラス化し (このチュートリアルを使用)、UIPopoverController を使用して表示することで、カスタム ポップオーバーを作成しています。残念ながら、カスタム popoverBackgroundViewClass を指定するとすぐに、ネイティブの薄暗い背景が消えます。カスタム UIPopoverBackgroundView を使用するときに背景を淡色表示のままにする方法はありますか? ネイティブの動作をシミュレートするために使用できる他のソリューションはありますか?

4

2 に答える 2

5

カスタムの UIPopoverBackgroundView を実装すると、薄暗い背景が設定されないため、これは良い質問です。この問題を調査する中で、最善の方法は自分で設定することだと判断しました!

ポップオーバー ビューを作成する直前に、ポップオーバーの前にビューに追加される「マスク ビュー」を作成します。このコードには、素敵なフェードイン効果も含まれています。

self.customPopoverMaskView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height)];
    self.customPopoverMaskView.backgroundColor = [UIColor blackColor];
    self.customPopoverMaskView.alpha = 0.3f;

    [UIView transitionWithView:self.view
                      duration:0.3
                       options:UIViewAnimationOptionTransitionCrossDissolve
                    animations:^ {
                        [self.view addSubview:self.customPopoverMaskView];
                    }
                    completion:nil];

ビューを削除するには、ポップオーバー ビューの非表示を処理するメソッドにこれをプラグインします。

[UIView transitionWithView:self.view
                  duration:0.3
                   options:UIViewAnimationOptionTransitionCrossDissolve
                animations:^ {
                    [self.customPopoverMaskView removeFromSuperview];
                }
                completion:nil];

私にとってはうまくいきます。ハッピーコーディング!

アーロン

于 2014-02-12T21:11:09.513 に答える
5

必要なのは、次のコードを initWithFrame: UIPopoverBackgroundView の実装のメソッドに追加することだけです。

UIView *dimView = [[UIView alloc] initWithFrame:CGRectMake(0 - self.frame.origin.x,
                                                           0 - self.frame.origin.y,
                                                           [UIScreen mainScreen].bounds.size.width,
                                                           [UIScreen mainScreen].bounds.size.height)];
dimView.backgroundColor = [UIColor blackColor];
dimView.alpha = 0.15;
dimView.userInteractionEnabled = NO;
[self addSubview:dimView];

デフォルトの Apple 実装と同じように機能します。

于 2014-12-12T22:38:28.760 に答える