Created
January 21, 2019 16:47
-
-
Save Infinity-James/602860cfd9d266b72418a4119aed8419 to your computer and use it in GitHub Desktop.
Corner Borders for UIView
This file contains 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
// MARK: Borders | |
public extension UIView { | |
/** | |
Adds borders to the given corners. | |
- Parameter corners: The corners to which borders should be added. | |
- Parameter color: The color of the borders. | |
- Parameter length: The length of each border across the view. | |
- Parameter width: The thickness of the borders. | |
*/ | |
func addBorders(to corners: Set<Corner>, color: UIColor = .black, length: CGFloat = 16.0, width: CGFloat = 1.0) { | |
guard !corners.isEmpty else { return } | |
func createBorder() -> UIView { | |
let borderView = UIView(frame: CGRect.zero) | |
borderView.translatesAutoresizingMaskIntoConstraints = false | |
borderView.backgroundColor = color | |
return borderView | |
} | |
for corner in corners { | |
switch corner { | |
case .topLeading: | |
let topBorder = createBorder() | |
let leftBorder = createBorder() | |
addSubview(topBorder) | |
addSubview(leftBorder) | |
NSLayoutConstraint.activate([ | |
topBorder.topAnchor.constraint(equalTo: topAnchor, constant: -width / 2.0), | |
topBorder.leadingAnchor.constraint(equalTo: leadingAnchor), | |
topBorder.widthAnchor.constraint(equalToConstant: length), | |
topBorder.heightAnchor.constraint(equalToConstant: width), | |
leftBorder.topAnchor.constraint(equalTo: topAnchor, constant: -width / 2.0), | |
leftBorder.leadingAnchor.constraint(equalTo: leadingAnchor, constant: -width / 2.0), | |
leftBorder.widthAnchor.constraint(equalToConstant: width), | |
leftBorder.heightAnchor.constraint(equalToConstant: length) | |
]) | |
case .topTrailing: | |
let topBorder = createBorder() | |
let rightBorder = createBorder() | |
addSubview(topBorder) | |
addSubview(rightBorder) | |
NSLayoutConstraint.activate([ | |
topBorder.topAnchor.constraint(equalTo: topAnchor, constant: -width / 2.0), | |
topBorder.trailingAnchor.constraint(equalTo: trailingAnchor), | |
topBorder.widthAnchor.constraint(equalToConstant: length), | |
topBorder.heightAnchor.constraint(equalToConstant: width), | |
rightBorder.topAnchor.constraint(equalTo: topAnchor, constant: -width / 2.0), | |
rightBorder.trailingAnchor.constraint(equalTo: trailingAnchor, constant: width / 2.0), | |
rightBorder.widthAnchor.constraint(equalToConstant: width), | |
rightBorder.heightAnchor.constraint(equalToConstant: length) | |
]) | |
case .bottomTrailing: | |
let bottomBorder = createBorder() | |
let rightBorder = createBorder() | |
addSubview(bottomBorder) | |
addSubview(rightBorder) | |
NSLayoutConstraint.activate([ | |
bottomBorder.bottomAnchor.constraint(equalTo: bottomAnchor, constant: width / 2.0), | |
bottomBorder.trailingAnchor.constraint(equalTo: trailingAnchor), | |
bottomBorder.widthAnchor.constraint(equalToConstant: length), | |
bottomBorder.heightAnchor.constraint(equalToConstant: width), | |
rightBorder.bottomAnchor.constraint(equalTo: bottomAnchor, constant: width / 2.0), | |
rightBorder.trailingAnchor.constraint(equalTo: trailingAnchor, constant: width / 2.0), | |
rightBorder.widthAnchor.constraint(equalToConstant: width), | |
rightBorder.heightAnchor.constraint(equalToConstant: length) | |
]) | |
case .bottomLeading: | |
let bottomBorder = createBorder() | |
let leftBorder = createBorder() | |
addSubview(bottomBorder) | |
addSubview(leftBorder) | |
NSLayoutConstraint.activate([ | |
bottomBorder.bottomAnchor.constraint(equalTo: bottomAnchor, constant: width / 2.0), | |
bottomBorder.leadingAnchor.constraint(equalTo: leadingAnchor), | |
bottomBorder.widthAnchor.constraint(equalToConstant: length), | |
bottomBorder.heightAnchor.constraint(equalToConstant: width), | |
leftBorder.bottomAnchor.constraint(equalTo: bottomAnchor, constant: width / 2.0), | |
leftBorder.leadingAnchor.constraint(equalTo: leadingAnchor, constant: -width / 2.0), | |
leftBorder.widthAnchor.constraint(equalToConstant: width), | |
leftBorder.heightAnchor.constraint(equalToConstant: length) | |
]) | |
} | |
} | |
} | |
// MARK: Corner | |
enum Corner { | |
case topLeading | |
case topTrailing | |
case bottomTrailing | |
case bottomLeading | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment