LoginSignup
10
8

More than 5 years have passed since last update.

UIBezierPathを使用して点線を引いてみた

Last updated at Posted at 2019-01-15

はじめに

UIViewを点線に見せる表現方法についてです。

使用用途は...どうでしょう。
考えればあるとは思いますけどそこまで頻繁に使う機会は無さそうですがこんな感じで出来るのか。と知れたので記事にしてみました。

コード

@IBDesignableを付けている理由は、Storyboard上で変更を確認したかったので付けました。

肝はUIBezierPathでこのClassはCustomViewで描画される線分(直線、曲線)らしい。

DotLineView.swift
import UIKit

@IBDesignable
class DotLineView: UIView {

    // Inspectorで点線の色と幅を設定出来るようにする
    @IBInspectable var dotColor: UIColor = UIColor.gray
    @IBInspectable var lineWidth: CGFloat = 2.0

    override func draw(_ rect: CGRect) {
        let path = UIBezierPath()

        path.lineWidth = self.lineWidth

        // 他にround, squareを設定出来る
        path.lineCapStyle = .butt

        // 起点
        path.move(to: CGPoint(x: 0, y: rect.midY))
        // 帰着点
        path.addLine(to: CGPoint(x: rect.width, y: rect.midY))

        let dashes = [path.lineWidth, path.lineWidth]

        // 第一引数 点線の大きさ, 点線間の間隔
        // 第二引数 第一引数で指定した配列の要素数
        // 第三引数 開始位置
        path.setLineDash(dashes, count: dashes.count, phase: 0)

        // 点線の色設定
        dotColor.setStroke()

        // 点線の描画
        path.stroke()
    }
}

Storyboard

Viewに配置したUIViewにDotLineViewをCustomClassとして指定してるだけです。
スクリーンショット 2019-01-15 22.52.23.png

動作確認

点線!!!
スクリーンショット 2019-01-15 22.55.22.png

LineWidthを2から10に変更したバージョン
Inspector上で値を変更した結果が反映されるので確認が楽チン!
スクリーンショット 2019-01-15 22.57.00.png

終わりに

これくらいだったらImageもらってUIImageViewとして表示した方が楽なんじゃないか?と実装中思ったりしましたが、仮に点線の間隔、大きさの変更が入った場合はこっち方が柔軟に即反映出来るのが強みかと!

UIBezierPathで色々な形が描画されるのにハマるのも今日だけな気はするけど楽しかった笑
UIBezierPath芸なるものが爆誕するもの面白みある。。。かも?笑
お絵描きとかもこれでいけるのでは?と思ってたりするので出来るのかどうかだけは今月中に取り組みたい!

おまけ:サッカーコートっぽいやつ
スクリーンショット 2019-01-15 23.06.23.png

10
8
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
10
8