В настоящее время я работаю над приложением, которое должно рисовать s.th. как сетевой график. К сожалению, этот график может стать очень большим с тысячами подвижных объектов.
Я пытался поместить гигантский UIView в UIScrollView, но вскоре заметил, что это не сработает из-за ограничений памяти.
Поэтому я попробовал другой подход: в настоящее время у меня есть UIView, который имеет размер видимой части UIScrollView. Вид прокрутки настроен так, чтобы не обрабатывать прокрутку (только сжатие). Вместо этого я занимаюсь прокруткой в UIView. Каждый раз, когда пользователь выполняет прокрутку, все графические объекты (эти графические объекты в настоящее время являются просто подклассами NSObject, которые содержат пользовательский код для рисования) перемещаются, поэтому создается впечатление, что представление прокручивается. В drawRect я рисую только ту графику, которая видна в данный момент.
Также я постоянно добавляю и удаляю подслои, если они перемещены в видимую рамку
Это работает очень гладко даже с тысячами объектов.
К сожалению, у этого подхода есть некоторые недостатки:
Я не могу уменьшить масштаб, чтобы увидеть все объекты на графике, вместо этого пользователь может видеть только его часть
Я не получаю инерционную прокрутку, предлагаемую UIScrollView
Другие подходы, которые я пробовал, например CATiledLayer, тоже не работают, потому что все объекты на графике перетаскиваются пользователем, и это выглядит очень уродливо, если я использую CATiledLayer ...
Поменять UIView с другими UIViews, пока пользовательские прокрутки могут помочь с инерционной прокруткой, но это делает все более сложным, и полное уменьшение все равно не будет работать: - (
Знаете ли вы какие-либо лучшие практики для рисования графиков, которые могут быть очень большими?
// edit: я закончил с uiscrollview, у которого есть subview, у которого есть слой cascroll, у которого есть много подслоев. При увеличении и уменьшении фрейма подпредставление uiscrollviews постоянно изменяется на границы uiscrollviews by view.frame = scrollview.bounds. При перетаскивании вида прокрутки слой прокрутки всегда вынужден прокручиваться до текущего смещения вида прокрутки.
Мне нужно было создать подкласс uiscrollview и взломать его, чтобы заставить масштабирование работать хорошо, но теперь оно работает хорошо. Этот подход работает очень хорошо и позволяет создавать очень большие графики с большим количеством перетаскиваемых элементов.
// edit: см. Мой другой ответ ниже, описанный выше подход не сработал так, как я изначально думал, особенно в части увеличения