-
-
Save MrJackdaw/6ffbc33fc274838412bfe3ad48592b9b to your computer and use it in GitHub Desktop.
// This syntax reflects changes made to the Swift language as of Aug. '16 | |
extension UIView { | |
// Example use: myView.addBorder(toSide: .Left, withColor: UIColor.redColor().CGColor, andThickness: 1.0) | |
enum ViewSide { | |
case Left, Right, Top, Bottom | |
} | |
func addBorder(toSide side: ViewSide, withColor color: CGColor, andThickness thickness: CGFloat) { | |
let border = CALayer() | |
border.backgroundColor = color | |
switch side { | |
case .Left: border.frame = CGRect(x: frame.minX, y: frame.minY, width: thickness, height: frame.height); break | |
case .Right: border.frame = CGRect(x: frame.maxX, y: frame.minY, width: thickness, height: frame.height); break | |
case .Top: border.frame = CGRect(x: frame.minX, y: frame.minY, width: frame.width, height: thickness); break | |
case .Bottom: border.frame = CGRect(x: frame.minX, y: frame.maxY, width: frame.width, height: thickness); break | |
} | |
layer.addSublayer(border) | |
} | |
} |
This is great thanks! One note, I find it easier to pass everything in as a UIColor and convert to cgColor internally in the method.
switch side {
case .Left: border.frame = CGRect(x: frame.minX, y: frame.minY, width: thickness, height: frame.height); break
case .Right: border.frame = CGRect(x: frame.maxX - thickness, y: frame.minY, width: thickness, height: frame.height); break
case .Top: border.frame = CGRect(x: frame.minX, y: frame.minY, width: frame.width, height: thickness); break
case .Bottom: border.frame = CGRect(x: frame.minX, y: frame.maxY - thickness, width: frame.width, height: thickness); break
}
break
serves no purpose here.
This should be in UIKit!
Another version:
extension UIView {
// Example use: myView.addBorder(toSide: .Left, withColor: UIColor.redColor().CGColor, andThickness: 1.0)
enum ViewSide {
case left, right, top, bottom
}
func addBorder(toSide side: ViewSide, withColor color: CGColor, andThickness thickness: CGFloat) {
let border = CALayer()
border.backgroundColor = color
switch side {
case .left: border.frame = CGRect(x: frame.minX, y: frame.minY, width: thickness, height: frame.height)
case .right: border.frame = CGRect(x: frame.maxX, y: frame.minY, width: thickness, height: frame.height)
case .top: border.frame = CGRect(x: frame.minX, y: frame.minY, width: frame.width, height: thickness)
case .bottom: border.frame = CGRect(x: frame.minX, y: frame.maxY, width: frame.width, height: thickness)
}
layer.addSublayer(border)
}
}
This needs to be updated to be using border
instead of frame
. It currently only works properly in the special case where border
== frame
.
@hemangshah whats the difference in the updated version?
it works perfectly! thanks e congrats
This doesn't work on all screen sizes. On bigger screens, it doesn't extend to the end of the border
Works lovely. Used it on a UICollectionViewCell. Many thanks.
Working lovely in UiTextField with some changes in switch block code:
switch side {
case .left: border.frame = CGRect(x:bounds.minX, y: bounds.minY, width: thickness, height: bounds.height)
case .right: border.frame = CGRect(x: bounds.maxX, y: bounds.minY, width: thickness, height: bounds.height)
case .top: border.frame = CGRect(x: bounds.minX, y: bounds.minY, width: bounds.width, height: thickness)
case .bottom: border.frame = CGRect(x: bounds.minX, y: bounds.maxY, width: bounds.width, height: thickness)
}
this code worked for my..... good luck
thanks
`import Foundation
import UIKit
// This syntax reflects changes made to the Swift language as of Aug. '16
extension UIView {
// Example use: myView.addBorder(toSide: .Left, withColor: UIColor.redColor().CGColor, andThickness: 1.0)
enum ViewSide {
case Left, Right, Top, Bottom
}
func addBorder(toSide side: ViewSide, withColor color: CGColor, andThickness thickness: CGFloat) {
let border = CALayer()
border.backgroundColor = color
switch side {
case .Left: border.frame = CGRect(x: 0.0, y: 0.0, width: thickness, height: frame.height); break
case .Right: border.frame = CGRect(x: frame.width-thickness, y: 0.0, width: thickness, height: frame.height); break
case .Top: border.frame = CGRect(x: 0.0, y: 0.0, width: frame.width, height: thickness); break
case .Bottom: border.frame = CGRect(x: 0.0, y: frame.height-thickness, width: frame.width, height: thickness); break
}
layer.addSublayer(border)
}
}
`
Also works for NSView
. Only need to swap top and bottom, since the coordinate system origin on macOS is in the left bottom of a view.
And per Swift naming guidelines, case names should be lowerCamelCase.
This doesn't work on all screen sizes. On bigger screens, it doesn't extend to the end of the border
Yeah, did you know how to solve it?
Also works for
NSView
. Only need to swap top and bottom, since the coordinate system origin on macOS is in the left bottom of a view.And per Swift naming guidelines, case names should be lowerCamelCase.
Great job. need declare CALayer for using with NSView
`
let layer = CALayer();
self.myView.layer = layer;
self.myView.wantsLayer = true
`
what if i want only 2 rounded corner (top left and top right ) with border on three sides(top , left and right)
@parveenkumar5 You can rewrite with OptionSet instead of Enum.
Really good, men it's a easy implementation, and I love it, it's pretty useful thanks again