2014-06-12 62 views
0

我已經搜索了幾個小時沒有運氣,所以我來找你們救我在這裏!iOS7 Autoresize當以編程方式切換視圖

顯然,我無法找到正確的信息來說明如何去做這件事(或最好的方法)。我有一個支持縱向和橫向的應用程序(不支持上下顛倒)。不過,縱向和橫向視圖完全不同,所以我需要使用兩個視圖來表示每個視圖。我是否正確地假設我的故事板需要3個視圖控制器(主要的一個,然後是一個用於肖像和一個用於風景?我只用了兩個,但我沒有看到如果我從這個肖像開始怎麼做,並且然後需要加載景觀,我將不得不刪除肖像,這是我的代碼在哪裏?

我的viewcontroller有正確的約束,以保持標籤頂部中心,但是當以編程方式替換或交換視圖時,它似乎自動調整大小不會被調用,我最終通過重置子視圖上的幀來解決這個問題,但現在當設備翻轉時,畫面標籤永遠向右移動,所以我只想知道正確的方法來做到這一點,因爲我相信這不可能是這樣。

至於代碼,我有一個對象 - 視圖 - 控制類以下修改方法......

@interface AMBViewController() 

@property (strong, nonatomic) UIViewController *portraitViewController; 
@property (strong, nonatomic) UIViewController *landscapeViewController; 

@end 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 

    UIApplication *app = [UIApplication sharedApplication]; 
    UIInterfaceOrientation currentOrientation = app.statusBarOrientation; 
    [self doLayoutForOrientation:currentOrientation]; 
} 

-(void) willAnimateRotationToInterfaceOrientation: 
(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { 
    [self doLayoutForOrientation:toInterfaceOrientation]; 
} 

-(void) doLayoutForOrientation:(UIInterfaceOrientation)orientation { 

    if (UIInterfaceOrientationIsPortrait(orientation)) { 
     self.portraitViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"Portrait"]; 

     if (self.landscapeViewController != nil) { 
      [self.landscapeViewController.view removeFromSuperview]; 
      self.landscapeViewController = nil; 
     } 

     self.portraitViewController.view.frame = self.view.bounds; 
     [self.view insertSubview:self.portraitViewController.view atIndex:0]; 
    } else { 
     self.landscapeViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"Landscape"]; 

     if (self.portraitViewController != nil) { 
      [self.portraitViewController.view removeFromSuperview]; 
      self.portraitViewController = nil; 
     } 

     self.landscapeViewController.view.frame = self.view.bounds; 
     [self.view insertSubview:self.landscapeViewController.view atIndex:0]; 
    } 

} 

只是要我的故事板,我有一個空白根控制器(子類AMBViewController)和另外兩個視圖控制器「風景」和「清除縱向「

我也可能會提到,如果您將設備旋轉一整圈(4個右側或4個左側旋轉),標籤只能在縱向視圖中顯示。如果你右轉(現在是倒過來),但然後左轉,它仍然很好。只有當屏幕從右/左景觀翻轉到左/右景觀時纔會出現混亂。真的很奇怪,我知道我必須省略一些重要的東西。

任何幫助,非常感謝。謝謝!

回答

0

解決方案:在找到位於Apple's Dev Site(最後)的指南後,我能夠使用segues和模態窗口提出解決方案。第一個視圖控制器是縱向的,第二個視圖控制器是橫向的,通過模態連接。第一個視圖控制器有以下修改方法:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 

    _isShowingLandscapeView = NO; 

    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 
    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(orientationChanged:) 
               name:UIDeviceOrientationDidChangeNotification 
               object:nil]; 
} 

-(void) orientationChanged:(NSNotification *)notification { 
    UIDeviceOrientation orientation = [UIDevice currentDevice].orientation; 

    if (UIInterfaceOrientationIsPortrait(orientation) && _isShowingLandscapeView 
     && orientation != UIInterfaceOrientationPortraitUpsideDown) { 

     [self dismissViewControllerAnimated:NO completion:nil]; 
     _isShowingLandscapeView = NO; 

    } else if (UIInterfaceOrientationIsLandscape(orientation) && !_isShowingLandscapeView) { 

     [self performSegueWithIdentifier:@"ShowLandscape" sender:self]; 
     _isShowingLandscapeView = YES; 

    } 
} 

感謝所有誰可能已經查看了此!

相關問題