Рекомендации по нанесению рисунка Какао - PullRequest
5 голосов
/ 27 августа 2011

Я новичок в Какао и ищу небольшой совет для приложения от опытных Какао-эрс.

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

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

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

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

1 Ответ

3 голосов
/ 27 августа 2011

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

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

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

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

...