1.聲明一個類RoundCorner
public final class RoundCorner<Base> {
public let base : Base
public init(_ base : Base){
self.base = base
}
}
2.聲明一個空協(xié)議,協(xié)議名RoundCornerCompatible
public protocol RoundCornerCompatible {
}
3.在協(xié)議擴(kuò)展中,添加一個只讀屬性dx
,返回一個RoundCorner
對象
public extension RoundCornerCompatible {
public var dx : RoundCorner<Self> {
get { return RoundCorner(self) }
}
}
4.將所需要實(shí)現(xiàn).dx
語法的Base類遵守RoundCornerCompatible
凡是遵守這個協(xié)議RoundCornerCompatible
的類,便擁有了.dx這個屬性
extension UIView : RoundCornerCompatible {}
到現(xiàn)在為止,凡是UIView的子類,便可以使用.dx
,而這個.dx
實(shí)際上就是RoundCorner
這個實(shí)例對象,下面給這個對象添加自定義的方法
5.在RoundCorner
的擴(kuò)展中,添加定義的方法
extension RoundCorner where Base: UIView{
/// 設(shè)置一個四角圓角
///
/// - Parameters:
/// - radius: 圓角半徑
/// - cornerColor: 圓角背景色
public func roundCorner(radius: CGFloat,cornerColor: UIColor) {
base.layer.dx_roundCorner(radius: radius, cornerColor: cornerColor)
}
/// 設(shè)置一個普通圓角
///
/// - Parameters:
/// - radius: 圓角半徑
/// - cornerColor: 圓角背景色
/// - corners: 圓角位置
public func roundCorner(radius: CGFloat,cornerColor: UIColor,corners: UIRectCorner) {
base.layer.dx_roundCorner(radius: radius, cornerColor: cornerColor, corners: corners)
}
/// 設(shè)置一個帶邊框的圓角
///
/// - Parameters:
/// - radius: 圓角半徑
/// - cornerColor: 圓角背景色
/// - corners: 圓角位置
/// - borderColor: 邊框顏色
/// - borderWidth: 邊框線寬
func roundCorner(radii: CGSize,cornerColor: UIColor, corners: UIRectCorner, borderColor: UIColor, borderWidth: CGFloat) {
base.layer.dx_roundCorner(cornerRadii: radii, cornerColor: cornerColor, corners: corners, borderColor: borderColor, borderWidth: borderWidth)
}
}
使用示例
let circle = UIView()
circle.dx.roundCorner(radius: 15/2, cornerColor: color)
label.dx.roundCorner(radius: 20/2, cornerColor: UIColor.white,corners: [.topLeft,.topRight, .bottomRight, .bottomLeft])