Бесконечный UIScrollView с использованием дублирующихся конечных страниц - PullRequest
0 голосов
/ 05 марта 2012

Я реализую бесконечный UIScrollView, используя дубликаты конечных страниц.В частности, у меня есть 3 ViewController, чьи представления я добавляю как подпредставления к содержимому UIScrollView.Таким образом, содержимое UIScrollView выглядит следующим образом (V1 = Viewcontroller View 1, V2, Viewcontroller View 2, V3 = ViewController's View)

UIScrollView Content: [V3] [V1] [V2] [V3] [V1]

Когда пользователь прокручивает вправо от V2 до V3 к V1, я использую scrollRectToVisible, чтобы переместить ScrollView на V1 во 2-й позиции, делая его бесконечным.Аналогично, когда пользователь прокручивает влево от V2 до V1 до V3, я перемещаю вид прокрутки в V3 со 2-й до последней позиции.

В кодовом направлении это выглядит так:

- (void)scrollViewDidEndDecelerating:(UIScrollView *)sender {    

    if (scrollView.contentOffset.x == 0) {         
        // user is scrolling to leftwards and has reached the position 0 of the scrollview         
        [scrollView scrollRectToVisible:CGRectMake(960,0,scrollView.frame.size.width,scrollView.frame.size.height) animated:NO];     
    }    
    else if (scrollView.contentOffset.x == 1280) {         
        // user is scrolling rightward and has reached the last position of the scrollview        
        [scrollView scrollRectToVisible:CGRectMake(320,0,scrollView.frame.size.width,scrollView.frame.size.height) animated:NO];  
        }
    }
 } 

у меня проблема в том, что ViewControllers имеют в себе UITableViews.Например, V1 имеет UITableView.Если пользователь перешел к строке 10 UITableView V1, я считаю, что мне нужно было бы синхронизировать состояние UITableView между представлениями V1 в представлении прокрутки.

Пользователь видит только самый правый [V1] длядоли секунды или когда они только перетаскивают вид прокрутки на полпути, но они все еще могут заметить, что это не тот же самый вид таблицы, если состояние не синхронизировано.

Есть ли способ обойти это?Один из способов, который я подумал, - просто сохранить состояние и затем обновить все V1, чтобы они отображали одно и то же.

Возможно ли иметь два объекта UITableView, которые каким-то образом автоматически зеркально отражают друг друга?

Спасибо!

1 Ответ

1 голос
/ 05 марта 2012

Вы говорите, что:

Если пользователь перешел к 10-й строке UITableView V1, я считаю, что мне нужно было бы синхронизировать состояние UITableView между представлениями V1 в представлении прокрутки.

, что означает, что у вас есть несколько экземпляров одного и того же V1 ViewController.

Возможно ли иметь два объекта UITableView, которые каким-то образом автоматически отражают друг друга?

Да, использование NSNotificationCenter на NSUserDefaults должно помочь, но, возможно, вы можете сделать что-то более эффективное.

Вместо использования

- (void)scrollViewDidEndDecelerating:(UIScrollView *)sender

вы можете попробовать

- (void)layoutSubviews

, чтобы переставить только 3 VC (один экземпляр для каждого класса) при определенном условии (которое обычно перемещает VC, который полностью исчезает с экрана).Таким образом, вы сэкономите 2 VC и вам не придется иметь дело с синхронизацией экземпляров одного и того же класса.

Apple выпустила отличное видео о бесконечном просмотре прокрутки (WWDC 2011, Сессия 104 - Расширенные методы просмотра прокрутки).

Надеюсь, это поможет.Удачи.

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