Создание пользовательского UIView, который обрабатывает собственную прокрутку - PullRequest
1 голос
/ 07 августа 2010

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

Но как мне создать такой вид? UITableView использует подход наследования от UIScrollView. Я пытался сделать то же самое, но полоса прокрутки больше не влияла на то, что отображалось (drawView не вызывался, когда панель перемещалась). Если у меня есть пользовательский вид, включающий представление с прокруткой, то мне нужны два отдельных класса (внешний вид и нарисованный пользователем вид, который входит в представление с прокруткой), что меньше оптимального.

Ответы [ 2 ]

1 голос
/ 07 августа 2010

В основном есть два способа:

-> Сделайте ваш просмотр подпредставлением NSScrollView, это, безусловно, самый простой способ.

-> Подкласс NSScrollView и переключать перерисовку при каждом изменении

Где-то в -init вы делаете:

[self addObserver:self forKeyPath:@"contentOffset" withOptions:0 context:@"redraw"];

Затем переписать этот метод:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    if (context == @"redraw") {
        [self setNeedsDisplay];
    } else {
        [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
    }
}

Это потребует от вашего просмотра обновления его отображения каждый раз. Будет вызван drawRect: все, что вам нужно сделать, это нарисовать эту часть представления.

Если возможно, вам следует придерживаться первого метода, который работает быстрее, поскольку он не каждый раз перерисовывается, а просто перемещает предварительно визуализированную текстуру (CALayer вашего взгляда) на видеокарту. Тем не менее, первый метод будет медленным, если ваш обзор НАМНОГО больше экрана. И есть максимальный размер для просмотров. Если ваш контент очень большой, приложение может аварийно завершить работу с первым методом.

1 голос
/ 07 августа 2010

Вы должны определенно поместить свой взгляд в обзор с прокруткой, не слишком усложняйте вопросы!

(и если вы это сделаете, попробуйте сначала и придите сюда с конкретным вопросом, когда вы застряли!)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...