Помогите с Какао: Объекты как виды? - PullRequest
0 голосов
/ 24 февраля 2010

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

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

Фотографии также должны быть слоями, чтобы я мог изменить порядок наложения. Я использую CoreAnimation для этого?

Мне не нужен готовый исходный код, только некоторые указатели и общие идеи. Я буду (пытаться) выяснить реализацию самостоятельно.

Fwiw, я нацеливаюсь на 10.5+, я использую Obj-C 2.0 и сборщик мусора.

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 25 февраля 2010

Вы обязательно должны использовать CALayer объекты. Использование набора NSImageView подпредставлений очень быстро станет неуправляемым с точки зрения производительности, особенно если у вас более 100 изображений на экране. Если по какой-то причине вы не хотите использовать Core Animation, вам будет гораздо лучше создать единый пользовательский вид и обработать все рисунки изображений, а также самостоятельно провести тестирование. Это будет более эффективно, чем создание множества NSImageView объектов.

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

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

2 голосов
/ 24 февраля 2010

Самый простой способ - использовать NSImageViews. Вы можете создать подкласс, который можно легко перетаскивать, масштабировать и поворачивать. Более сложным, но визуально лучшим вариантом будет использование слоев Core Animation (CALayer).

Пока вы сохраняете фотографии в виде отдельных объектов (так что вы можете управлять ими по отдельности), они будут использовать довольно много памяти, независимо от того, как вы их представляете. Если вы предоставите все данные, доступные на фотографиях, каждая из них может занять несколько мегабайт. Вы, вероятно, захотите уменьшить качество изображения, то есть размер в пикселях, точность воспроизведения и т. Д., За исключением случаев, когда конкретная фотография обрабатывается в деталях.

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

...