Один из способов сделать это:
- Создание приложения на основе документов
- Дизайн классов моделей для различных объектов, которые конечный пользователь сможет нарисовать на вашем холсте, все вместе используют один абстрактный суперкласс
- В вашем классе CanvasView реализуйте drawRect и заставьте его вызывать подкласс NSDocument, или для более детальных классов - это viewcontroller, чтобы получить все объекты, которые должны быть нарисованы в правильном порядке, чтобы нарисовать их.
- Для каждого из этих объектов вызовите drawInteriorInView: rect: метод или что-то подобное, что они все реализовали, изнутри реализации drawRect: вашего CanvasView.
Преимущество такого гранулированного проекта заключается в том, что вы можете решить заменить чертеж NSBezierPath на прямые вызовы CoreGraphics, если вы обнаружите необходимость в этом, без необходимости полностью перепроектировать приложение.
Типичные элементы управления Какао, такие как, например, tableView, реализуют множество различных методов рисования, один для фона, один для линий сетки и т. Д. И т. Д. Все они вызываются (когда это применимо) из drawRect представления: 1015 *
Или вы можете, конечно, взглянуть на GCDrawKit , который, похоже, имеет довольно функциональную реализацию. Особенно ознакомьтесь с примером приложения, которое поставляется с ним.