2018年6月9日土曜日

点線の描画

Draw図形を描くときに点線で描く方法があるんだね。意外と簡単だった。

UIBezierPathの場合

UIViewのdraw( )の中で、以下のように書く。

//MARK:丸
let oval = UIBezierPath(ovalIn: CGRect(x: 100, y: 100, width: 200, height: 200))
UIColor.black.setFill() //stroke色
oval.lineWidth = 線幅
oval.setLineDash([10.0, 5.0, 5.0, 5.0], count: 4, phase: 0.0)

oval.stroke() //枠線描画

setLineDashがそれで、引数はUnsafePointerがどーとかわかりにくいんだけど、要は以下の3つだ。

  1. 点線の長さ、余白の長さの順に配列で指定
  2. 配列の要素数
  3. 配列の要素の使用開始位置
oval.setLineDash(UnsafePointer:<CGFloat>?, count: Int, phase: CGFloat)

CAShapeLayerの場合

こっちも似たようなもんだろう。

let layer = CALayer()
     
let lineDashPatterns: [[NSNumber]?]  = [nil, [2,3], [10, 5, 5, 5]]
   
for (index, lineDashPattern) in lineDashPatterns.enumerated() {
   
    let shapeLayer = CAShapeLayer()
    shapeLayer.strokeColor = UIColor.black.cgColor
    shapeLayer.lineWidth = 5
    shapeLayer.lineDashPattern = lineDashPattern
   
    let path = CGMutablePath()
    let y = CGFloat(index * 50)
    path.addLines(between: [CGPoint(x: 0, y: y),
                            CGPoint(x: 640, y: y)])
   
    shapeLayer.path = path
   
    layer.addSublayer(shapeLayer)
}

参考サイト

0 件のコメント:

コメントを投稿