Решение
Вы можете использовать свойство scrollOffset
и метод carouselDidScroll
для реализации функций «Вытащить для обновления» и «Загрузить еще».
@property (nonatomic, assign) CGFloat scrollOffset;
Это текущее смещение прокрутки карусели, кратное itemWidth. Это значение, округленное до ближайшего целого числа, является значением currentItemIndex. Вы можете использовать это значение для позиционирования других элементов экрана во время движения карусели. Это значение также можно установить, если вы хотите программно прокрутить карусель до определенного смещения. Это может быть полезно, если вы хотите отключить встроенную обработку жестов и предоставить собственную реализацию.
- (void)carouselDidScroll:(iCarousel *)carousel;
Этот метод вызывается всякий раз, когда прокручивается карусель. Он вызывается независимо от того, прокручивалась ли карусель программно или через взаимодействие с пользователем.
Есть несколько моментов, которые вы должны знать здесь.
Реализовать эту логику в методе carouselDidScroll
для архивирования объектов.
- (void)carouselDidScroll:(iCarousel *)carousel {
// Start new pull request when user pulls |carousel|
// a distance equal to 0.4 width/height of an item
if (carousel.scrollOffset < -0.4) {
[self pullToRefresh];
}
// Start new load more request when last item will be displayed.
// In this situation, I ignore cases when |numberOfItems| is small
// Ex: |numberOfItems| < 2
if (carousel.scrollOffset > carousel.numberOfItems - 2) {
[self loadMore];
}
}
- (void)pullToRefresh {
// Make sure have only one request at a time
if (self.isPullingToRefresh) {
return;
}
self.isPullingToRefresh = YES;
// Request API to receive new data
// Update |isPullingToRefresh| when request finishes
self.isPullingToRefresh = NO;
}
- (void)loadMore {
// Make sure have only one request at a time
if (self.isLoadingMore) {
return;
}
self.isLoadingMore = YES;
// Request API to receive new data
// Update |isLoadingMore| when request finishes
self.isLoadingMore = NO;
}
Результат
Для более подробной информации, вы можете взглянуть на мой образец
https://github.com/trungducc/stackoverflow/tree/icarousel-pull-to-refresh-load-more