2010-09-09 13 views
18

Ero molto emozionato quando ho scoperto quanto sia facile aggiungere ombre alle mie UIViews su iPhone/iPad.L'ombra di disegno con Quartz è lenta su iPhone e iPad. Un altro modo?

Basta aggiungere il quadro in Xcode, aggiungere l'importazione alla parte superiore del file:

#import <QuartzCore/QuartzCore.h> 

Poi più tardi:

self.contentView.layer.shadowRadius = 3.0; 
self.contentView.layer.shadowOffset = CGSizeMake(-2.0, -3.0); 
self.contentView.layer.shadowOpacity = 0.5; 
self.contentView.layer.shadowColor = [UIColor blackColor].CGColor; 

Anche se questo non creare una bella ombra nella mia app, è anche in ritardo quando viene mostrata la vista ... anche quando viene lanciata all'esterno del debugger. C'è qualcosa che sto dimenticando o questo metodo non è pratico per viste più ampie?

Per riferimento, ho postato uno screenshot here.

risposta

53

È necessario impostare shadowPath property. È così che CoreGraphics è in grado di ottimizzare le ombre.

Ad esempio, se il punto di vista è un rettangolo opaco:

self.contentView.layer.shadowPath = [UIBezierPath bezierPathWithRect:self.contentView.bounds].CGPath; 
+0

In effetti, questo è esattamente quello che stavo cercando. Grazie! – Moduspwnens

+0

Per quelli che arrivano qui da Google, però, potresti cambiare i "self.bounds" in "self.contentView.bounds" per abbinare il mio esempio? – Moduspwnens

+0

@Moduspwnens infatti – cobbal

6

pensato che avrei dovuto fare una risposta perché non volevo questo gioiello per ottenere sepolto nei commenti.

In aggiunta alla risposta di cobbal sopra, che ha aiutato molto, occulus ha anche menzionato la seguente ottimizzazione per le ombre non rettangolari, come le ombre di testo.

self.contentView.layer.shouldRasterize = YES; 
// Fix visual degradation when rasterizing on high-density screens: 
self.contentView.layer.rasterizationScale = [[UIScreen mainScreen] scale]; 
Problemi correlati