2012-07-18 36 views
1

我有secondViewController可以在橫向和縱向視圖中顯示內容。 MainViewController(secondViewController的父級)只能以橫向模式顯示內容。強制parentView在導航控制器彈出一個子視圖後刷新視圖

當SecondView處於縱向模式並彈出時,MainViewController(應該僅在橫向模式下顯示內容)的視圖以縱向顯示內容。它不會刷新到橫向模式。

有沒有辦法強制MainViewController刷新內容?

在MainViewController的viewWillAppear中的方法,我已經加入setNeedsDisplay和layoutSubviews等

-(void) viewWillAppear:(BOOL)animated { 
    [self.view setNeedsDisplay]; 
    [self.view layoutIfNeeded]; 
    [self.view layoutSubviews]; 
} 

但不重裝視圖。我也嘗試了導航控制器的委託方法 - willShowViewController,但它不工作。

回答

1

看起來如果您刪除視圖並將其重新添加它的工作原理

UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]; 
if (UIDeviceOrientationIsPortrait(orientation)){   
    NSLog(@"force to landscape mode "); 
    UIWindow *window = [[UIApplication sharedApplication] keyWindow]; 
    UIView *view = [window.subviews objectAtIndex:0]; 
    [view removeFromSuperview]; 
    [window addSubview:view];   
} 

您還可以使用CGAffineTransformMakeRotation,但它的旋轉不導航控制器

if (orientation == UIDeviceOrientationPortraitUpsideDown) { 
     [self.view setTransform:CGAffineTransformMakeRotation(M_PI/-2.0)]; 
     //[self.navigationController.view setTransform:CGAffineTransformMakeRotation(M_PI/-2.0)]; 
    } else if (orientation == UIDeviceOrientationPortrait) { 
     [self.view setTransform:CGAffineTransformMakeRotation(M_PI/2.0)]; 
     //[self.navigationController.view setTransform:CGAffineTransformMakeRotation(M_PI/-2.0)]; 
    } 
1

我解決了一個類似的問題,不讓他用戶「回到」另一個視圖,除非應用程序在正確的方向(在這種情況下景觀)。你可以做的是提供你自己的「後退」按鈕,如果視圖是在肖像中,彈出一個警告說,請先旋轉到風景(或更好地從屏幕的底部或頂部動畫一個小視圖)。或者只是隱藏或禁用縱向後退按鈕(我隱藏了按鈕)。

它是一種可怕的用戶界面選擇,讓用戶返回,並在手機處於縱向模式時查看橫向視圖。

+0

上工作添加和刪除視圖也適用。出於某種原因,轉換對navigationController有一些問題。請參閱下面的答案。 – surajz 2012-07-18 22:52:12

+0

因此,用戶是在肖像,你做你的伎倆,他們回去,他們看到一個旋轉90度的視圖,他們無法讀取它。所以他們會說,「哦,哦,哦」,然後他們把手機轉向風景。好吧,如果你對這個罰款感到滿意。對我來說,這是對你的問題的一個可怕的解決方案,但正如他們所說,YMMV。 – 2012-07-19 00:31:19

+0

secondView支持不同的方向,這在查看資源(如pdf)時非常有用。用戶可以根據需要更改secondView的方向。但我明白你的意思。 – surajz 2012-07-19 17:02:44

相關問題