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];
}
對我來說,這似乎是一個錯誤或設計至少差上蘋果公司的一部分 - 絕對不應該有一種觀點在視覺上處於一個位置,而在控制方面則是另一個位置。但我只是想找一種方法來解決這個問題。
看起來舊的控件仍然與原始框架相關聯。因爲你不能直接修改'CGRect',所以如果你想改變這些值的話,我看不出有什麼新的選擇。我同意這看起來很糟糕的設計。我環顧了'UIControl'類的引用,並沒有看到任何將控件與新框架關聯的方法。我能想到的唯一的事情就是使用自動修復功能而不是自定義方法 - 如果這可以用於您的程序。 – Dustin 2012-07-13 15:05:23
絕對使用自動調節彈簧/支撐杆 - 從經驗上講,它比試圖自己編寫更容易,更可靠。 – jwj 2012-07-13 18:16:01