部分圆角
lazy var redView: UIView = {
let view = UIView(frame: CGRect(x: 100, y: 100, width: 200, height: 200))
view.backgroundColor = UIColor.red
return view
}()
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(redView)
let frame = redView.bounds
let maskPath = UIBezierPath(roundedRect: frame, byRoundingCorners: [.topLeft,.bottomLeft], cornerRadii: CGSize(width: 20, height: 20))
let maskLayer = CAShapeLayer()
maskLayer.frame = frame
maskLayer.path = maskPath.cgPath
redView.layer.mask = maskLayer
}
效果图
渐变色
let bgLayer = CAGradientLayer()
bgLayer.colors = [UIColor.red.cgColor,UIColor.blue.cgColor]
bgLayer.locations = [0,1]
bgLayer.frame = frame
bgLayer.startPoint = CGPoint(x: 0, y: 0)
bgLayer.endPoint = CGPoint(x: 1, y: 0)
redView.layer.addSublayer(bgLayer)
效果图
镂空效果
let path = UIBezierPath(rect: frame)
let carvedPath = UIBezierPath(rect: CGRect(x: (frame.width-100)/2, y: (frame.height-100)/2, width: 100, height: 100))
path.append(carvedPath)
let layer = CAShapeLayer()
layer.frame = frame
layer.fillColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.5).cgColor
layer.strokeColor = UIColor.white.cgColor
layer.fillRule = .evenOdd
layer.path = path.cgPath
redView.layer.addSublayer(layer)
效果图
完整代码
lazy var redView: UIView = {
let view = UIView(frame: CGRect(x: 100, y: 100, width: 200, height: 200))
view.backgroundColor = UIColor.red
return view
}()
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(redView)
let frame = redView.bounds
let maskPath = UIBezierPath(roundedRect: frame, byRoundingCorners: [.topLeft,.bottomLeft], cornerRadii: CGSize(width: 20, height: 20))
let maskLayer = CAShapeLayer()
maskLayer.frame = frame
maskLayer.path = maskPath.cgPath
redView.layer.mask = maskLayer
let bgLayer = CAGradientLayer()
bgLayer.colors = [UIColor.red.cgColor,UIColor.blue.cgColor]
bgLayer.locations = [0,1]
bgLayer.frame = frame
bgLayer.startPoint = CGPoint(x: 0, y: 0)
bgLayer.endPoint = CGPoint(x: 1, y: 0)
redView.layer.addSublayer(bgLayer)
let path = UIBezierPath(rect: frame)
let carvedPath = UIBezierPath(rect: CGRect(x: (frame.width-100)/2, y: (frame.height-100)/2, width: 100, height: 100))
path.append(carvedPath)
let layer = CAShapeLayer()
layer.frame = frame
layer.fillColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.5).cgColor
layer.strokeColor = UIColor.white.cgColor
layer.fillRule = .evenOdd
layer.path = path.cgPath
redView.layer.addSublayer(layer)
}