iOS에서 정다각형 그리기

10265 단어 iOSSwiftswift3

참고



【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의 중심에 오지 않는 것이 조금 기분 나쁘다

좋은 웹페이지 즐겨찾기