나는 변경하는 가장 좋은 방법을 찾고 있어요 backgroundColor
의를 NSView
. 또한에 적합한 alpha
마스크 를 설정하고 싶습니다 NSView
. 다음과 같은 것 :
myView.backgroundColor = [NSColor colorWithCalibratedRed:0.227f
green:0.251f
blue:0.337
alpha:0.8];
나는 NSWindow
이 방법 을 가지고 있으며 NSColorWheel
, 또는 NSImage
배경 옵션에 대한 열렬한 팬이 아니지만 최선의 경우 기꺼이 사용하려고합니다.
답변
네, 당신의 대답은 옳았습니다. 코코아 방법을 사용할 수도 있습니다.
- (void)drawRect:(NSRect)dirtyRect {
// set any NSColor for filling, say white:
[[NSColor whiteColor] setFill];
NSRectFill(dirtyRect);
[super drawRect:dirtyRect];
}
스위프트에서 :
class MyView: NSView {
override func draw(_ dirtyRect: NSRect) {
super.draw(dirtyRect)
// #1d161d
NSColor(red: 0x1d/255, green: 0x16/255, blue: 0x1d/255, alpha: 1).setFill()
dirtyRect.fill()
}
}
답변
쉽고 효율적인 솔루션은 Core Animation 레이어를 백업 저장소로 사용하도록 뷰를 구성하는 것입니다. 그런 다음 -[CALayer setBackgroundColor:]
레이어의 배경색을 설정하는 데 사용할 수 있습니다 .
- (void)awakeFromNib {
self.wantsLayer = YES; // NSView will create a CALayer automatically
}
- (BOOL)wantsUpdateLayer {
return YES; // Tells NSView to call `updateLayer` instead of `drawRect:`
}
- (void)updateLayer {
self.layer.backgroundColor = [NSColor colorWithCalibratedRed:0.227f
green:0.251f
blue:0.337
alpha:0.8].CGColor;
}
그게 다야!
답변
스토리 보드 애호가라면 코드가 필요없는 방법입니다 .
NSBox
NSView에 서브 뷰로 추가 하고 NSView와 동일하게 NSBox의 프레임을 조정합니다.
스토리 보드 또는 XIB에서 제목 위치를 없음으로 변경하고 상자 유형을 사용자 정의로 , 테두리 유형을 “없음”으로, 테두리 색상을 원하는대로 변경하십시오.
스크린 샷은 다음과 같습니다.
결과는 다음과 같습니다.
답변
먼저 WantsLayer를 YES로 설정하면 레이어 배경을 직접 조작 할 수 있습니다.
[self.view setWantsLayer:YES];
[self.view.layer setBackgroundColor:[[NSColor whiteColor] CGColor]];
답변
내가하는 방법을 알아 냈다고 생각하십시오.
- (void)drawRect:(NSRect)dirtyRect {
// Fill in background Color
CGContextRef context = (CGContextRef) [[NSGraphicsContext currentContext] graphicsPort];
CGContextSetRGBFillColor(context, 0.227,0.251,0.337,0.8);
CGContextFillRect(context, NSRectToCGRect(dirtyRect));
}
답변
나는이 모든 대답을 겪었지만 불행히도 나를 위해 일한 사람은 없습니다. 그러나 약 1 시간의 검색 후이 매우 간단한 방법을 찾았습니다. 🙂
myView.layer.backgroundColor = CGColorCreateGenericRGB(0, 0, 0, 0.9);
답변
편집 / 업데이트 : Xcode 8.3.1 • Swift 3.1
extension NSView {
var backgroundColor: NSColor? {
get {
guard let color = layer?.backgroundColor else { return nil }
return NSColor(cgColor: color)
}
set {
wantsLayer = true
layer?.backgroundColor = newValue?.cgColor
}
}
}
용법:
let myView = NSView(frame: NSRect(x: 0, y: 0, width: 100, height: 100))
print(myView.backgroundColor ?? "none") // NSView's background hasn't been set yet = nil
myView.backgroundColor = .red // set NSView's background color to red color
print(myView.backgroundColor ?? "none")
view.addSubview(myView)