Ho creato un'app di test per familiarizzare con l'impostazione di un controller di visualizzazione contenitore personalizzato. Se ruoto il dispositivo quando l'app viene avviata per la prima volta o dopo il passaggio a un altro controller di visualizzazione, la nuova vista viene ridimensionata per occupare l'intero schermo, come previsto. Tuttavia, se ruoto dopo l'avvio dell'app e poi passa a un nuovo controller di visualizzazione, la vista mantiene le dimensioni del suo ritratto anziché diventare più corte e più larghe (in realtà è leggermente diverso - passa da 320.460 a 300.480). Il controller della vista principale è assegnato init'd nel delegato dell'app (senza xib) e impostato come controller della vista radice della finestra. Ecco il codice che ho nel mio MasterViewController (il controller contenitore personalizzato):Visualizzazioni non ridimensionate dopo la rotazione in controller contenitore personalizzato
- (void)viewDidLoad {
[super viewDidLoad];
WelcomeController *welcome = [[WelcomeController alloc] initWithNibName:@"ViewController" bundle:nil];
self.currentController = welcome;
[self addChildViewController:welcome];
[self.view addSubview:welcome.view];
UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeLeft:)];
swipeLeft.direction = UISwipeGestureRecognizerDirectionLeft;
[self.view addGestureRecognizer:swipeLeft];
}
- (void)swipeLeft:(UISwipeGestureRecognizer *)gesture {
if (gesture.state == UIGestureRecognizerStateRecognized) {
UIActionSheet *sheet =[[UIActionSheet alloc] initWithTitle:@"Select A Destination" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"welcome",@"Play",@"Scores", nil];
[sheet showInView:self.view];
}
}
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
switch (buttonIndex) {
case 0:{
if ([self.currentController class] != [WelcomeController class]) {
WelcomeController *welcome = [[WelcomeController alloc] initWithNibName:@"ViewController" bundle:nil];
[self addChildViewController:welcome];
[self moveToNewController:welcome];
}
break;
}
case 1:{
if ([self.currentController class] != [PlayViewController class]) {
PlayViewController *player = [[PlayViewController alloc] initWithNibName:@"PlayViewController" bundle:nil];
[self addChildViewController:player];
[self moveToNewController:player];
}
break;
}
case 2:{
if ([self.currentController class] != [HighScores class]) {
HighScores *scorer = [[HighScores alloc] initWithNibName:@"HighScores" bundle:nil];
[self addChildViewController:scorer];
[self moveToNewController:scorer];
}
break;
}
case 3:
NSLog(@"Cancelled");
break;
default:
break;
}
}
-(void)moveToNewController:(id) newController {
[self.currentController willMoveToParentViewController:nil];
[self transitionFromViewController:self.currentController toViewController:newController duration:.6 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{}
completion:^(BOOL finished) {
[self.currentController removeFromParentViewController];
[newController didMoveToParentViewController:self];
self.currentController = newController;
}];
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return YES;//(interfaceOrientation == (UIInterfaceOrientationPortrait | UIInterfaceOrientationLandscapeLeft));
}
Tutte le idee perché questo sta accadendo (non so se questo significa che vista la visualizzazione del controller master non è il ridimensionamento, ma quando ottengo questo comportamento non ridimensionante, il riconoscimento dei gesti risponde solo nella vista ristretta, non nell'intero schermo)?
Ho scoperto che se uso un file xib e alloco initWithNibName: bundle: invece di solo init, funziona correttamente. Quindi, sembra avere qualcosa a che fare con la vista che si ottiene quando si fa init. Quando registro la vista, tuttavia, sembra la stessa sia dal init semplice che dal file xib - entrambi hanno lo stesso frame e lo stesso autorize = W + H – rdelmar
definiscono automaticamente il metodo di virtualizzazione 'UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight' – yasirmturk