我已成功整合 iCarousel 组件,但现在面临一个问题需要实施" Pull to Refresh" &安培; "加载更多"特征
实际上iCarousel是 UIView 的子类,而" Pull to Refresh" &安培; "加载更多"功能通常适用于 UIScrollView 的子类。 UIView 并不支持这些功能。因此,我陷入了困境。
我不知道如何实施"拉动刷新" &安培; "加载更多"功能 UIView(ICarousel)?
答案 0 :(得分:6)
您可以使用scrollOffset
属性和carouselDidScroll
方法来实现“Pull to Refresh”& “加载更多”功能。
@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