今回、UIImageを多角形で切り取りたくなったので実装方法をまとめてみました。最終的に1行で多角形に切り取れるようにしてあります。
UIImageViewを拡張して作ろうと思います
extension UIImageView { func clipToPolygon(corners: Int) { guard corners >= 3 else { print("\(#file)\(#function) corerns must be >= 3") return } let radius = min(self.frame.width/2.0,self.frame.height/2.0) let center = CGPoint(x:self.bounds.width/2.0,y:self.bounds.height/2.0) let path = UIBezierPath() path.lineWidth = 1 for index in 0...corners { let rad = (Double.pi / Double(corners) ) * Double(index * 2 + 1) print(rad * 180 / Double.pi) let drawPoint = CGPoint(x: center.x + radius * CGFloat(cos(rad)), y: center.y + radius * CGFloat(sin(rad))) if (index == 0) { path.move(to: drawPoint) } else if (index == corners ) { path.close() } else { path.addLine(to: drawPoint) } } let mask = CAShapeLayer() mask.path = path.cgPath self.layer.mask = mask self.layer.masksToBounds = false } }
一行で呼び出して多角形にできます
imageView.clipToPolygon(corners:6)
この一行で三角形、四角形、五角形、六角形…
好きな形に切り取れるようにしました。
ソースコードはこちらに置いてあります。