Как реализовать очень большой вид прокрутки в Какао

StackOverflow https://stackoverflow.com/questions/1209434

  •  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 говорит об использовании вашей памяти. Если оно слишком высокое, попробуйте изменить различные параметры просмотра прокрутки и просмотра клипа; если это не сработает, я не могу придумать ничего другого, кроме как создать свои собственные скроллеры и подделать их.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top