Skip to content

Instantly share code, notes, and snippets.

@4np
Last active December 20, 2016 10:51
Show Gist options
  • Save 4np/caaaedc93debb48139e407193dfc0db4 to your computer and use it in GitHub Desktop.
Save 4np/caaaedc93debb48139e407193dfc0db4 to your computer and use it in GitHub Desktop.
A UIView with rounded corners
//
// RoundedCornersView.swift
//
// Created by Jeroen Wesbeek on 24/11/16.
// Copyright © 2016 Jeroen Wesbeek. All rights reserved.
//
import Foundation
import UIKit
@IBDesignable class RoundedCornersView: UIView {
public var roundedCorners: UIRectCorner = .allCorners
@IBInspectable public var cornerRadius: CGFloat = 1.0 {
didSet {
if cornerRadius != oldValue {
setNeedsLayout()
}
}
}
@IBInspectable public var borderLineWidth: CGFloat = 2.0 {
didSet {
if borderLineWidth != oldValue {
borderLayer.lineWidth = borderLineWidth
setNeedsLayout()
}
}
}
@IBInspectable public var borderColor: UIColor = UIColor.gray {
didSet {
if borderColor != oldValue {
borderLayer.strokeColor = borderColor.cgColor
}
}
}
lazy var maskLayer: CAShapeLayer = {
let maskLayer = CAShapeLayer()
self.layer.mask = maskLayer
return maskLayer
}()
lazy var borderLayer: CAShapeLayer = {
let borderLayer = CAShapeLayer()
borderLayer.fillColor = nil
borderLayer.strokeColor = self.borderColor.cgColor
borderLayer.lineWidth = self.borderLineWidth
self.layer.addSublayer(borderLayer)
return borderLayer
}()
override func layoutSublayers(of layer: CALayer) {
super.layoutSublayers(of: layer)
// create bezier path
let size = CGSize(width: cornerRadius, height: cornerRadius)
let path = UIBezierPath(roundedRect: bounds, byRoundingCorners: roundedCorners, cornerRadii: size)
// update layers
maskLayer.path = path.cgPath
borderLayer.path = path.cgPath
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment