2011-12-30 82 views
1

我有一個UIViewController在橫向模式顯示UINavigationController縱向。當我使用模態segue連接從視圖控制器獲取導航控制器時,出於某種原因,視圖控制器最初被強制爲縱向(最初時它應該處於橫向)。當我刪除賽格時,事情按預期工作。使用segues自動旋轉視圖

期望的行爲是使用從橫向的界面到縱向的另一個界面的模態漸變。

任何想法這裏發生了什麼?或如何使其按預期工作?

回答

0

使用通知。

-(void)viewWillAppear:(BOOL) animated{ 
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 
[[NSNotificationCenter defaultCenter] addObserver: self selector:@selector(receivedRotate:) name: UIDeviceOrientationDidChangeNotification object: nil]; 
} 

-(void) receivedRotate: (NSNotification*) notification 
{ 
UIDeviceOrientation interfaceOrientation = [[UIDevice currentDevice] orientation]; 
if(interfaceOrientation == UIInterfaceOrientationLandscapeLeft) 
{ 
    [self performSegueWithIdentifier:@"/* Segue from the VCPotrait to VCLandscape*/" sender: self]; 
} 
} 

該segue應該是模態的。

+0

埃姆,我想你是誤會我的問題。我想知道如何在iPhone打開模態視圖控制器時強制iPhone改變方向。我已經知道如何處理由用戶造成的方向。 – 2011-12-31 00:34:53

+0

我想有一個設備方向屬性。這應該使您能夠設置方向。 – Faser 2012-01-01 13:37:38

+0

如果您指的是UIDevice的orientation屬性,那是隻讀的。 – 2012-01-01 19:43:25

0

你的意思是最初的導航控制器被迫縱向?

我已經完成了這與UIViewController子類,其中我有一個視圖控制器在縱向方向,模式賽格視圖控制器橫向。關鍵是在講第二控制器不自轉任何方向,我不想:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft); 
} 

你要繼承的UINavigationController要能設置,我認爲。

的賽格瑞在故事板定義爲模態,並在第一(主持人)視圖控制器代碼看起來非常正常:

-(IBAction) zoomIn:(id)sender { 
    [self performSegueWithIdentifier:@"ZoomIn" sender: self]; 
} 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([[segue identifier] isEqualToString:@"ZoomIn"]) { 
     OSZoomViewController *zoom = [segue destinationViewController]; 
     zoom.image = ...; 
     zoom.presenter = self; 
    } 
}