2016-04-13 8 views
0

In meiner benutzerdefinierten Ansicht zu zeichnen, ich habe Code wie folgt:Wie eine gestrichelte Linie Grenze für NSView

- (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]; 
} 

Dies ist OK Grenzlinie und Farbe für meine NSView zu setzen, aber ich möchte einen Schuss setzen Linie, weiß jemand, wie man das macht? Und ich habe einige Codes aus der Websuche ausprobiert, aber es zeichnet überhaupt keine Grenze.

- (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]; 
} 
+0

Vielleicht ist eine Linienbreite von 2,0 zu dünn um zu sehen? Versuchen Sie einen großen Wert. Zu einem kleinen Punkt denke ich, dass Sie self.bounds anstelle von self.frame verwenden sollten. – Jerry

Antwort

-1

Sie können diese wie tun,

[yourView.layer setBorderWidth:5.0]; 
[yourView.layer setBorderColor:[[UIColor colorWithPatternImage:[UIImage imageNamed:@"DotedImage.png"]] CGColor]]; 

Add gestrichelte Bild in Projekt und importieren QuartzCore/QuartzCore.h in Projekt

#import <QuartzCore/QuartzCore.h> 

Update:

Bildgröße und Ansicht Größe sollte sei gleich.

+0

Ich habe deine Methode versucht, es funktioniert gut. Vielen Dank. – jimwan

+0

Aber wenn jemand andere bessere Möglichkeiten haben, bitte sagen Sie mir auch – jimwan

+0

Wenn Sie glauben, dass es hilft, dann upvote die Antwort und akzeptieren Sie es. ;) – Lion

0

Sie können dies durch CGContext Hier ist eine Antwort, die für mich gearbeitet:

how to make dashed line moveable

Und mein Ergebnis:

enter image description here

+0

Sie sollten [den relevantesten Teil eines wichtigen Links angeben, falls die Zielseite nicht erreichbar ist oder dauerhaft offline geschaltet wird.] (Https://stackoverflow.com/help/how-to-answer) –

6

hier ist ein komplettes Beispiel ein mit Unterklasse von NSView in Swift 3:

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() 
    } 
} 
+0

Sie brauchten eine Stimme für das funktioniert perfekt, erstaunlich, was eine schnelle Google-Suche bringen kann. Gut gemacht. – RichAppz

+0

das war sehr hilfreich, danke, mein Herr –

Verwandte Themen