アプリで新しい (iOS 7 の) UIPopoverController.backgroundColor 設定を使用して、必要に応じてポップオーバーの色を変更していますが、この設定を使用すると、アプリを開くたびに色の変化の「フラッシュ」が発生することがわかりました。ポップオーバー -- 約 0.5 秒で、デフォルトの半透明の白から始まり、選択した色にフェードします。これは望ましくありません。開いたときに設定した色になるはずです。
ドキュメントには次のように記載されています。
このプロパティを使用して、ポップオーバーの背景色をカスタマイズします。ポップオーバーが表示されている間にこのプロパティの値を変更すると、新しい色へのアニメーションの切り替えがトリガーされます。このプロパティのデフォルト値は nil で、デフォルトの背景色に対応します。
ただし、アプリを開いたときに設定し、再度設定しなくても、ポップオーバーを開くたびに点滅します。
私は UIPopoverBackgroundView を使用することにオープンですが、アプリ内のすべてのポップオーバーのスタイルを変更するための静的なソリューションのように見えるため、オンザフライで背景色を変更できるかどうかはわかりません。ご提案いただきありがとうございます。
編集(コード):
メイン ビュー コントローラーが読み込まれ、UI の残りの部分が準備されているとき (これは多くのポップオーバー初期化の 1 つです):
fileOptionsController = [[FileOptionsViewController alloc] initWithNibName:@"FileOptionsViewController" bundle:nil];
fileOptionsController.delegate = self;
self.fileOptionsPopoverController = [[UIPopoverController alloc] initWithContentViewController:fileOptionsController];
[popoverControllers addObject:self.fileOptionsPopoverController];
ポップオーバーが初期化された後、backgroundColor の設定と相互作用の間の長い遅延をテストする目的で、これを実行しています (まだメインの初期化コードで) (注: アルファを変更しても効果はなく、1 に設定すると引き続き発生します) ):
for (UIPopoverController *po in popoverControllers) {
[po setBackgroundColor:[UIColor colorWithWhite:0.3f alpha:0.90f]];
}
次に、ユーザーがボタンをタップしてポップオーバーを表示すると、これが呼び出されます。
- (void)showPopover:(UIPopoverController *)popover from:(UIButton *)btn {
[popover presentPopoverFromRect:CGRectMake(btn.frame.origin.x + 5.0f, btn.frame.origin.y - 1.0f, btn.frame.size.width, btn.frame.size.height) inView:btn.superview permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES];
}
かなり簡単です。既に表示されている場合にそれを閉じる場所を除いて、これらは、このまたは任意のポップオーバーにアクセスする唯一の関連する場所です。