簡體   English   中英

重新創建UIViewcontroller的視圖時,如何強制旋轉?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM