ios uiview

uikit ios



IOS: cómo hacer una sombra para UIView en 4 lados(arriba, derecha, abajo e izquierda) (7)

// Si has probado esto antes, sabes exactamente lo que sucede. Las esquinas serán redondeadas, pero faltará la sombra. Si establece masksToBounds en falso, la sombra aparecerá, pero las esquinas no se redondearán. // para obtener la Sombra con el radio de la esquina Agregue una súper vista para la vista del contenedor con un color claro y aplique la sombra para la súper vista, Aplique el radio de la esquina para la vista del contenedor. intentalo.

//view to apply shadow and corner radius containerView.layer.cornerRadius = 3 containerView.clipsToBounds = true //superview of container View for to apply shadow shadowView.layer.shadowOpacity = 0.1 shadowView.layer.shadowRadius = 2.0 shadowView.layer.masksToBounds = false shadowView.layer.shadowOffset = CGSize.zero shadowView.layer.shadowColor = UIColor.Black.cgColor shadowView.layer.shadowPath = UIBezierPath(roundedRect:containerView.bounds, cornerRadius: containerView.layer.cornerRadius).cgPath shadowView.layer.shouldRasterize = true

Estoy usando el código de abajo para hacer la sombra de mi ImageView

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;

Caerá una sombra en la parte derecha e inferior como esta imagen.

Ahora quiero que mi ImageView también tenga una sombra en la parte superior e izquierda. ¿Qué debo cambiar en el código? ¿Es posible hacer que la vista contenga la sombra en la parte superior, derecha, inferior, izquierda por la configuración solo en el código o necesito crear otra vista de diseño para la sombra? Cualquier ayuda sería muy apreciada.

Esto es lo que quiero lograr.

Actualizar
Gracias a @Dipen Panchasara por dar una solución simple. Sigue a @Dipen Panchasara (con el color de la sombra es negro) Tendré la imagen de la sombra como esta


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


Me gusta esto:

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;

Versión Swift 3 :

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


Para UIView y Agregar sombra, recuerde establecer el color de fondo en UIView.

Si el color de fondo es claro, no aparece ninguna sombra.


Poco menos código para 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


Solo el siguiente código hará el trabajo para su requerimiento. No necesita crear UIBezierPath para la ruta de la sombra.

// *** 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;


**in swift 4** yourView.clipsToBounds = true yourView.layer.cornerRadius = 20 yourView.layer.shadowPath = UIBezierPath(roundedRect: self.yourView.bounds, cornerRadius: self.DeletConversation.layer.cornerRadius).cgPath yourView.layer.shadowColor = UIColor(hexString: "color")?.cgColor DeletConversation.layer.shadowOpacity = 1 DeletConversation.layer.shadowOffset = CGSize(width: 0, height: 1.0) DeletConversation.layer.shadowRadius = 1 DeletConversation.layer.masksToBounds = false