1.画出不规则图形的
path
:
private func createPolygonPath() -> CGPath {
let path = UIBezierPath()
path.move(to: CGPoint(x: 100, y: 200))
path.addLine(to: CGPoint(x: 100, y: 400))
path.addLine(to: CGPoint(x: 300, y: 400))
path.addLine(to: CGPoint(x: 100, y: 200))
return path.cgPath
2.画出需要的layer
:
private func createPolygonLayer() -> CALayer {
let polygonLayer = CAShapeLayer()
polygonLayer.fillColor = UIColor.purple.cgColor
polygonLayer.lineWidth = 1.0
polygonLayer.strokeColor = UIColor.red.cgColor
polygonPath = createPolygonPath()
polygonLayer.path = polygonPath!
return polygonLayer
4.重写drawRect方法形成不规则图形
override func draw(_ rect: CGRect) {
super.draw(rect)
self.layer.mask = createPolygonLayer()
5.重写pointInside方法只允许区域内可响应
override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
return polygonPath.contains(point)
事件响应规则是调用hitTest方法找到合适的responder,此时view作为responer会调用pointInside检查自己是否合适。