2012-08-09 19 views
5

Chciałbym przedstawić półprzestrzennie kontroler widoku na pełnym ekranie, dzięki czemu nadal będę widzieć pod nim widok. Poniższy kod przedstawia nowy kontroler widoku, ale zastępuje bieżący. Jaki jest najlepszy sposób na zachowanie oryginalnego kontrolera widoku? Widok nowego kontrolera widoku będzie miał półprzezroczyste czarne tło.iOS - presentViewController with transparency

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


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

Odpowiedz

6

Przedstawić półprzezroczysty widok, a nie kontroler widoku.

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

mySemiTransparentView to widok pełnoekranowy. Można animować go na miejscu:

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

To prawda, ale chciałbym użyć kontrolera widoku. – soleil

+0

Nadal można utworzyć instancję UIViewController przez alokację/init, wtedy mySemiTransparentView może być tylko ViewController.view – CSmith

+2

Jeśli nie chcesz, aby wszystko w widoku półprzezroczystym było równe .5 alpha (łącznie z przyciskami itp.), Nie ustawiaj wartości alfa zobacz, ponieważ kaskada przechodzi do wszystkich podskładników. Lepiej jest stworzyć widok tła, który zajmuje cały ekran, który wynosi 5. Alfa, a następnie nakładanie na siebie przycisków i tym podobnych. –

2

można przedstawić półprzezroczystą kontroler modalne w następujący sposób:

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

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

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

tutaj odnotować, że trzeba ustawić stałą UIModalPresentationCurrentContext do siebie .modalPresentationStyle, a nie do newVC .modalPresentationStyle

Ponadto, jeśli używasz UIModalTransitionStyleCrossDissolve alfa z newVC.view zostaną zastąpione w okresie przejściowym, więc jeśli chcesz półprzezroczyste tło trzeba zachować newVC.view „s backgroundColor jasne i po prostu dodać kolejny UIView jako jest to subview z półprzezroczystym backgroundColor

+0

'self.modalPresentationStyle = UIModalPresentationCurrentContext;' lub 'newVC. modalPresentationStyle = UIModalPresentationCustom'i + 1 także dla drugiej części odpowiedzi. Dzięki –