-UIView があります。
-この UIView には、クリックすると UIAlertView が表示される UIButton があります。
-この UIAlertView 内には、クリックすると buttonClicked: を呼び出す別の UIButton があります
。(hourKeyboard はカスタム ビューです)
-(void)buttonClicked:(id)sender
{
if(self.hourKeyboard==nil)
{
self.hourKeyboard = [[HourKeyboardViewController alloc] init];
self.hourKeyboardPopover = [[UIPopoverController alloc] initWithContentViewController:self.hourKeyboard];
}
[self.hourKeyboardPopover presentPopoverFromRect:[sender bounds] inView:sender permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES];
}
通常のポートレート モードでは、これはうまく機能します。ポップオーバーはボタンのすぐ右に生成され、矢印はボタンの左を正しく指しています。
発生する 2 つの問題があります:
1) このポップオーバーが表示されている間、画面を回転させると、ポップオーバーがわずかに正しく回転しません (独自の x および y 位置を再配置しません)
2) ポップオーバーが表示されていない場合。画面を回転させてから「buttonClicked」を呼び出すと、ポップオーバーが表示されますが、ボタンの上に横向きに表示され、ボタンに向かって「下」を指す矢印が表示されます(技術的には、横向きのポップオーバー ビューに対して左)。閉じる場合は、画面を回転させてから「buttonClicked」を呼び出すと、ポップオーバーが逆さまに表示され、ボタンがボタンの「右」を指します (技術的には、横向きのポップオーバー ビューに対して左)。もう一度横向きにしてから、もう一度右向きにすることを繰り返します。
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
私の考え:
1) x と y の位置を変更するだけでよいと思いますが、ポップオーバーを閉じて、ローテーションでもう一度表示する必要があることも読みました。最初の問題が機能するかどうかはわかりますが、2番目の問題の方が心配です。
2) このローテーションの問題を修正する方法がわかりません。ポップオーバーが表示されずに横向きに回転すると見えるようです。そして、presentPopoverFromRect を呼び出すと、誤って iPad がまだ縦長ビューにあると考えてポップオーバーが作成されます。それが与えている動作ですが、iPad がこの間違いをしないようにする方法がわかりません。
-=-=-=-=-=-=-=-=-=
ご協力いただきありがとうございます。
-=-=-
ちょっとした更新:
1) 回転時にメイン ビューからポップオーバーを簡単に閉じることができました。そして、これは誰もがこの問題に対処する一般的な方法のようです.
2) フレームを変更したり、CGAffineTransformMakeRotation を使用したりなど、さまざまなことを試していますが、今のところうまくいきません
-=-=-
別の更新:
2) 多くのテストの後、UIAlertView に直接的な問題があるようです。ビューをUIAlertView内に配置すると(現在実行中)、AlertViewは画面が回転していることをポップオーバーに通知しません...したがって、問題が発生します
これを修正する唯一の方法は、UIAlertView を完全に削除することです。UIAlertView を表示する代わりに、さまざまなバックグラウンド ビューを手動で無効にし (Alert View が行っていたように)、AlertView に酷似したカスタム UIView を表示します。そこから、問題なくポップオーバーを表示できるはずです。私はそれがどのようになるかを教えてあげます。
-=-=-=-=-=-=-=-
最終的解決:
結局、独自のビューを作成し、そのビューに UIAlertView を模倣させました。次に、ポップオーバーを生成したときに、ルート ビュー コントローラーに配置しました。はるかにうまく機能しましたが、事前に作成された UIAlertView の代わりに独自のビューを手動で作成する必要があったため、より多くの作業が必要でした。いずれにせよ、どうやら UIAlertView は UIPopoverover サブビューにそれがどの回転にあるかを伝えるのに失敗したようです。