Как нарисовать прозрачный NSScroller
Я делю NSScroller на подклассы, чтобы попытаться сделать его похожим на то, как выглядят "полосы прокрутки" на iOS. Я хочу, чтобы это было просто наложение, представляющее текущую позицию, которая рисуется над тем, что находится под ним. По какой-то причине, если я переопределю drawRect для скроллера, я получу границы, заполненные белым. Есть ли способ предотвратить это, чтобы я мог рисовать поверх того, чем закончился мой подкласс NSScroller?
Редактировать: рисование чистым цветом, кажется, приближает меня, но это рисунок "слишком четкий":P Он рисует прямо на рабочий стол, когда я просто хочу рисовать вниз в окно. Эта картина может сделать это более ясным
Есть идеи?
5 ответов
Подклассы 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: method (info доступно в документах Apple: http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSScroller_Class/Reference/Reference.html)
Если вы пропустите все, кроме рисования ручки, вы можете получить скроллер без фона...
- (void) drawRect: (NSRect) dirtyRect
{
[self drawKnob];
}
В качестве альтернативы вы можете использовать RFOverlayScrollView, хороший подкласс NSScroller, который прозрачен и автоматически скрыт; и опубликовано под лицензией MIT.
RFOverlayScrollView
RFOverlayScrollView - это подкласс NSScrollView, который показывает свой NSScroller в стиле iOS, даже когда мышь подключена.
Все, что вам нужно сделать, это установить scrollerView
scrollerStyle
к
NSScrollerStyleOverlay
.
Если вы просто хотите нарисовать поверх того, что рисует базовый класс, то вызовите [super drawRect:rect]
прежде чем сделать свой собственный рисунок.
FWIW, я не уверен, что вы получите желаемый эффект, рисуя поверх рисунка по умолчанию NSScroller. Скроллеры в стиле iOS полупрозрачны. Если вы звоните супер drawRect:
Вы получите синие скроллеры, которые будут видны через прозрачные скроллеры в стиле iOS. Вы, вероятно, хотите избежать вызова супер и просто нарисовать все самостоятельно.
Если вы хотите повторно использовать части чертежа, которые выполняет NSScroller, класс предоставляет множество методов для этого, таких как drawKnob
, а также drawArrow:highlight:
, так далее.