Domanda

La mia applicazione iPhone è di navigazione basato e contiene un sacco di-ritratto solo di vista e un paesaggio di sola visualizzazione per la visualizzazione delle immagini. Così mi piacerebbe imporre questa visione del paesaggio solo per ruotare automaticamente al paesaggio, anche se il dispositivo è posizionato in modalità verticale.

ecco cosa I'w fatto in controllore di quella vista:

// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationLandscapeRight); 
}

- (void)viewWillAppear:(BOOL)animated
{
 [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent animated:YES];
 [self.navigationController.navigationBar setBarStyle:UIBarStyleBlackTranslucent];

 AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];

 _originalTransform = [[appDelegate navigationController].view transform];
 _originalBounds = [[appDelegate navigationController].view bounds];
 _originalCenter = [[appDelegate navigationController].view center];

 CGAffineTransform landscapeTransform = CGAffineTransformMakeRotation(degreesToRadian(90));
 landscapeTransform = CGAffineTransformTranslate (landscapeTransform, +80.0, +100.0);

 [[appDelegate navigationController].view setTransform:landscapeTransform];

 [appDelegate navigationController].view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
 [appDelegate navigationController].view.bounds  = CGRectMake(0.0, 0.0, 480.0, 320.0);
 [appDelegate navigationController].view.center  = CGPointMake (240.0, 160.0);

 [UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationLandscapeRight;
 }
}

- (void)viewWillDisappear:(BOOL)animated
{ 
 [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault animated:YES];
 [self.navigationController.navigationBar setBarStyle:UIBarStyleDefault];

 AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
 [[appDelegate navigationController].view setTransform:_originalTransform];
 [[appDelegate navigationController].view setBounds:_originalBounds];
 [[appDelegate navigationController].view setCenter:_originalCenter];

 [UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationPortrait; 
}

Ora ho vista che sempre visualizzato in modalità paesaggio. Ma c'è un problema. Questo punto di vista è posizionato correttamente come mostrato nella questa schermata .

Ho cercato di impostare manualmente il telaio dopo la rotazione, ma non ha aiutato. Inoltre non ho trovato una guida completa su come impostare un punto di vista di essere paesaggio-only. Please help me con questo problema.

È stato utile?

Soluzione

post di questo ragazzo . Fondamentalmente è necessario per trasformare intorno al centro della finestra. Sembra che potrebbe essere necessario ruotare la barra di stato.

Un altro metodo sarebbe quello di utilizzare UIDevice setDeviceOrientation, ma questo è un API privato e quindi non una grande soluzione.

Altri suggerimenti

Prova ad usare questo metodo dopo aver applicato la trasformazione:

[self.view sizeToFit];
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top