Skip to content

Instantly share code, notes, and snippets.

@wzbozon
Last active October 25, 2020 14:58
Show Gist options
  • Save wzbozon/2299cbf2b031d9433e64cac6e5c07ddf to your computer and use it in GitHub Desktop.
Save wzbozon/2299cbf2b031d9433e64cac6e5c07ddf to your computer and use it in GitHub Desktop.
iOS round bordered UIButton with a shadow written in Swift
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!
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment