UIButton bottom shadow

后端 未结 11 1136
-上瘾入骨i
-上瘾入骨i 2020-12-12 14:14

I have a UIButton which is very similar to the standard iOS keyboard alphabet button.

I am not sure how to create a shadow only for the bottom layer li

相关标签:
11条回答
  • 2020-12-12 14:53

    View bottom shadow 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
    
    0 讨论(0)
  • 2020-12-12 14:54

    You can try with this code:

        LoveButtonOutlet.layer.backgroundColor = UIColor.white.cgColor
        LoveButtonOutlet.layer.cornerRadius = 10
        LoveButtonOutlet.layer.borderWidth = 2
        LoveButtonOutlet.layer.borderColor = UIColor.black.cgColor
        LoveButtonOutlet.layer.shadowOffset = CGSize(width: 0, height: 1)
        LoveButtonOutlet.layer.shadowColor = UIColor.darkGray.cgColor
        LoveButtonOutlet.layer.shadowOpacity = 1
        LoveButtonOutlet.layer.shadowRadius = 5
        LoveButtonOutlet.layer.masksToBounds = false
    
    0 讨论(0)
  • 2020-12-12 14:55

    CornerRadius and shadow don't mix well on the same layer. So you will have to embed your "to be cornered" UIButton inside an UIView. The shadow will be applied on this UIView.

    The following code, given as an example, produces the image below it:

    import 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
            }
        }
    
    }
    
    0 讨论(0)
  • 2020-12-12 15:00

    I have created IBInspectable extension that will help you.

    You can directly assign from 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
                }
            }
        }
    }
    
    0 讨论(0)
  • 2020-12-12 15:05

    Put this method into your UIView extension and play with offset value

    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
        }
    
    0 讨论(0)
提交回复
热议问题