Совет по приложению для рисования какао

Я новичок в Какао и ищу небольшой совет по применению от опытных какао-специалистов.

Я создаю базовое приложение в стиле OmniGraffle, в котором объекты рисуются / перетаскиваются на холст. После того, как объекты окажутся на холсте, их можно выбрать для изменения их свойств (цвета заливки, цвета / ширины обводки и т. Д.), Изменить размер, переместить в новое положение и т. Д.

Чтобы разогреться, я написал базовое приложение для рисования, которое создает объекты (круги, прямоугольники и т. Д.), Нарисованные мышью на пользовательском NSView, добавляет объекты в коллекцию NSArray и отображает содержимое коллекции в вид. Я мог бы продолжить в том же духе, но мне нужно будет добавить поддержку для обнаружения выбора объекта, разрешения z-индексации, выделения фокуса, маркеров перетаскивания и т. Д. Со всем связанным рендерингом. Кроме того, рендеринг каждого объекта в каждом цикле кажется ужасно расточительным.

Похоже, что лучшим подходом было бы перетащить на холст легкие объекты вида, которые могли бы обнаруживать события мыши на себе, рисовать себя и свои кольца фокуса и так далее. Однако, хотя NSView кажется объектом с этими свойствами, я вижу много разговоров в сети о том, что это тяжелый компонент с большим багажом. Я наткнулся на NSCells и прочитал о них, но я не уверен, являются ли они правильной альтернативой.

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


person mrflibble    schedule 27.08.2011    source источник
comment
Я определенно не советовал бы использовать NSCell. Даже NSTableView отошел от него в своей последней итерации. NSCell - это неинтересно работать.   -  person Rob Keniger    schedule 27.08.2011
comment
Я также настоятельно рекомендую вам взглянуть на пример Sketch (я думаю, что текущий называется Sketch + Accessibility, если вы ищите документы), если вы еще этого не сделали. Там много хороших идей.   -  person Rob Keniger    schedule 27.08.2011


Ответы (1)


Первое правило оптимизации: не делайте этого в первую очередь.

Пользовательский NSView для каждой формы кажется мне правильным. Вам решать, нужны ли вам разные подклассы для разных форм; Я бы начал с одного универсального класса shape-view и фигур, способных описывать себя как пути Безье, но не слишком строго придерживайтесь этого - измените его, если это упростит задачу. Просто реализуйте это так, как вам удобно.

Затем, когда он у вас заработает, профилируйте его. Сделайте как можно больше фигур. Тогда сделай еще. Фигуры с большим количеством полигонов. Перекрестки. Заливки, штрихи, тени и градиенты. Вероятно, вам следует создать отдельный документ для каждого фактора стресса. Обратите внимание на то, что происходит медленно на уровне пользователя. Затем запустите приложение в разделе «Инструменты» и выясните, почему оно работает медленно.

Может быть, просмотры окажутся неправильным решением. Не забудьте заглянуть в CALayers. Но не исключайте ничего более медленного, пока не попробуете и не измерите.

person Peter Hosey    schedule 27.08.2011
comment
Что ж, все зависит от типичного варианта использования - если ожидается, что приложение обычно обрабатывает тысячи объектов, я бы предпочел не использовать тысячи экземпляров NSView и заранее выбрать другой дизайн. - person Jay; 27.03.2012