2011-02-14 62 views
2

我寫了一個應用程序,它有一個UIViewController,它在縱向模式下顯示另一個UIViewController,在橫向時顯示另一個UIViewController。界限]不會改變什麼時候風景

當我走景觀時,我會繪畫/放置東西,所以我需要獲得景觀座標。以下是iPhone旋轉時觸發新視圖的代碼。下面的代碼是如何加載這個視圖。

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)x 
    duration:(NSTimeInterval)duration 
{ 
if (UIInterfaceOrientationIsPortrait(x)) 
{ 
    NSLog(@"Going Portrait"); 

} else if (UIInterfaceOrientationIsLandscape(x)) 
{ 
    NSLog(@"Going Landscape"); 
    if (activeView != [graphViewController view]) 
    { 
     [containerView addSubview:[graphViewController view]]; 
    } 
} 
} 

我的問題是,當

-(void)loadView { 
CGRect screenBounds = [[UIScreen mainScreen] bounds]; 
NSLog(@"GraphViewController: Screenbounds %@", NSStringFromCGRect(screenBounds)); 
} 
在GraphViewController返回

,它產生:GraphViewController:Screenbounds {{0,0},{320,480}}

其是不是景觀co-oridinates,因此我的繪圖是不正確的。 如何使它成爲GraphViewController在調用[UIScreen mainScreen]範圍時有正確的座標];

非常感謝

邁克

回答

1

我覺得你的問題是你已經建立層次結構。它聽起來像是當你添加第二個視圖控制器時,它認爲它是以縱向模式(即使你處於橫向模式)。我認爲將解決您的問題的方法是在您的主視圖控制器和graphviewcontroller中實施

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)orientation 

方法。

但是,我不認爲這是一條好路徑。是否有一個特定的原因,你正在使用uiviewcontrollers而不僅僅是uiviews來顯示不同的接口?

如果你可以去直UIViews,然後就做類似

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)x 
    duration:(NSTimeInterval)duration 
{ 
    if (UIInterfaceOrientationIsPortrait(x)) 
    { 
     NSLog(@"Going Portrait"); 

    } 
    else if (UIInterfaceOrientationIsLandscape(x)) 
    { 
     NSLog(@"Going Landscape"); 
     if (activeView != graphView) 
     { 
      containerView = graphView; 
      //OR 
      [containerView addSubview:graphView]; 
     } 
    } 
} 

我認爲你會從長遠來看更好,但你的選擇。

+0

謝謝 - 我沒有使用ViewControllers的主要原因,但我正在學習,所以你的建議是好的。其中一個視圖將持有UITableView,所以我猜你必須使用ViewController來保存它。 – hydev 2011-02-16 09:05:23

相關問題