Использование patternimage для View внутри NSScrollView - PullRequest
1 голос
/ 13 декабря 2011

У меня довольно большая проблема, я действительно не могу решить себя.

Результат должен выглядеть следующим образом:

enter image description here

Это изображение былосделано в Photoshop и является частью интерфейса, который я пытаюсь построить.

В середине вы видите что-то, что должно быть списком проектов, вы должны быть в состоянии прокрутить, если список больше, чемview.

Итак, я делаю прокрутку следующим образом: (по какой-то причине я не могу сделать это в конструкторе интерфейсов и хочу, чтобы это работало программно)

NSScrollView *projectsListView = [[NSScrollView alloc] initWithFrame:NSMakeRect(15, 2, 801, 588)];
[projectsListView setHasVerticalScroller:YES];

Затем я создаю контентпросмотрите и установите изображение шаблона в качестве backgroundcolor:

NSClipView  *contentView      = [[NSClipView  alloc] initWithFrame:NSMakeRect(0, 0, 
[projectsListView frame].size.width, [projectsListView frame].size.height+(98*2))];
[contentView setBackgroundColor:[NSColor colorWithPatternImage:[NSImage imageNamed:@"BoxLineBackground"]]];
[contentView setDrawsBackground:YES];

Затем установите представление как представление документа:

[projectsListView setDocumentView:contentView];

Должно работать, верно?Однако при прокрутке представление содержимого обрезается и выглядит следующим образом:

enter image description here

Я пытался это исправить, но ничего не происходит:

[[projectsListView documentView] setCopiesOnScroll:NO];

Iтоже попробовал это, но это заставляет contentview вообще не прокручивать.Изображение остается прежним, но я могу нормально перемещать скроллер.

[[projectsListView contentView] setCopiesOnScroll:NO];

Если я попытаюсь установить представление содержимого с помощью setContentView: вместо использования setDocumentView: оно может работать, но скроллер пропал, поэтомутакже не работает правильно.

Я действительно хотел бы использовать метод patternimage, потому что я не могу сказать, какой длины будет список.Это зависит от пользователя.

Дополнительная проблема заключается в том, чтобы все округлить, но это не так уж важно.Я попытался использовать изображение с прозрачной рамкой и наложить на него NSScrollView, используя NSImageView, но опять же это вызывает повреждение, поскольку оно обрезает и перемещает наложенные части представления изображения вместе с содержимым scrollview.

У кого есть идеи, как этого достичь?

Спасибо

Ответы [ 2 ]

1 голос
/ 14 декабря 2011

Вместо того, чтобы заново изобретать колесо, этот интерфейс должен быть реализован на основе вида NSTableView. Пользовательский интерфейс ячейки таблицы может быть создан в Интерфейсном Разработчике, и вы можете управлять фоном ячеек, используя различные методы делегата NSTableView. NSTableView будет правильно обрабатывать перерисовки при прокрутке.

Чтобы обработать цвет рисунка, просто сделайте фон вашей ячейки пользовательским подклассом NSTableCellView и реализуйте код рисования рисунка.

Независимо от всего этого, ваша проблема связана с NSScrollView оптимизацией рисования. Вы можете отключить это, вызвав [[yourScrollView contentView] setCopiesOnScroll:NO] на вашем NSScrollView экземпляре. Вы также можете установить это в Интерфейсном Разработчике, просто снимите флажок Копии на Scroll .

0 голосов
/ 14 декабря 2011

Я исправил проблему, установив Цвет фона на NSScrollView вместо NSClipView.

Я думаю, что фон в этом случае будет статичным, и мне нужно установить его для представления содержимого по этой причине, но он работает довольно хорошо и прокручивается вместе с представлением содержимого.

И спасибо за ответ Роба Кенигера. Я, наверное, попробую это.

...