|
import UIKit |
|
|
|
class RoundBorderedShadowButton: UIButton { |
|
|
|
// Customize your button here |
|
let fillColor: UIColor = .white |
|
let highlightedFillColor: UIColor = .lightGray |
|
let borderColor: UIColor = .gray |
|
let borderWidth: CGFloat = 0.5 |
|
let shadowColor: UIColor = .lightGray |
|
let shadowOffset: CGSize = CGSize(width: 0, height: 4) |
|
let shadowRadius: CGFloat = 15 |
|
let shadowOpacity: Float = 1 |
|
|
|
|
|
override init(frame: CGRect) { |
|
super.init(frame: frame) |
|
|
|
setup() |
|
} |
|
|
|
required init?(coder: NSCoder) { |
|
super.init(coder: coder) |
|
|
|
setup() |
|
} |
|
|
|
override var isHighlighted: Bool { |
|
didSet { |
|
if isHighlighted { |
|
shadowLayer.fillColor = highlightedFillColor.cgColor |
|
shadowLayer.borderColor = highlightedFillColor.cgColor |
|
} |
|
else { |
|
shadowLayer.fillColor = fillColor.cgColor |
|
shadowLayer.borderColor = borderColor.cgColor |
|
} |
|
} |
|
} |
|
|
|
private func setup() { |
|
// Create a shape layer with borders |
|
shadowLayer = CAShapeLayer() |
|
shadowLayer.strokeColor = borderColor.cgColor |
|
shadowLayer.lineWidth = borderWidth |
|
shadowLayer.fillColor = fillColor.cgColor |
|
shadowLayer.path = UIBezierPath(ovalIn: layer.bounds).cgPath |
|
|
|
// Set the shadow of the shape layer |
|
shadowLayer.shadowPath = shadowLayer.path |
|
shadowLayer.shadowColor = shadowColor.cgColor |
|
shadowLayer.shadowOffset = shadowOffset |
|
shadowLayer.shadowRadius = shadowRadius |
|
shadowLayer.shadowOpacity = shadowOpacity |
|
|
|
// Add a shadowed shape layer to the bottom |
|
layer.insertSublayer(shadowLayer, at: 0) |
|
|
|
// Bring the image to the front |
|
// If you use title, then bring title (I haven't tested in yet) |
|
if let imageView = imageView { |
|
bringSubviewToFront(imageView) |
|
} |
|
} |
|
|
|
private var shadowLayer: CAShapeLayer! |
|
|
|
} |