Last active
December 20, 2016 10:51
-
-
Save 4np/caaaedc93debb48139e407193dfc0db4 to your computer and use it in GitHub Desktop.
A UIView with rounded corners
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// 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