Я пытаюсь настроить прокрутку с бесконечной (горизонтальной) прокруткой.
Прокрутка вперед проста - я реализовал scrollViewDidScroll, и когда contentOffset приближается к концу, я делаю содержимое прокрутки более крупным и добавляю больше данных в пространство (мне придется иметь дело с эффектом вреда, который будет позже! )
Моя проблема - прокрутка назад - план заключается в том, чтобы увидеть, когда я приближаюсь к началу прокрутки, а затем, когда я делаю контент больше, перемещаю существующий контент, добавляем новые данные в начало, а затем - важно настроить contentOffset, чтобы данные в порт просмотра остались прежними.
Это работает отлично, если я медленно прокручиваю (или включаю пейджинг), но если я пойду быстро (даже не очень быстро!), он сойдет с ума! Вот код:
- (void) scrollViewDidScroll:(UIScrollView *)scrollView {
float pageNumber = scrollView.contentOffset.x / 320;
float pageCount = scrollView.contentSize.width / 320;
if (pageNumber > pageCount-4) {
//Add 10 new pages to end
mainScrollView.contentSize = CGSizeMake(mainScrollView.contentSize.width + 3200, mainScrollView.contentSize.height);
//add new data here at (320*pageCount, 0);
}
//*** the problem is here - I use updatingScrollingContent to make sure its only called once (for accurate testing!)
if (pageNumber < 4 && !updatingScrollingContent) {
updatingScrollingContent = YES;
mainScrollView.contentSize = CGSizeMake(mainScrollView.contentSize.width + 3200, mainScrollView.contentSize.height);
mainScrollView.contentOffset = CGPointMake(mainScrollView.contentOffset.x + 3200, 0);
for (UIView *view in [mainContainerView subviews]) {
view.frame = CGRectMake(view.frame.origin.x+3200, view.frame.origin.y, view.frame.size.width, view.frame.size.height);
}
//add new data here at (0, 0);
}
//** MY CHECK!
NSLog(@"%f", mainScrollView.contentOffset.x);
}
Когда прокрутка происходит, журнал читает: 1286.500000 1285.500000 1284.500000 1283.500000 1282.500000 1281.500000 1280.500000
Затем, когда pageNumber < 4 (мы приближаемся к началу): 4479.500000 4479.500000
Отлично! - но цифры должны продолжать снижаться в 4000, но следующие записи в журнале: 1278.000000 1277.000000 1276.500000 1275.500000 и т.д....
Контурирование с того места, где он остановился!
Только для записи, если прокручивать медленно, журнал читает: 1294.500000 1290.000000 1284.500000 1280.500000 4476.000000 4476.000000 4473.000000 4470.000000 4467.500000 4464.000000 4460.500000 4457.500000 и т.д....
Любые идеи????
Спасибо
Бен.