6

アプリで新しい (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];
}

かなり簡単です。既に表示されている場合にそれを閉じる場所を除いて、これらは、このまたは任意のポップオーバーにアクセスする唯一の関連する場所です。

4

3 に答える 3

2

backgroundColor を変更してから再度表示する前に、ポップオーバーを閉じることでこの問題を解決しました。

[popover dismissPopoverAnimated:NO];

if ([popover respondsToSelector:@selector(backgroundColor)]) {
    popover.backgroundColor = [UIColor someColor];         
}

[popover setContentViewController:viewController animated:NO];
[popover setPopoverContentSize:CGSizeMake(320.0f, 480.0f) animated:NO];

[popover presentPopoverFromRect:popoverRect
                         inView:self.view
       permittedArrowDirections:UIPopoverArrowDirectionRight
                       animated:NO];

そうすることで、ポップオーバーが再び表示され、不要なトランジション効果が表示されなくなります。

于 2014-02-08T09:54:06.723 に答える