如何为NSView绘制虚线边框

jim*_*wan 0 objective-c

在我的自定义视图中,我的代码如下:

- (void)drawRect:(NSRect)dirtyRect {
    [super drawRect:dirtyRect];

     //Drawing code here.
    [self setWantsLayer: YES];
    [self.layer setBorderWidth: 1];

    [self.layer setBorderColor:[NSColor colorWithRed:205/255.0 green:211/255.0 blue:232/255.0 alpha:1.0].CGColor];
    [self.layer setCornerRadius: 10];
}
Run Code Online (Sandbox Code Playgroud)

这可以为我的NSView设置边框线和颜色,但我想设置一个虚线,任何人都知道如何做到这一点?我尝试了网络搜索中的一些代码,但它根本没有绘制边框.

- (void)drawRect:(NSRect)dirtyRect {
    [super drawRect:dirtyRect];

    // Drawing code here.
    CGFloat dashPattern[] = {10,4}; //make your pattern here
    NSBezierPath *textViewSurround = [NSBezierPath bezierPathWithRoundedRect:self.frame xRadius:10 yRadius:10];
    [textViewSurround setLineWidth:2.0f];
    [textViewSurround setLineDash:dashPattern count:2 phase:0];
    [[NSColor colorWithRed:205/255.0 green:211/255.0 blue:232/255.0 alpha:1.0] set];
    [textViewSurround stroke];
}
Run Code Online (Sandbox Code Playgroud)

Cas*_*sey 7

这是在Swift 3中使用NSView的子类的完整示例:

class BorderedView: NSView {
    override func draw(_ dirtyRect: NSRect) {
        super.draw(dirtyRect)

        // dash customization parameters
        let dashHeight: CGFloat = 3
        let dashLength: CGFloat = 10
        let dashColor: NSColor = .red

        // setup the context
        let currentContext = NSGraphicsContext.current()!.cgContext
        currentContext.setLineWidth(dashHeight)
        currentContext.setLineDash(phase: 0, lengths: [dashLength])
        currentContext.setStrokeColor(dashColor.cgColor)

        // draw the dashed path
        currentContext.addRect(bounds.insetBy(dx: dashHeight, dy: dashHeight))
        currentContext.strokePath()
    }
}
Run Code Online (Sandbox Code Playgroud)