2013-10-28 13 views
5

Ich habe etwas recherchiert, aber alle Antworten, die ich bekam, waren für iOS, wie kann ich einen farbigen Rahmen um NSImage in der OSX App zeichnen? Ich habe versucht mit der ImageView-Eigenschaft von NSImage, um seine Grenze Breite und Farbe zu setzen, aber es scheint nicht zu funktionieren ...Wie zeichne ich einen farbigen Rahmen um NSImage?

Jede Art von Hilfe wird sehr geschätzt!

Antwort

11

Versuchen Sie so, ohne Unterklasse zu erstellen, ist es auch möglich. Auch können Sie die Breite ans Radius entsprechend eingestellt: -

[imgView setWantsLayer:YES]; 
imgView.layer.borderWidth = 1.0; 
imgView.layer.cornerRadius = 8.0; 
imgView.layer.masksToBounds = YES; 
CGColorRef color = CGColorRetain([NSColor colorWithCalibratedRed:0 green:100 blue:0 alpha:0.5f].CGColor); 
[imgView.layer setBorderColor:color]; 
+1

[imgView setWantsLayer: JA]; erledigt! danke –

+0

Wie man Hintergrundbild für NSImageView Mr.Hussain einstellt. Ich habe versucht, colorWithCalibrated mit [NSColor colorWithPatternImage: ....] im obigen Code zu ersetzen, aber das scheint nicht zu funktionieren, bitte helfen Sie mir, danke :) –

+0

Warum verwenden Sie colorWithPatternImage ?? –

5

Sie könnten NSView Unterklasse und etwas tun, wie folgt aus:

- (void)drawRect:(NSRect)dirtyRect 
{ 
    [[NSColor orangeColor] set]; 

    NSBezierPath *path = [NSBezierPath bezierPath]; 
    [path appendBezierPathWithRoundedRect:outerFrame xRadius:5 yRadius:5]; 
    [path setLineWidth:4.0]; 
    [path stroke]; 
} 

und natürlich die Radiuswerte ändern, je nachdem ob Sie abgerundete Ecken wollen oder nicht.

+0

danke, aber ist es möglich, mach es ohne Unterklassen? –

1

In Swift 3:

imagePreview.layer!.borderWidth = 10.0 
imagePreview.layer!.cornerRadius = 8.0 
imagePreview.layer!.masksToBounds = true 
let color: CGColor = NSColor.blue.cgColor 
imagePreview.layer!.borderColor = color 
0

In swift:

override func draw(_ dirtyRect: NSRect) { 
    // Draw Border 
    borderColor.set() 
    let borderPath = NSBezierPath(rect: dirtyRect) 
    borderPath.lineWidth = 2.0 
    borderPath.stroke() 
} 
Verwandte Themen