5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

iOSで正多角形を描く

Last updated at Posted at 2017-08-30

参考

【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

出力

スクリーンショット 2017-08-31 7.36.40.png

補足

奇数角形の時に図形の中心がviewの中心にこないのが少し気持ち悪い

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?