参考
【iOS】正多角形を描く - UIBezierPathバージョン2
これのswift版
ソース
定義
PolygonView
class PolygonView:UIView{
//角の数
var polygonNumber:Int = 3{
didSet{
self.setNeedsDisplay()
}
}
//図形の色
var fillColor:UIColor = .white{
didSet{
self.setNeedsDisplay()
}
}
override var frame: CGRect{
didSet{
self.setNeedsDisplay()
}
}
override init(frame:CGRect){
super.init(frame:frame)
//色を塗らない部分を透過
self.isOpaque = false
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func draw(_ rect: CGRect) {
let r = min(rect.width/2, rect.height/2)
let c = CGPoint(x: rect.width/2, y: rect.height/2)
self.drawRegularPolygon(self.polygonNumber, radius: r, center: c)
}
//図形を描く
func drawRegularPolygon(_ p: Int, radius: CGFloat, center: CGPoint) {
guard let ctx = UIGraphicsGetCurrentContext() else { return }
ctx.clear(self.frame)
var pt:[CGPoint]=[]
for i in 0 ..< p {
let rad: CGFloat = CGFloat(Double.pi * Double(i) * 2.0 / Double(p) + Double.pi / 2.0)
let point = CGPoint(x: center.x + radius * cos(rad), y: center.y - radius * sin(rad))
pt.append(point)
}
ctx.setFillColor(self.fillColor.cgColor)
ctx.move(to: pt[0])
for p in pt{
ctx.addLine(to: p)
}
ctx.closePath()
ctx.fillPath()
}
}
使い方
//200*200のviewにオレンジ色の6角形を描く
let polygonView = PolygonView.init(frame: CGRect(x:0, y:0, width:200, height:200))
polygonView.polygonNumber = 6
polygonView.fillColor = .orange
出力
補足
奇数角形の時に図形の中心がviewの中心にこないのが少し気持ち悪い