Подклассы NSView, чтобы иметь прозрачный фон - PullRequest
9 голосов
/ 08 января 2011

Я создаю приложение, в котором мне нужен прозрачный NSView с прозрачным изображением PNG внутри. Проблема в том, что нарисованный мной NSView имеет серый фон. У меня есть его подкласс (как TransparentRectangleView), но я не знаю, что добавить в drawRect, чтобы сделать его прозрачным.

Я уже переопределил метод isOpaque, чтобы вернуть NO, но, похоже, он не помогает ...

В качестве альтернативы, есть ли уже подклассный NSView, похожий на UIImageView iPhone (пока я могу добавлять подпредставления внутри, мне нужно добавить немного текста внутри).

Ответы [ 3 ]

17 голосов
/ 08 января 2011

Чтобы сделать вид прозрачным, просто заполните его [NSColor clearColor].

- (void)drawRect:(NSRect)rect {
    [[NSColor clearColor] set];
    NSRectFill(rect);
}

Реализация isOpaque по умолчанию возвращает NO, поэтому, если вы создаете подкласс NSView, а не какое-либо другое представление, вам не нужно беспокоиться о его переопределении.

10 голосов
/ 24 октября 2012

Принятый ответ не работает для меня, так как мое окно непрозрачно. Как сказал http://www.drissman.com/blog/archives/2009/10/09/nsrectfill_and_nscolor_clearcolor.html (и обсуждение ниже), работают следующие коды:

- (void)drawRect:(NSRect)rect {
    [[NSColor clearColor] set];
    NSRectFillUsingOperation(rect, NSCompositeSourceOver);
    // do other drawings
}
0 голосов
/ 24 января 2018

Версия Swift:

override func draw(_ dirtyRect: NSRect) {

    NSColor.clear.set()
    dirtyRect.fill()
}
...