2012-02-17 9 views
9

Ho il layout di menu in basso che imita Facebook. Mi piacerebbe avere un dropshadow sul lato sinistro come sotto, tuttavia il codice che sto usando con ombre di livello rende l'applicazione LAGGY. Non sono stato in grado di trovare una buona soluzione alternativa. Qualcuno ha un'alternativa per creare un dropshadow che non influenzi le prestazioni dell'applicazione?iOS: creare un ombretto su un lato

[self.navController.view.layer setShadowOffset:CGSizeMake(0, 1)]; 
[self.navController.view.layer setShadowColor:[[UIColor darkGrayColor] CGColor]]; 
[self.navController.view.layer setShadowRadius:8.0]; 
[self.navController.view.layer setShadowOpacity:0.8]; 

Il codice sopra riportato è il codice attualmente in uso che causa problemi di prestazioni dell'applicazione.

L'immagine seguente è ciò che vorrei ottenere ma senza dover utilizzare il codice precedente.

enter image description here

risposta

10

Essa dovrebbe contribuire per specificare un percorso ombra, per esempio,

CGPathRef shadowPath = [UIBezierPath bezierPathWithRect:self.navController.view.layer.bounds].CGPath; 
[self.navController.view.layer setShadowPath:shadowPath] 

Secondo il CALayer documentation, "Specifica un percorso esplicito di solito migliora le prestazioni di rendering."

+0

Impressionante! questo ha aiutato molto ma comunque noto un po 'di prestazioni, ma non male. – Bot

0

Per conto mio, aggiungerei un UIView contenente quell'ombra come sottoview e riposizionarlo non appena viene animata la vista sul lato destro. (Per esempio disegnare quell'ombra con strati o core grafico)

+0

L'aggiunta di troppe viste ridurrà il compagno di prestazioni –

4

Si può solo inserzione la vista limiti e impostare il percorso dell'ombra:

UIEdgeInsets contentInsets = UIEdgeInsetsMake(10, 0, 0, 0); 
CGRect shadowPathExcludingTop = UIEdgeInsetsInsetRect(self.bounds, contentInsets); 
self.layer.shadowPath = [UIBezierPath bezierPathWithRect:shadowPathExcludingTop].CGPath; 
Problemi correlati