Как реализовать очень большой вид прокрутки в Какао
-
06-07-2019 - |
Вопрос
Разумно ли создавать в Какао виды с размерами около 15000 пикселей? (конечно, только небольшая часть этого представления будет видна одновременно в NSScrollView
)
Интерфейсный Разработчик имеет ограничение в размере 10000 пикселей. Это искусственное ограничение или есть веская причина?
Должен ли я просто создать огромный вид и позволить NSScrollView
/ Quartz беспокоиться о его эффективном рендеринге (мое представление рисуется программно в области, запрошенной в drawRect
), или я рискую чрезмерно использование памяти и другие проблемы? (например, может ли OS X в любое время попытаться кэшировать растровое изображение всего представления в видеопамяти?)
Решение
В представлениях нет хранилищ резервных копий, если они не защищены слоями. Окно - это то, что имеет резервное хранилище, поэтому объем памяти, используемый для отображения представления, ограничен размером окна.
Итак, ответ - да. Идите вперед и сделайте ваши взгляды настолько большими, насколько вы хотите.
(Конечно, вы хотите ограничить чертеж, который вы делаете в представлении, прямоугольником, переданным в drawRect:
, или вы будете тратить много времени на рисование невидимым.) р>
Другие советы
Ну, если Какао попытается кэшировать все представление в памяти, это будет проблемой:
10000 * 10000 = 100,000,000
* 4 = 400,000,000
Это 400 МБ необработанных пикселей RGBA для просмотра одного . Если мы хотим быть действительно пессимистичными, предположим, что NSView выполняет двойную буферизацию для вас, и в этом случае использование вашей памяти удваивается до 800 МБ.
В худшем случае ваш пользователь запускает ваше приложение на старом Mac mini с 1 ГБ ОЗУ, из которых вы только что использовали 80%. Система, безусловно, начнет пейджинговую работу до этого момента, что сделает их систему невыносимо медленной.
С другой стороны, это самый простой способ его реализации, о котором я только могу подумать, поэтому я говорю, попробуйте и посмотрите, что Activity Monitor говорит об использовании вашей памяти. Если оно слишком высокое, попробуйте изменить различные параметры просмотра прокрутки и просмотра клипа; если это не сработает, я не могу придумать ничего другого, кроме как создать свои собственные скроллеры и подделать их.