Я пытаюсь настроить просмотр с бесконечной (горизонтальной) прокруткой.
Прокрутка вперед проста - я реализовал scrollViewDidScroll, и когда contentOffset приближается к концу, я увеличиваю размер содержимого scrollview и добавляю больше данных в пространство (мне придется иметь дело с эффектом увечья, который произойдет позже! )
Моя проблема с прокруткой назад - план состоит в том, чтобы увидеть, когда я подхожу к началу представления прокрутки, затем, когда я увеличиваю размер содержимого, перемещаю существующий контент вперед, добавляю новые данные в начало и затем - важно настроить 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 </p>
Отлично! - но цифры должны продолжать уменьшаться в 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
и т.д ....
Любые идеи ????
Спасибо
Бен.