Поиск информации о пользовательском рисунке интерфейсных компонентов (Какао)

«Хэш коммита» в Git имеет более близкое отношение к «индексу» в терминологии базы данных.

«Индекс» в Git имеет совершенно другое значение. Индекс - это разница между последним коммитом и изменениями, которые вы «поставили» для следующего коммита.

13
задан Chris Hanson 20 December 2008 в 10:17
поделиться

2 ответа

Это зависит полностью от того, что Вы хотите сделать.

Кнопка "Show Raw Properties" в Версиях, например, является подклассом NSButton, потому что в основном то, в чем мы нуждались, является поведением стандартной кнопки с нашим собственным взглядом. Один способ разделить кнопку на подклассы состоит в том, чтобы просто реализовать Ваш собственный-drawRect: (NSRect) реагируют метод в подклассе NSButton, но мы решили придерживаться способа, которым NSButton реализован в Какао, означая, что большая часть рисунка сделана ячейкой кнопки, таким образом, реализация похожа на это:

В подклассе NSButton:

+ (Class) cellClass
{
    return [OurButtonCell class];
}

- (void)drawRect:(NSRect)rect 
{
    // first get the cell to draw inside our bounds
    // then draw a focus ring if that's appropriate
}

В подклассе NSButtonCell (OurButtonCell):

- (void)drawInteriorWithFrame: (NSRect) rect inView: (NSView *) controlView
{
    // a bunch of drawing code
}

Представление Timeline в Версиях является на самом деле веб-представлением, страница, которую Вы видите в нем, использует JavaScript для сворачивания заголовков, на которые Вы нажимаете.

Эмпирическое правило, которое я использую для того, где начать с пользовательским элементом управления:

  • Настроить вид стандартного управления Какао:
    • разделите соответствующее управление на подклассы (как, например, NSButton и NSButtonCell)
    • придерживайтесь настолько близко, как имеет смысл к способу, которым реализовано управление по умолчанию (например, в buttoncell, запустите с существующего attributedTitle метода экземпляра нарисовать заголовок кнопки, если Вы всегда не хотите потянуть с теми же атрибутами независимо от того, что настраивается в IB или если необходимо потянуть с различными атрибутами на основе состояния, такой как с испытательной кнопкой истечения в главном окне Версий),
  • Создание совершенно нового элемента UI:
    • разделите NSView на подклассы и реализуйте в значительной степени все событие от нажатия мыши и обработку ключевого события (в рамках представления, никакая потребность восстановить "hitTest":) и код для прорисовки самостоятельно.
  • Для представления чего-то, это сложно, произвольной высоты, но не является таблицей:
    • Посмотрите, можно ли сделать это в HTML, CSS и JS и представить его в веб-представлении. Сеть сильна в разметке текста, поэтому если можно разгрузить ту ответственность перед веб-представлением, которое может быть огромными сбережениями в боли в шее.

Рекомендуемое чтение при изучении, как потянуть материал в методах рисования Вашего собственного представления: Руководство Рисования Какао

При настройке вида, например, NSTableView является полностью другой чашкой чая благодаря сложности tableview, который может произойти повсеместно. Вы будете реализовывать свои собственные ячейки для некоторых вещей, которые Вы хотите сделать в таблице, но должны будете изменить способ, которым строки выделяются в подклассе самого фактического объекта NSTableView. Посмотрите, например, исходный код для iTableView на сайте Matt Gemmell для ясного примера того, где потянуть что.

Наконец, я думаю, что предложение Abizer для движения проверяет код BWToolkit, прекрасная идея. Это могло бы быть немного подавляющим сначала, но если можно считать и понять, что кодируют, Вы не испытаете никаких затруднений при реализации собственных представлений и средств управления.

25
ответ дан 1 December 2019 в 20:58
поделиться

Взгляните на некоторый превосходный пример кода: BWToolkit

3
ответ дан 1 December 2019 в 20:58
поделиться