titlelabel guidelines color buttons ios objective-c uibutton

ios - guidelines - Sombra inferior del botón UIB



menu ios (9)

Asegúrese de establecer también shadowRadius en 0:

Dada una propiedad UIButton llamada button configure sus propiedades de capa de respaldo de esta manera:

self.button.layer.shadowColor = [UIColor grayColor].CGColor; self.button.layer.shadowOffset = CGSizeMake(0, 1.0); self.button.layer.shadowOpacity = 1.0; self.button.layer.shadowRadius = 0.0;

Tengo un UIButton que es muy similar al botón estándar del alfabeto del teclado iOS.

No estoy seguro de cómo crear una sombra solo para la capa inferior, como lo hizo iOS.

Utilizo el siguiente código, pero veo una sombra en todo el lado, no solo en la parte inferior:

CALayer *buttonLayer = [[CALayer alloc] init]; buttonLayer.shadowColor = [UIColor grayColor].CGColor; buttonLayer.shadowOffset = CGSizeMake(0.f,1.f); buttonLayer.masksToBounds = NO; buttonLayer.shadowOpacity = 1.f;

¿Me puede decir cómo lograr el mismo efecto? Gracias por adelantado.


CornerRadius y shadow no se mezclan bien en la misma capa. Por lo tanto, deberá incrustar su UIButton "para ser arrinconado" dentro de una UIView. La sombra se aplicará en esta UIView.

El siguiente código, dado como ejemplo, produce la imagen debajo de él:

importar UIKit

class CustomButton: UIButton { required init(coder decoder: NSCoder) { super.init(coder: decoder) backgroundColor = UIColor.whiteColor() } override func drawRect(rect: CGRect) { updateLayerProperties() } func updateLayerProperties() { layer.masksToBounds = true layer.cornerRadius = 12.0 //superview is your optional embedding UIView if let superview = superview { superview.backgroundColor = UIColor.clearColor() superview.layer.shadowColor = UIColor.darkGrayColor().CGColor superview.layer.shadowPath = UIBezierPath(roundedRect: bounds, cornerRadius: 12.0).CGPath superview.layer.shadowOffset = CGSize(width: 2.0, height: 2.0) superview.layer.shadowOpacity = 1.0 superview.layer.shadowRadius = 2 superview.layer.masksToBounds = true superview.clipsToBounds = false } } }


He creado la extensión IBInspectable que te ayudará.

Puede asignar directamente desde el storyboard

Swift 5

//MARK:- IBInspectable extension UIView { @IBInspectable var cornerRadius: CGFloat { get { return layer.cornerRadius } set { layer.cornerRadius = newValue layer.masksToBounds = newValue > 0 } } @IBInspectable var borderWidth: CGFloat { get { return layer.borderWidth } set { layer.borderWidth = newValue } } @IBInspectable var borderColor: UIColor? { get { return UIColor(cgColor: layer.borderColor!) } set { layer.borderColor = newValue?.cgColor } } @IBInspectable var shadowRadius: CGFloat { get { return layer.shadowRadius } set { layer.masksToBounds = false layer.shadowRadius = newValue } } @IBInspectable var shadowOpacity: Float { get { return layer.shadowOpacity } set { layer.masksToBounds = false layer.shadowOpacity = newValue } } @IBInspectable var shadowOffset: CGSize { get { return layer.shadowOffset } set { layer.masksToBounds = false layer.shadowOffset = newValue } } @IBInspectable var shadowColor: UIColor? { get { if let color = layer.shadowColor { return UIColor(cgColor: color) } return nil } set { if let color = newValue { layer.shadowColor = color.cgColor } else { layer.shadowColor = nil } } } }


Pon este método en tu extensión UIView y juega con el valor de compensación

func drawShadow(shadowColor: UIColor = UIColor.black, opacity: Float = 0.3, offset: CGSize, radius: CGFloat = 5, shouldRasterize : Bool = false) { self.layer.shadowColor = shadowColor.cgColor self.layer.shadowOpacity = opacity self.layer.shadowOffset = offset self.layer.shadowRadius = radius self.layer.shouldRasterize = shouldRasterize }


Puede mezclar las propiedades de cornerRadius y shadow. Lo probé en iOS 8.

C objetivo:

[self.globeButton setImage:[UIImage imageNamed:@"Globe"] forState:UIControlStateNormal]; self.globeButton.backgroundColor = [UIColor colorWithRed:171 green:178 blue:186 alpha:1.0f]; // Shadow and Radius self.globeButton.layer.shadowColor = [[UIColor colorWithRed:0 green:0 blue:0 alpha:0.25f] CGColor]; self.globeButton.layer.shadowOffset = CGSizeMake(0, 2.0f); self.globeButton.layer.shadowOpacity = 1.0f; self.globeButton.layer.shadowRadius = 0.0f; self.globeButton.layer.masksToBounds = NO; self.globeButton.layer.cornerRadius = 4.0f;

Rápido:

globeButton.setImage(UIImage(named: "Globe"), forState: .Normal) globeButton.backgroundColor = UIColor(red: 171/255, green: 178/255, blue: 186/255, alpha: 1.0) // Shadow and Radius globeButton.layer.shadowColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.25).CGColor globeButton.layer.shadowOffset = CGSize(width: 0.0, height: 2.0) globeButton.layer.shadowOpacity = 1.0 globeButton.layer.shadowRadius = 0.0 globeButton.layer.masksToBounds = false globeButton.layer.cornerRadius = 4.0

Resultado:


Puede probar con este código: (lo siento, solo sé rápido, no obj c. Este código agregará sombra inferior en su botón.

button.layer.masksToBounds = false button.layer.shadowColor = UIColor(rgb: 0x000000, alpha: 1.0).CGColor button.layer.shadowOpacity = 1.0 button.layer.shadowRadius = 0 button.layer.shadowOffset = CGSizeMake(0, 1.0)


Ver sombra inferior swift 4.2

viewTop.layer.shadowOffset = CGSize(width: 0, height: 1) viewTop.layer.shadowColor = UIColor.lightGray.cgColor viewTop.layer.shadowOpacity = 1 viewTop.layer.shadowRadius = 5 viewTop.layer.masksToBounds = false


en swift 2.0 agregue sombra uiview (uibutton) con código antes de la declaración de clase o en funciones de archivo swift:

extension UIView { func addShadowView(width:CGFloat=0.2, height:CGFloat=0.2, Opacidade:Float=0.7, maskToBounds:Bool=false, radius:CGFloat=0.5){ self.layer.shadowColor = UIColor.blackColor().CGColor self.layer.shadowOffset = CGSize(width: width, height: height) self.layer.shadowRadius = radius self.layer.shadowOpacity = Opacidade self.layer.masksToBounds = maskToBounds } }

en viewdidload agrega este código

button.addShadowView()


SWIFT 3

import UIKit class ButtonWithShadow: UIButton { override func draw(_ rect: CGRect) { updateLayerProperties() } func updateLayerProperties() { self.layer.shadowColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.25).cgColor self.layer.shadowOffset = CGSize(width: 0, height: 3) self.layer.shadowOpacity = 1.0 self.layer.shadowRadius = 10.0 self.layer.masksToBounds = false } }

!! Solo si no necesita radio de esquina y sombra simultáneamente. De lo contrario, mira this .