2013-04-03 5 views
7

Sto impostando self.window.rootViewController.modalPresentationStyle = UIModalPresentationCurrentContext; nel mio delegato applicazione in modo che possa presentare un controller di visualizzazione e avere la vista trasparente (vedere questo SO question).Presentazione di un controller di visualizzazione con trasparenza e animazione

Questo funziona benissimo, l'unica osservazione è che non sono in grado di animare quando viene presentato il controller di visualizzazione. Qualcuno l'ha fatto funzionare? In caso contrario, quali altre opzioni ho?

Il controller della vista che sto presentando è un "walkthrough" che consiste in una UIScrollView e UIPageControl che dovrebbe "librarsi" attraverso l'interfaccia in modo da poter vedere lo sfondo di leggermente ai bordi.

risposta

9

ho finito per fare questo:

AppDelegate *appDelegate = [AppDelegate sharedAppDelegate]; 

// Set the root VC modal presentation style 
appDelegate.window.rootViewController.modalPresentationStyle = UIModalPresentationCurrentContext; 

WalkthroughViewController *walkthroughVC = [[WalkthroughViewController alloc] initWithNibName:nil bundle:nil]; 

[self presentViewController:walkthroughVC animated:NO completion:nil]; 

// Manually animate the view 
walkthroughVC.view.alpha = 0; 
[UIView animateWithDuration:0.5 animations:^{ 
     walkthroughVC.view.alpha = 1; 
}]; 

// Reset root VC modal presentation style 
appDelegate.window.rootViewController.modalPresentationStyle = UIModalPresentationFullScreen; 
+0

Ciò è utile anche per me quando richiamo da AppDelegate (ad esempio callback dell'autenticazione di Twitter) e presenta un controller di visualizzazione trasparente. – morph85

0

È possibile utilizzare una vista di contenimento esistente nel controller della vista di base. Invece di presentare una modale, animare il posizionamento della vista di contenimento fino a simulare una presentazione modale.

Per esempio ...

TransparentViewController *viewController = [[TransparentViewController alloc] init]; 
viewController.view.frame = CGRectMake(0, 480, 320, 480); 
self.containmnetView = viewController.view; 

Presentare fare questo:

[UIView animateWithDuration:0.5f animations:^{ 
    self.containmentView.frame = CGRectMake(0, 0, 320, 480); 
}]; 

Spero che questo aiuta.

+0

Hmm hai visto il filo a cui mi riferivo? –

+0

Ah capisco ora, modificato la mia risposta. Spero che questo ti aiuti. –