Как нарисовать прозрачный NSScroller - PullRequest
4 голосов
/ 15 ноября 2010

Я создаю подкласс NSScroller, чтобы попытаться сделать его похожим на то, как выглядят «полосы прокрутки» в iOS.Я хочу, чтобы это было просто наложение, представляющее текущую позицию, которая рисуется над тем, что находится под ним.По какой-то причине, если я переопределю drawRect для скроллера, я получу границы, заполненные белым.Есть ли способ предотвратить это, чтобы я мог рисовать поверх того, чем закончился мой подкласс NSScroller?

Редактировать: рисование чистым цветом, кажется, приближает меня, но это тоже рисованиеclear ": P Это рисует прямо на рабочий стол, когда я просто хочу рисовать вниз в окно.Эта картина может сделать это более ясным alt text

Есть идеи?

Ответы [ 4 ]

9 голосов
/ 15 ноября 2010

Подклассы NSView выполняют рисование, начиная с drawRect. Если вы переопределите этот метод в подклассе, вы будете ответственны за выполнение всего рисования (будь то через ваши собственные методы или вызовы методов super.) Например, следующий код рисует только прокрутку nob и делает остальную часть рамка полосы прокрутки прозрачная.

- (void)drawRect:(NSRect)dirtyRect {

    // Do some custom drawing...
    [[NSColor clearColor] set];
    NSRectFill(dirtyRect);

    // Call NSScroller's drawKnob method (or your own if you overrode it)
    [self drawKnob];
  }

Это скорее подтверждение концепции, чем фактическое предложение кода (не уверен, какое влияние оказывает это минимальное количество рисунков на NSScroller.) NSScroller также имеет другие конкретные методы рисования, которые вы можете переопределить / вызвать из переопределенного drawRect: метод (информация доступна из документов Apple: http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSScroller_Class/Reference/Reference.html)

4 голосов
/ 29 октября 2013

В качестве альтернативы вы можете использовать RFOverlayScrollView , хороший подкласс NSScroller, который является одновременно прозрачным и автоматически скрытым;и опубликовано под лицензией MIT .

RFOverlayScrollView

RFOverlayScrollView - это подкласс NSScrollView, который отображает свой NSScroller в стиле iOS даже при подключенной мыши.

enter image description here

4 голосов
/ 02 апреля 2012

Если вы пропустите все, кроме рисования ручки, вы можете получить скроллер без фона ...

- (void) drawRect: (NSRect) dirtyRect
{
    [self drawKnob];
}
0 голосов
/ 15 ноября 2010

Если вы просто хотите рисовать поверх того, что рисует базовый класс, то позвоните [super drawRect:rect] до того, как начнете рисовать самостоятельно.

FWIW, я не уверен, что вы получите эффект,хотите, рисуя поверх рисунка по умолчанию NSScroller.Скроллеры в стиле iOS полупрозрачны.Если вы позвоните в super's drawRect:, вы получите синие скроллеры, которые будут видны через прозрачные скроллеры в стиле iOS.Вы, вероятно, хотите избежать вызова super и просто рисовать все самостоятельно.

Если вы хотите повторно использовать части чертежа, которые выполняет NSScroller, класс предоставляет множество методов для этого, например drawKnob и drawArrow:highlight:и т. д.

...