這個想法是處理兩個不同的視圖,具體取決於設備的方向。處理具有兩種不同視圖的視圖控制器的最佳方式:縱向和橫向
基本上,如果我們排除視圖,控制器本身只是一塊代碼。它能夠處理這兩個視圖中的任何一個 - 或者是因爲IBOutlets在兩個IB故事板視圖控制器中具有相同的名稱,或者因爲它針對設備方向使用了if語句。我嘗試了兩種不同的方式來做到這一點,但我仍然面臨着一個問題:我結束了兩個實際的控制器實例,它們中的每一個都運行相同的代碼(因此兩次線程和其他代碼片段同時運行)。
我想擺脫一個,只有一個實例運行。
你會建議什麼?可能有更好的方式來處理我的用例,不是嗎?
我的代碼如下:
- (void)loadControllers
{
self.firstController = (DashboardViewController*)[[self storyboard] instantiateViewControllerWithIdentifier:@"DashboardPortrait" ];
self.firstController.isDashboard = NO;
self.secondController = (DashboardViewController*)[[self storyboard] instantiateViewControllerWithIdentifier:@"DashboardLandscape"];
self.secondController.isDashboard = YES;
}
- (void)viewDidLoad {
[super viewDidLoad];
[self loadControllers];
DashboardViewController *viewController = self.firstController;
[self addChildViewController:viewController];
viewController.view.frame = self.contentView.bounds;
[self.contentView addSubview:viewController.view];
self.currentViewController = viewController;
}
- (void)setOrientationPortrait:(BOOL)portrait {
DashboardViewController *viewController = portrait?self.firstController:self.secondController;
// Make sure the two view controllers share the same parent.
[self addChildViewController:viewController];
// If not same parent, dont transition
if (viewController.parentViewController!=self.currentViewController.parentViewController) return;
[self transitionFromViewController:self.currentViewController
toViewController:viewController
duration:0.0
options:UIViewAnimationOptionTransitionNone
animations:^{
[self.currentViewController.view removeFromSuperview];
viewController.view.frame = self.contentView.bounds;
[self.contentView addSubview:viewController.view];
}
completion:^(BOOL finished) {
[viewController didMoveToParentViewController:self];
[self.currentViewController removeFromParentViewController];
self.currentViewController = viewController;
// Direct video to the destination, current controller
AppDelegate *app = (AppDelegate*)[[UIApplication sharedApplication] delegate];
[app faceRecognitionAttachPreview:self.currentViewController.previewView];
}
];
self.navigationItem.title = viewController.title;
}
可能重複http://stackoverflow.com/questions/15540771/ load-different-xib-files-on-orientation-in-ios) – Marco