今回、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)
この一行で三角形、四角形、五角形、六角形…
好きな形に切り取れるようにしました。
ソースコードはこちらに置いてあります。
