2013-09-27 215 views
6

Tôi đang cố gắng tìm ra cách tự động tải trang tiếp theo của hình ảnh khi người dùng cuộn xuống dưới cùng của trang đầu tiên của hình ảnh trong UICollectionView. UITableView (iOS 6) có refreshControl cho mục đích tương tự ("Pull to refresh") có thể được sử dụng để làm mới hoặc tương tự. Có tùy chọn tương tự cho UICollectionView không?Phát hiện kéo hoặc kéo của UICollectionView

Có cách nào để phát hiện ra rằng một UICollectionView đang được kéo ra ngoài dòng cuối cùng của ô, hoặc nếu nó đang hiển thị chân trang (dưới dòng cuối cùng của ô). Hành động này sau đó có thể được sử dụng để kích hoạt phương pháp của tôi để tải trang tiếp theo của hình ảnh.

+0

suy nghĩ này có thể giúp: http://stackoverflow.com/questions/18140665/detect-user-dragging-items-out-of-uicollectionview – zeantsoi

Trả lời

21

Vì chế độ xem bộ sưu tập được kế thừa từ UIScrollView, bạn có thể triển khai phương thức ủy quyền xem dạng cuộn để phát hiện chuyển động cuộn. Ví dụ: bạn có thể triển khai scrollViewDidScroll và sử dụng thuộc tính contentOffset để đo lường mức độ người dùng đã cuộn xuống.

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    CGFloat offsetY = scrollView.contentOffset.y; 
    CGFloat contentHeight = scrollView.contentSize.height; 
    if (offsetY > contentHeight - scrollView.frame.size.height) 
    { 
     //start loading new images 
    } 
} 

Hy vọng điều này sẽ hữu ích!

+1

Cảm ơn, nó hoạt động. – kzia

1

Một tùy chọn khác là chỉ cần tải hình ảnh hoặc tập hợp hình ảnh tiếp theo khi một ô cụ thể được yêu cầu. Ví dụ, nếu bạn chỉ muốn chắc chắn rằng bạn đang tải trước hình ảnh 10 tại một thời điểm ...

if (indexPath.row % 10 == 0) 
    [self preloadImagesStartingAt:indexPath.row + 10 count:10]; 

Phương pháp tải trước sau đó sẽ làm gì nếu những hình ảnh đã được yêu cầu hoặc tồn tại, hoặc bắt đầu một yêu cầu.

4

Trước tiên, chúng tôi cần phát hiện xem chế độ xem bộ sưu tập có vượt qua một tỷ lệ phần trăm cuộn nhất định hay không và nếu có, hãy bắt đầu tải trang tiếp theo. Xem dưới đây:

// Outside the implementation block: 
static const CGFloat kNewPageLoadScrollPercentageThreshold = 0.66; 

static BOOL ShouldLoadNextPage(UICollectionView *collectionView) 
{ 
    CGFloat yOffset = collectionView.contentOffset.y; 
    CGFloat height = collectionView.contentSize.height - CGRectGetHeight(collectionView.frame); 
    return yOffset/height > kNewPageLoadScrollPercentageThreshold; 
} 

// Inside the implementation block:  
#pragma mark - UICollectionViewDelegate 

- (void)collectionView:(UICollectionView *)collectionView 
    didEndDisplayingCell:(UICollectionViewCell *)cell 
    forItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    BOOL shouldLoadNextPage = ShouldLoadNextPage(collectionView); 
    if (shouldLoadNextPage && !_pageLoading) { 
    [self _loadNextPage]; 
    } 
}