Skip to content

Instantly share code, notes, and snippets.

@mikehouse
Last active July 31, 2018 17:51
Show Gist options
  • Save mikehouse/09e8fd12ad6e93833fd975e0c1761e3d to your computer and use it in GitHub Desktop.
Save mikehouse/09e8fd12ad6e93833fd975e0c1761e3d to your computer and use it in GitHub Desktop.
iOS 10+ Corner radius
import UIKit
extension UIRectCorner {
func asCornerMask() -> CACornerMask {
var corners: CACornerMask = []
if self.contains(.bottomRight) {
corners.insert(.layerMaxXMaxYCorner)
}
if self.contains(.topRight) {
corners.insert(.layerMaxXMinYCorner)
}
if self.contains(.bottomLeft) {
corners.insert(.layerMinXMaxYCorner)
}
if self.contains(.topLeft) {
corners.insert(.layerMinXMinYCorner)
}
return corners
}
}
extension UIView {
func rounded(_ corners: UIRectCorner, radius: CGFloat) {
if #available(iOS 11.0, *) {
layer.cornerRadius = radius
layer.maskedCorners = corners.asCornerMask()
} else {
guard !corners.contains(.allCorners) else {
layer.cornerRadius = radius
return
}
layer.cornerRadius = 0
let mask = CAShapeLayer()
mask.frame = self.bounds
mask.path = UIBezierPath(
roundedRect: self.bounds,
byRoundingCorners:
corners, cornerRadii: CGSize(width: radius, height: radius)
).cgPath
self.layer.mask = mask
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment