[英]When re-creating a UIViewcontroller's view, how do I force the rotation?
我有一個重復使用的視圖控制器(出於內存限制的原因。)因此,我沒有設置新的UIViewController,而是設置了一些參數,然后強制此VC重新加載其視圖。 代碼是這樣的(由Notification回調觸發):
- (void) reloadView: (NSNotification*) note
{
// Save parameters for reloaded view
UIWindow *window = (UIWindow*) self.view.superview;
//CGAffineTransform xfrm = self.view.transform; // Doesn't do what I want.
// Trash this one & reload the view
[self.view removeFromSuperview];
self.view = nil;
// force view reload
if (self.view == nil)
{
NSLog(@"%s ***** Why didn't self.view reload?!", __PRETTY_FUNCTION__);
}
else
{
// restore params
//self.view.transform = xfrm; // Boo-hoo!
[window addSubview: self.view];
}
}
一切正常, 除了該應用程序僅是橫向應用,並且新加載的視圖作為縱向添加到了Window中。
我試圖將舊視圖的變換強制到新視圖,但是奇怪的是,它給旋轉帶來了愚蠢的平移偏移。
有沒有辦法告訴UIViewController“現在旋轉” ...?
編輯:
我添加了這個相當愚蠢的技巧:
// restore params
self.view.transform = xfrm;
self.view.center = CGPointMake(window.bounds.size.width / 2., window.bounds.size.height / 2.);
[window addSubview: self.view];
這給出了預期的結果,但是我對在代碼庫中有這樣的東西感到非常不滿意。 當然有更好的方法可以做到這一點?!?!
謝謝!
編輯:
經過與JPH的討論,結果答案是“不要那樣做”。 有關某些詳細信息和進行的重新設計,請參見評論。
您的問題是在使用此:
[window addSubview: self.view];
從文檔中:
如果通過以下方法將其他視圖控制器的UIView屬性添加到UIWindow(與主視圖控制器處於同一級別):
[myWindow addSubview:anotherController.view];
這個附加的視圖控制器將不會接收旋轉事件,也永遠不會旋轉。 只有添加到UIWindow的第一個視圖控制器將旋轉。
https://developer.apple.com/library/ios/#qa/qa2010/qa1688.html
我更希望有一個帶有根視圖控制器的設計,並將子視圖添加到根視圖控制器的視圖中。
另一個選擇是不取消視圖並重新添加它,而是更新該視圖中需要更新的所有內容。 我不確定我是否理解您為什么要取消視圖並立即重新添加視圖。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.