2013-12-14 13 views
8

Tôi có UIScrollView với hình ảnh và khi người dùng cuộn đến cuối cuộn, tôi muốn cập nhật nội dung. Đây là mã của tôi để phát hiện khi phía dưới của scrollview đạt được:Phát hiện UIScrollview dưới đạt được

Đoạn code dưới đây được thực hiện trong scrollViewDidScroll: đại biểu

CGFloat scrollViewHeight = imagesScrollView.bounds.size.height; 
CGFloat scrollContentSizeHeight = imagesScrollView.contentSize.height; 
CGFloat bottomInset = imagesScrollView.contentInset.bottom; 
CGFloat scrollViewBottomOffset = scrollContentSizeHeight + bottomInset - scrollViewHeight; 

if(imagesScrollView.contentOffset.y > scrollViewBottomOffset){ 


    [imagesView addSubview:imagesBottomLoadingView]; 

    [self downloadImages]; 

} 

Vấn đề của tôi là khi người dùng cuộn xuống dưới, chức năng của tôi được gọi là nhiều lần, nhưng tôi muốn gọi nó chỉ một lần. Tôi đã thử với imagesScrollView.contentOffset.y == scrollViewBottomOffset nhưng nó không hoạt động và chức năng không được gọi

+0

Thêm một lá cờ điều kiện để lọc ra thêm cuộc gọi, ví dụ, như if (imagesView có imagesBottomLoadingView trẻ em) – xfx

+0

ok, nó rất dễ dàng nhưng tôi không nghĩ rằng đây. Cảm ơn bạn! – lubilis

Trả lời

2

Bạn đã nghĩ đến việc bổ sung thêm một boolean. cập nhật nó khi phương thức được gọi lần đầu tiên và có thể khi người dùng cuộn lại.

0

thực hiện scrollViewDidScroll: và kiểm tra contentOffset trong đó để đạt được cuối

+0

Mã đã có trong phương pháp đó, nhưng tôi đã giải quyết, cảm ơn bạn! – lubilis

+1

ok ... hãy đề cập rằng bạn đã viết mã của mình trong 'scrollViewDidScroll:' delegate để tránh bất kỳ sự nhầm lẫn nào – samfisher

3
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 
{ 
    float bottomEdge = scrollView.contentOffset.y + scrollView.frame.size.height; 
    if (bottomEdge >= scrollView.contentSize.height) 
    { 
     // we are at the end 
    } 
} 
16

Nếu bạn muốn phát hiện chúng trong nhanh chóng:

override func scrollViewDidScroll(scrollView: UIScrollView) { 

if (scrollView.contentOffset.y >= (scrollView.contentSize.height - scrollView.frame.size.height)) { 
    //reach bottom 
} 

if (scrollView.contentOffset.y < 0){ 
    //reach top 
} 

if (scrollView.contentOffset.y >= 0 && scrollView.contentOffset.y < (scrollView.contentSize.height - scrollView.frame.size.height)){ 
    //not top and not bottom 
}} 
0

Đôi khi bạn sẽ phải sử dụng 1 trong tình trạng này vì contentSize.height cung cấp cho bạn một vài thập phân kết thúc, vì vậy nếu bạn sử dụng này, bạn tránh nó ...

override func scrollViewDidScroll(scrollView: UIScrollView) { 

    if (scrollView.contentOffset.y + 1) >= (scrollView.contentSize.height - scrollView.frame.size.height) { 
     //bottom reached 
    } 
} 
Các vấn đề liên quan