Pergunta

Meu aplicativo para iPhone é baseado em navegação e contém muitas visualizações somente para retratos e uma visão apenas para visualização de imagens. Então, eu gostaria de forçar essa vista apenas para cenário para girar automaticamente para Lanscape, mesmo que o dispositivo esteja posicionado no modo retrato.

Então, aqui está o que eu fiz no controlador dessa visão:

// 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; 
}

Agora eu tenho essa visão sempre mostrada no modo Lanscape. Mas há um problema. Esta visão está posicionada incorretamente como mostrado em Esta captura de tela.

Tentei definir manualmente o quadro após a rotação, mas não ajudou. Além disso, não encontrei um guia completo como definir uma visão para ser apenas para paisagem. Por favor ajude-me com este problema.

Foi útil?

Solução

Confira esse cara publicar. Basicamente, você precisa se transformar ao redor do centro da janela. Parece que você também pode precisar girar a barra de status.

Um método diferente seria usar o Uidevice SetDeviceIentation, mas essa é uma API privada e, portanto, não é uma ótima solução.

Outras dicas

Tente usar este método depois de aplicar a transformação:

[self.view sizeToFit];
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top