Skip to content

Instantly share code, notes, and snippets.

@haraldmartin
Forked from kristopherjohnson/RoundRectButton.swift
Created February 20, 2017 14:33
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save haraldmartin/be881b1d26e7000eecfc9813a6232b6a to your computer and use it in GitHub Desktop.
Save haraldmartin/be881b1d26e7000eecfc9813a6232b6a to your computer and use it in GitHub Desktop.
Swift: Custom UIButton subclass that displays a rounded rectangle in the background
import UIKit
/// UIButton subclass that draws a rounded rectangle in its background.
public class RoundRectButton: UIButton {
// MARK: Public interface
/// Corner radius of the background rectangle
public var roundRectCornerRadius: CGFloat = 8 {
didSet {
self.setNeedsLayout()
}
}
/// Color of the background rectangle
public var roundRectColor: UIColor = UIColor.whiteColor() {
didSet {
self.setNeedsLayout()
}
}
// MARK: Overrides
override public func layoutSubviews() {
super.layoutSubviews()
layoutRoundRectLayer()
}
// MARK: Private
private var roundRectLayer: CAShapeLayer?
private func layoutRoundRectLayer() {
if let existingLayer = roundRectLayer {
existingLayer.removeFromSuperlayer()
}
let shapeLayer = CAShapeLayer()
shapeLayer.path = UIBezierPath(roundedRect: self.bounds, cornerRadius: roundRectCornerRadius).CGPath
shapeLayer.fillColor = roundRectColor.CGColor
self.layer.insertSublayer(shapeLayer, atIndex: 0)
self.roundRectLayer = shapeLayer
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment