LoginSignup
6
5

More than 5 years have passed since last update.

NSBezierPathで点線を描画する

Posted at

NSBoxのborderTypeに指定するNSBorderTypeは以下の様なenumになっている。

enum {
   NSNoBorder     = 0,
   NSLineBorder   = 1,
   NSBezelBorder  = 2,
   NSGrooveBorder = 3
};
typedef NSUInteger NSBorderType;

点線を表現したかったんだけど、素直には出来そうにない。どうやらPathをつかって地道にやる必要があるっぽいので調べて書いた。

import Cocoa

class DashedLine: NSBox {

    override func drawRect(dirtyRect: NSRect) {
        NSColor.lightGrayColor().set()
        var path = NSBezierPath(rect: dirtyRect)
        path.lineWidth = 10.0

        let pattern: [CGFloat] = [5.0, 5.0]
        path.setLineDash(pattern, count: 2, phase: 0.0)
        path.stroke()
    }
}

見ての通りview側のプロパティにアクセスしていないので個人的には違和感大有のコードなんだけど、これでグレーの点線が表現出来る。間隔の調整には、setLineDash()に渡しているCGFloatの配列の数値を変えれば良い。

ちなみにconstraintの制御とかが面倒臭くて最終的には使わなかった。

6
5
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
6
5