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