2016-03-23 15 views
10

Sto usando il codice qui sotto per rendere l'ombra per il mio ImageViewIOS: Come fare un ombra per l'UIView su 4 lati (in alto, a destra, in basso ea sinistra)

UIBezierPath *shadowPath = [UIBezierPath bezierPathWithRect:self.avatarImageView.bounds]; 
self.avatarImageView.layer.masksToBounds = NO; 
self.avatarImageView.layer.shadowColor = [UIColor blackColor].CGColor; 
self.avatarImageView.layer.shadowOffset = CGSizeMake(5.0f, 5.0f); 
self.avatarImageView.layer.shadowOpacity = 0.8f; 
self.avatarImageView.layer.shadowPath = shadowPath.CGPath; 

Si scenderà un'ombra nella il giusto e il basso come questa immagine.

enter image description here

Ora voglio fare il mio ImageView hanno anche un ombra in alto ea sinistra. Cosa devo cambiare nel codice? È possibile rendere la vista contiene ombra in alto, a destra, in basso, a sinistra di configurazione solo nel codice o devo creare un'altra vista di layout per l'ombra? Qualsiasi aiuto sarebbe molto apprezzato.

Ecco quello che voglio ottenere
enter image description here

Aggiornamento
Grazie @Dipen Panchasara per dare una soluzione semplice. Segui @Dipen Panchasara (con il colore dell'ombra è nero) avrò l'immagine dell'ombra come questo
enter image description here

risposta

20

Ti piace questa:

float shadowSize = 10.0f; 
UIBezierPath *shadowPath = [UIBezierPath bezierPathWithRect:CGRectMake(self.avatarImageView.frame.origin.x - shadowSize/2, 
                     self.avatarImageView.frame.origin.y - shadowSize/2, 
                     self.avatarImageView.frame.size.width + shadowSize, 
                     self.avatarImageView.frame.size.height + shadowSize)]; 
self.avatarImageView.layer.masksToBounds = NO; 
self.avatarImageView.layer.shadowColor = [UIColor blackColor].CGColor; 
self.avatarImageView.layer.shadowOffset = CGSizeMake(0.0f, 0.0f); 
self.avatarImageView.layer.shadowOpacity = 0.8f; 
self.avatarImageView.layer.shadowPath = shadowPath.CGPath; 

Swift 3 versione:

let shadowSize : CGFloat = 5.0 
    let shadowPath = UIBezierPath(rect: CGRect(x: -shadowSize/2, 
               y: -shadowSize/2, 
               width: self.avatarImageView.frame.size.width + shadowSize, 
               height: self.avatarImageView.frame.size.height + shadowSize)) 
    self.avatarImageView.layer.masksToBounds = false 
    self.avatarImageView.layer.shadowColor = UIColor.black.cgColor 
    self.avatarImageView.layer.shadowOffset = CGSize(width: 0.0, height: 0.0) 
    self.avatarImageView.layer.shadowOpacity = 0.5 
    self.avatarImageView.layer.shadowPath = shadowPath.cgPath 
+0

questo darà l'ombra per 4 lati (in alto: 5, a sinistra: 5, in basso: 10, a destra: 10). lavoro perfetto, grazie –

19

Solo il seguente codice farà il lavoro per il tuo requisito, non è necessario creare UIBezierPath per il percorso shadow.

// *** Set masks bounds to NO to display shadow visible *** 
self.avatarImageView.layer.masksToBounds = NO; 
// *** Set light gray color as shown in sample *** 
self.avatarImageView.layer.shadowColor = [UIColor lightGrayColor].CGColor; 
// *** *** Use following to add Shadow top, left *** 
self.avatarImageView.layer.shadowOffset = CGSizeMake(-5.0f, -5.0f); 

// *** Use following to add Shadow bottom, right *** 
//self.avatarImageView.layer.shadowOffset = CGSizeMake(5.0f, 5.0f); 

// *** Use following to add Shadow top, left, bottom, right *** 
// avatarImageView.layer.shadowOffset = CGSizeZero; 
// avatarImageView.layer.shadowRadius = 5.0f; 

// *** Set shadowOpacity to full (1) *** 
self.avatarImageView.layer.shadowOpacity = 1.0f; 
+0

Qual è il problema nel codice dato? funziona perfettamente. –

+0

Grazie per la tua risposta, ma segui il tuo codice, avrò l'ombra in alto a sinistra. Ma quello che voglio è che io abbia un'ombra in alto a destra in basso a sinistra. Forse lo spiego non molto bene. Molte grazie per il tuo tempo. Io non lo sottovaluta :( –

+0

Ho aggiunto il codice per tutte le 3 possibilità: –

0

CGRectInset (self.avatarImageView.bounds, -10.0, -10.0)

0

Poco meno codice per SWIFT 3:

view.layer.shadowColor = UIColor.black.cgColor 
    view.layer.shadowOpacity = 0.7 
    view.layer.shadowOffset = CGSize.zero 
    view.layer.shadowRadius = 4 
    view.layer.shadowPath = UIBezierPath(rect: planView.bounds).cgPath 
0

Per UIView e ombra aggiunta, ricordarsi di impostare il colore di sfondo per l'UIView.

Se il colore di sfondo è clearColor, non viene visualizzata alcuna ombra.

Problemi correlati