1

- 私はUIViewを持っています。
- このUIViewにはUIButtonがあり、クリックするとUIAlertViewが表示されます。
- このUIAlertViewでは、buttonClickedを呼び出したときに別のUIButtonが表示されます。buttonClicked:
- このbuttonClicked:メソッドでは、カスタムビューでpresentPopoverFromRectを呼び出します。 (hourKeyboardはカスタムビューです)presentPopoverFromRectは、回転時に横向きにポップアップを表示しています。

-(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]; 
} 

通常のポートレートモードでは、これは素晴らしいです。ポップオーバーは、ボタンのすぐ右側にあり、矢印がボタンの左を正しく指しています。

arrises 2つの問題があります:
1)このポップオーバーが表示されている間、あなたは画面を回転させたときにポップオーバーがわずかに誤って回転(それが自身のxとyの位置です再配置されません)
2)ポップオーバーの場合は、表示されていません。画面を回転させて "buttonClicked"を呼び出すと、ポップオーバーが表示されますが、ボタンの上に横向きに表示され、矢印の方向がボタンに向かって "下"を指しています(技術的には横向きのポップオーバービューに対して)。それを却下して画面を回転させ、 "buttonClicked"を呼び出すと、ポップオーバーが上下逆に表示され、ボタンが "右"を指している(やはり、技術的には横向きのポップオーバービューに対して)。それをもう一度横にしてから、もう一度右にしてください。

- = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = -

私の思考:

1)私はちょうどxとyの位置を変えることができると信じていますが、私はまた、あなたがポップオーバーを却下して、それを回転でもう一度提示するべきであることを読んだことがあります。私は最初のものを稼働させることができるかどうかを見ていきますが、私は第2の問題をより心配しています。

2)私は、この回転問題を解決する方法は考えています。あなたが見えているポップオーバーなしで風景に回転するとき、それはそうです。そしてpresentPopoverFromRectを呼び出すと、PopoverはiPadで作成され、間違いなくポートレート表示になっていると思っています。それはそれが与えている振る舞いですが、iPadをこのようなミスをしないようにする方法がわかりません。

- = - = - = - = - = - = - = - = - =

おかげで再び任意の助けのためにあなたを提供することができます!

- = - = -

わずか更新:
1)ちょうど回転のメインビューからポップオーバーを却下するのは簡単でした。そして、これは誰もがこの問題を扱う一般的な方法のようです。

2)など、フレームを変更CGAffineTransformMakeRotationを使用して、および他のようないろいろなものを試していない...しかし、これまで運

- = - = -

別の更新:

2 )多くのテストの後、UIAlertViewの直接の問題と思われます。 (現在行っている)UIAlertView内にビューを配置すると、AlertViewは、画面が回転していることをポップオーバーに通知しません。したがって、問題が発生します。

これを修正する唯一の方法は、UIAlertView完全に。UIAlertViewを表示する代わりに、(Alert Viewのように)さまざまなバックグラウンドビューを手動で無効にし、AlertViewと同様のカスタムUIViewを表示します。そこから、私は何の問題もなくポップオーバーを表示できるはずです。私はそれがどのように判明したのか分かります。

- = - = - = - = - = - = - = -

最終解決:

私はちょうど私の自身のビューを作成し、そのビューを持つことになったUIAlertViewを模倣します。私がポップオーバーを生成したとき、私はそれをルートビューコントローラに配置しました。私は手動でUIAlertViewの代わりに独自のViewを作成しなければならなかったので、より多くの作業が必要でした。いずれにせよ、UIAlertViewは、UIPopoveroverサブビューに何回転しているかを伝えることに失敗します。

答えて

1

willRotateToInterfaceOrientationにポップオーバーを閉じて、didRotateFromInterfaceOrientationに再度表示します。

問題なく動作します。

編集: 申し訳ありませんが、私はあなたの2番目の問題を誤解しました。

ビュー階層の一部が不正な方向で表示される場合、コントローラの1つにおそらくshouldAutorotateToInterfaceOrientationメソッドがありません。

+0

問題1を解決する方法として私がやっているのですが、問題2は、ポップオーバーをもう一度表示しようとしたときに、横にポップオーバーを表示しています(90度になるはずです)。 – Highrule

+0

答えを編集しました。 – Sulthan

+0

私は最終的な解決策を私のメインポストに掲載しました(私の見解を真似してuialertviewを模倣しました)が、このポストの情報は私の一般的な考え方です。 – Highrule

関連する問題