プログラミング

SwiftでUIImageを多角形に切り取る方法

今回、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)

この一行で三角形、四角形、五角形、六角形…
好きな形に切り取れるようにしました。

ソースコードはこちらに置いてあります。

合わせて読みたい記事