0

我有一個UIViewController的子類,當用戶界面旋轉時(例如,最常見的框架是相同的大小和集中在風景和肖像中)改變其框架。當視圖旋轉時,視圖視覺按預期改變其框架。但結束於新框架區域的控件(按鈕,滾動視圖等)不會響應觸摸。唯一能夠迴應的控件是保留在原始框架中的控件(因此,如果視圖向下移動並向左移動,則右上角的控件或控件的某些部分保持響應。)任何想法發生了什麼?旋轉UIViews變得沒有反應

下面是改變幀代碼:

- (void) setLandscape:(bool)bLandscape { 

    if(bLandscape) 
     [self setFrame:m_landscapeFrame]; 
    else 
     [self setFrame:m_portraitFrame]; 
} 

而在直接處理旋轉更大的視圖控制器:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { 

    bool bToLandscape= UIInterfaceOrientationIsLandscape(toInterfaceOrientation); 

    [UIView beginAnimations:NULL context:nil]; 
    [UIView setAnimationDuration:duration]; 

    [m_pCurrentWindowViewController setLandscape:bToLandscape]; 

    // (Some unrelated stuff happens here...) 

    [UIView commitAnimations]; 

} 

對我來說,這似乎是一個錯誤或設計至少差上蘋果公司的一部分 - 絕對不應該有一種觀點在視覺上處於一個位置,而在控制方面則是另一個位置。但我只是想找一種方法來解決這個問題。

+0

看起來舊的控件仍然與原始框架相關聯。因爲你不能直接修改'CGRect',所以如果你想改變這些值的話,我看不出有什麼新的選擇。我同意這看起來很糟糕的設計。我環顧了'UIControl'類的引用,並沒有看到任何將控件與新框架關聯的方法。我能想到的唯一的事情就是使用自動修復功能而不是自定義方法 - 如果這可以用於您的程序。 – Dustin 2012-07-13 15:05:23

+0

絕對使用自動調節彈簧/支撐杆 - 從經驗上講,它比試圖自己編寫更容易,更可靠。 – jwj 2012-07-13 18:16:01

回答

1

我發現的最簡單的解決方法是在willRotateToInterfaceOrientation動畫之後更新didRotateFromInterfaceOrientation中的幀。