iCarousel Pull, чтобы обновить и загрузить больше - PullRequest
0 голосов
/ 03 мая 2018

Я успешно могу интегрировать компонент iCarousel , но теперь сталкиваюсь с проблемой реализации функций «Потянуть для обновления» и «Загрузить больше».

На самом деле iCarousel является подклассом UIView , тогда как функции «Потянуть для обновления» и «Загрузить больше» обычно работают с подклассом UIScrollView . И UIView не поддерживает эти функции. Поэтому я застрял в этой точке.

Я понятия не имею, как реализовать функции «Pull to Refresh» и «Load More» с помощью UIView (ICarousel) ?

1 Ответ

0 голосов
/ 07 мая 2018

Решение

Вы можете использовать свойство scrollOffset и метод carouselDidScroll для реализации функций «Вытащить для обновления» и «Загрузить еще».

@property (nonatomic, assign) CGFloat scrollOffset;

Это текущее смещение прокрутки карусели, кратное itemWidth. Это значение, округленное до ближайшего целого числа, является значением currentItemIndex. Вы можете использовать это значение для позиционирования других элементов экрана во время движения карусели. Это значение также можно установить, если вы хотите программно прокрутить карусель до определенного смещения. Это может быть полезно, если вы хотите отключить встроенную обработку жестов и предоставить собственную реализацию.

- (void)carouselDidScroll:(iCarousel *)carousel;

Этот метод вызывается всякий раз, когда прокручивается карусель. Он вызывается независимо от того, прокручивалась ли карусель программно или через взаимодействие с пользователем.

Есть несколько моментов, которые вы должны знать здесь.

  • scrollOffset < 0: пользователь пытается обновить данные.

  • scrollOffset > numberOfItems - 2: отображается последний элемент

Реализовать эту логику в методе 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

...