1

- 我有一個UIView。
- 這個UIView有一個UIButton,點擊後會出現一個UIAlertView。
- 在這個UIAlertView我有另一個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]; 
} 

在正常的人像模式下,這個效果很好。彈出窗口只在按鈕的右側生成,箭頭正好指向左側的按鈕。

還有那棱2個問題:
1)雖然這酥料餅是可見的,當你旋轉屏幕的酥料餅稍不正確旋轉(不重新定位它自己的x和y位置)
2)如果酥料餅沒有被顯示。如果旋轉屏幕,然後調用「buttonClicked」,則彈出窗口會出現,但是,它會顯示在按鈕上方,箭頭指向按鈕的「向下」(技術上與側向彈出視圖相關)。如果你關閉它,旋轉屏幕,然後調用「buttonClicked」,彈出窗口現在看起來是顛倒的,按鈕指向按鈕的「右側」(再次,技術上與左右彈窗視圖相關)!重複一遍,然後再次右側。

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

我的想法:

1)我相信我可以重新定位x和y,但是,我也讀過你應該關閉popover並在輪換時重新放置。我會看看如果我能得到第一個工作,但我更關心第二個問題。

2)我不知道如何解決這個旋轉問題。看起來,當你旋轉到風景沒有彈出窗口是可見的。然後你打電話給presentPopoverFromRect,彈出窗口是用iPad創建的,認爲它仍然是在縱向視圖中。這就是它給予的行爲,但是,我不知道如何讓iPad不犯這個錯誤。

- = - = - = - = - = - = - = - = - =再次

感謝您的幫助,您可以提供!

- = - = -

稍向更新:
1)這是很容易只是拒絕來自上轉動主視圖的酥料餅。這似乎是每個人處理這個問題的一般方式。

2)試行各種事情諸如改變幀,使用CGAffineTransformMakeRotation,和其他...,但沒有運氣迄今

- = - = -

另一個更新:

2 )經過大量測試後,它似乎是UIAlertView的直接問題。如果我將視圖放在UIAlertView中(目前正在執行),AlertView不會告訴彈出窗口屏幕旋轉...因此產生問題

看起來像解決此問題的唯一方法是放棄UIAlertView完全。我不會顯示UIAlertView,而是手動禁用各種背景視圖(如Alert View正在執行),然後顯示與AlertView類似的自定義UIView。從那裏,我應該能夠顯示popover沒有任何問題。我會讓你知道結果如何。

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

最終解決方案:

我最終只是創造我自己的看法,並具有視圖模仿UIAlertView中。然後,當我產生popover時,我將它放在根視圖控制器中。工作得更好,但需要更多的工作,因爲我必須手動創建自己的視圖,而不是預製的UIAlertView。無論哪種方式,顯然UIAlertView無法告訴UIPopoverover子視圖它的旋轉方式。

回答

1

關閉willRotateToInterfaceOrientation的彈出窗口並在didRotateFromInterfaceOrientation中再次顯示它。

它工作沒有問題。編輯: 對不起,我誤解了你的第二個問題。

如果您的視圖層次結構的某些部分顯示方向不正確,您的一個控制器可能會丟失shouldAutorotateToInterfaceOrientation方法。

+0

是的,這就是我正在做的解決問題1的方法。然而,問題2是當我試圖再次顯示彈出窗口時,它現在顯示橫向(與應該是90度)的彈出窗口。 – Highrule

+0

編輯了答案。 – Sulthan

+0

我在我的主要文章中發佈了我的最終解決方案(提出了自己的觀點來模仿uialertview),但是這篇文章中的信息是我對問題存在原因的總體思考。 – Highrule