2012-08-09 16 views
5

Me gustaría presentar un controlador de vista a pantalla completa de forma semitransparente para que siga viendo la vista debajo de él. El siguiente código presenta el nuevo controlador de vista, pero reemplaza el actual. ¿Cuál es la mejor manera de mantener visible el controlador de vista original? La vista del nuevo controlador de vista tendrá un fondo negro semitransparente.iOS - presente ViewController con transparencia

NewViewController* newVC = [[NSClassFromString(@"NewViewController") alloc] initWithNibName:deviceNib bundle:nil]; 
newVC.modalPresentationStyle = UIModalPresentationFullScreen; 
newVC.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; 


[self presentViewController:newVC animated:YES completion:NULL]; 

Respuesta

6

Presenta una vista semitransparente, no un controlador de vista.

mySemiTransparentView.alpha = 0.0f; 
[self.view addSubview:mySemiTransparentView]; 

mySemiTransparentView es la vista de pantalla completa. Puede animar en su lugar:

[UIView beginAnimations:@"fadeIn" context:nil]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn]; 
[UIView setAnimationDuration:0.4f]; 
mySemiTransparentView.alpha = 0.5f; 
[UIView commitAnimations]; 
+0

Es cierto, pero me gustaría utilizar el controlador de vista. – soleil

+0

Aún puede crear una instancia de su UIViewController a través de alloc/init, luego mySemiTransparentView puede ser su ViewController.view – CSmith

+2

A menos que desee que todo en su vista semitransparente sea .5 alpha (incluidos botones y demás), no configure el alfa del ver, porque se conecta en cascada a todos los subcomponentes. Es mejor que cree una vista de fondo que ocupe toda la pantalla que sea .5 alpha, y luego superponga sus botones y demás. –

2

puede presentar controlador modal semitransparente de la siguiente manera:

NewViewController* newVC = [[NSClassFromString(@"NewViewController") alloc] initWithNibName:deviceNib bundle:nil]; 

self.modalPresentationStyle = UIModalPresentationCurrentContext; 
newVC.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; 

[self presentViewController:newVC animated:YES completion:NULL]; 

Note aquí que usted tiene que establecer la constante UIModalPresentationCurrentContext a auto .modalPresentationStyle, no a nuevoVC .modalPresentationStyle

Además, cuando utiliza UIModalTransitionStyleCrossDissolve el alfa de la newVC.view se anulará durante la transición, así que si quieres fondo semitransparente que necesitará para mantener newVC.view 's backgroundColor clara y simplemente añadir otro UIView como es subvista con semitransparente backgroundColor

+0

'self.modalPresentationStyle = UIModalPresentationCurrentContext;' o 'newVC. modalPresentationStyle = UIModalPresentationCustom'and + 1 también para la segunda parte de su respuesta. Gracias –

Cuestiones relacionadas