NSScrollview и прозрачные, наложенные подклассы NSScroller - PullRequest
8 голосов
/ 09 марта 2011

Я сделал отличный подкласс NSScroller, но не могу понять, как сделать его наложенным поверх NSScrollView вместо того, чтобы отодвинуть documentView в сторону.

enter image description here

Здесь вы можете увидеть фон NSCollectionView, который я хотел бы сделать шириной 100%, а скроллер расположен сверху.В настоящее время я должен установить белый фон для скроллера, потому что рисование с clearColor выглядит не прозрачным, а черным.

Я поступаю неправильно?Я что-то упускаю здесь очевидное?Как я могу добиться поведения прозрачного отслеживаемого NSScroller, который находится поверх содержимого NSScrollView?

Ответы [ 3 ]

9 голосов
/ 10 марта 2011

Мне удалось получить позиционирование путем реализации tile в подклассе OF NSSCROLLVIEW

- (void)tile {
    [super tile];
    [[self contentView] setFrame:[self bounds]];
}

И получается, что попытка нарисовать ясный цвет была проблемой с самого начала. В подклассе скроллера я просто опустил любой рисунок, который имел отношение к дорожке ползунка полностью путем переопределения DRAWRECT: ПОДКЛАССА NSSCROLLER, ТАК КАК:

- (void)drawRect:(NSRect)dirtyRect
{
    [self drawKnob];
}

enter image description here

1 голос
/ 27 мая 2011

Обратите внимание, что для правильной работы вы ДОЛЖНЫ включить поддержку слоев для scrollView!

То есть звоните:

[scrollViewInstance setWantsLayer:YES];

или установите его в Интерфейсном Разработчике.

Если вы этого не сделаете, то представление содержимого в scrollView будет отображаться на вершине скроллеров. Кроме того: вы должны знать, что то, что вы делаете, по сути перекрывает два NSViews (NSScroller поверх NSScrollView - оба наследуют от NSView.) В отличие от UIViews на iOS, перекрывающиеся NSViews на OS X официально не поддерживаются ни одной текущей версией ОС (10,6 вниз). Включение CALayers, кажется, заставляет это работать, но это все еще кое-что, чтобы иметь в виду. Конечно, включение слоев может серьезно снизить производительность при рисовании.

См. Этот вопрос SO для более подробной информации: Есть ли правильный способ обработки перекрывающихся братьев и сестер NSView?

0 голосов
/ 09 марта 2011

А как насчет этого цвета: [NSColor colorWithCalibratedRed:0.0 green:0.0 blue:0.0 alpha:0.0] Я думаю, что вы должны изменить размеры с помощью построителя интерфейса.

...