添加UIView擴(kuò)展類姨蝴,可直接復(fù)制以下代碼淘邻,實(shí)現(xiàn)視圖添加部分圓角,使用代碼:
設(shè)置上左和上右圓角12度
vipTopView.TB_addCornerBounds(conrners [.topLeft,.topRight],radius:12,tBounds:CGRect(x:0,y:0,width:kScreenWidth-72,height:80))
也可設(shè)置邊框加圓角眷细,具體代碼如下:
extension UIView {
/// 視圖添加圓角(可添加部分圓角)
public?func TB_addCorner(conrners:?UIRectCorner?,?radius:?CGFloat)?{
let?maskPath?=?UIBezierPath(roundedRect:?self.bounds,?byRoundingCorners:?conrners,?cornerRadii:?CGSize(width:?radius,?height:?radius))
let?maskLayer?=?CAShapeLayer()
maskLayer.frame?=?self.bounds
maskLayer.path?=?maskPath.cgPath
self.layer.mask?=?maskLayer
}
public?func TB_addCornerBounds(conrners:?UIRectCorner?,?radius:?CGFloat,?tBounds:CGRect)?{
let?maskPath?=?UIBezierPath(roundedRect:?tBounds,?byRoundingCorners:?conrners,?cornerRadii:?CGSize(width:?radius,?height:?radius))
let?maskLayer?=?CAShapeLayer()
maskLayer.frame?=?tBounds
maskLayer.path?=?maskPath.cgPath
self.layer.mask?=?maskLayer
}
//圓角加邊框
public?func TB_addCornerBorderLayer(conrners:?UIRectCorner?,?radius:?CGFloat,borderColor:UIColor,filColor:UIColor,lineWidth:Int,tBounds:CGRect)?{
let?maskPath?=?UIBezierPath(roundedRect:?tBounds,?byRoundingCorners:?conrners,?cornerRadii:?CGSize(width:?radius,?height:?radius))
let?maskLayer?=?CAShapeLayer()
maskLayer.frame?=?tBounds
maskLayer.path?=?maskPath.cgPath
self.layer.mask?=?maskLayer
let?borderLayer?=?CAShapeLayer()
borderLayer.path?=?maskLayer.path
borderLayer.fillColor?=?filColor.cgColor
borderLayer.strokeColor?=?borderColor.cgColor
borderLayer.lineWidth?=?CGFloat(lineWidth)
borderLayer.frame?=?self.bounds
self.layer.addSublayer(borderLayer)
}
struct?CornerRadii?{
var?topLeft:CGFloat=0
var?topRight:CGFloat=0
var?bottomLeft:CGFloat=0
var?bottomRight:CGFloat=0
}
//切圓角函數(shù)繪制線條
func createPathWithRoundedRect(?bounds:CGRect,cornerRadii:CornerRadii)?->CGPath{
let?minX?=?bounds.minX
let?minY?=?bounds.minY
let?maxX?=?bounds.maxX
let?maxY?=?bounds.maxY
//獲取四個(gè)圓心
let?topLeftCenterX?=?minX?+?cornerRadii.topLeft
let?topLeftCenterY?=?minY?+?cornerRadii.topLeft
let?topRightCenterX?=?maxX?-?cornerRadii.topRight
let?topRightCenterY?=?minY?+?cornerRadii.topRight
let?bottomLeftCenterX?=?minX?+?cornerRadii.bottomLeft
let?bottomLeftCenterY?=?maxY?-?cornerRadii.bottomLeft
let?bottomRightCenterX?=?maxX?-?cornerRadii.bottomRight
let?bottomRightCenterY?=?maxY-cornerRadii.bottomRight
//雖然順時(shí)針參數(shù)是YES,在iOS中的UIView中,這里實(shí)際是逆時(shí)針
let?path?:CGMutablePath?=?CGMutablePath();
//頂 左
path.addArc(center:CGPoint(x:?topLeftCenterX,?y:?topLeftCenterY),?radius:?cornerRadii.topLeft,?startAngle:CGFloat.pi,?endAngle:CGFloat.pi*3/2,?clockwise:false)
//頂右
path.addArc(center:CGPoint(x:?topRightCenterX,?y:?topRightCenterY),?radius:?cornerRadii.topRight,?startAngle:CGFloat.pi*3/2,?endAngle:0,?clockwise:false)
//底右
path.addArc(center:CGPoint(x:?bottomRightCenterX,?y:?bottomRightCenterY),?radius:?cornerRadii.bottomRight,?startAngle:0,?endAngle:CGFloat.pi/2,?clockwise:false)
//底左
path.addArc(center:CGPoint(x:?bottomLeftCenterX,?y:?bottomLeftCenterY),?radius:?cornerRadii.bottomLeft,?startAngle:CGFloat.pi/2,?endAngle:CGFloat.pi,?clockwise:false)
path.closeSubpath();
return?path;
}
//MARK:添加4個(gè)不同尺寸的圓角(可以設(shè)置邊框)
func TB_addCornerDifferentBorder(cornerRadii:CornerRadii,?size:CGSize,?borderColor:UIColor,?borderWidth:CGFloat)?{
let?rect?=?CGRect(origin:CGPoint(x:0,?y:0),?size:?size)
let?path?=?createPathWithRoundedRect(bounds:?rect,?cornerRadii:cornerRadii)
let?shapLayer?=?CAShapeLayer()
shapLayer.frame?=?rect
shapLayer.path?=?path
self.layer.mask?=?shapLayer
//設(shè)置邊框
let?borderLayer?=?CAShapeLayer()
borderLayer.path?=?path
borderLayer.fillColor?=?UIColor.clear.cgColor
borderLayer.strokeColor?=?borderColor.cgColor
borderLayer.lineWidth?=?borderWidth
borderLayer.frame?=?rect
self.layer.addSublayer(borderLayer)
}
}