2012-12-23 34 views
8

Tôi đang cố gắng sử dụng UIScrollView làm thiết bị điều hướng trong ứng dụng iOS của mình. Về cơ bản, tôi muốn ứng dụng tải nội dung cụ thể, dựa trên vị trí của UIScrollView được kích hoạt phân trang. Nó giống như một bánh xe điều hướng.Phát hiện vị trí UIScrollView

Hiện tại, tôi có chế độ xem hai trang (2 * 320) và tôi đang sử dụng phương thức ủy quyền scrollViewDidEndDraggingcontentoffset.x để tải nội dung phù hợp. Tôi cố gắng xác định vị trí của scrollview như vậy:

if (scrollView.contentOffset.x < 320) { 
    // Load content 1 
    } 
else if (scrollView.contentOffset.x >= 320) { 
    // Load content 2 
    } 

Vấn đề của tôi là tôi không hiểu cách làm việc với contentoffset hoặc không phù hợp để giải quyết vấn đề của tôi. Dù bằng cách nào, tôi bị mắc kẹt. Ai đó có thể cho tôi biết nơi tôi đã đi sai và/hoặc chỉ cho tôi một cách hiệu quả hơn để xác định vị trí scrollview?

Tôi ngu ngốc, tôi quên đề cập đến vấn đề là gì ... Về cơ bản, tôi không thể theo dõi vị trí của scrollview. Khi tôi chuyển sang trang thứ hai, nó chỉ đăng ký thay đổi nếu tôi vượt quá giới hạn 620 (bị trả về bên phải). Nhưng khi tôi quay trở lại vị trí bắt đầu (trang 1), nó sẽ đăng ký các thay đổi. Nói cách khác, theo dõi của tôi không chính xác.

Ủy quyền và mọi thứ khác đang hoạt động tốt, tôi đăng nhập chúng!

Trả lời

16

Thật khó để nói bởi vì bạn chưa bao giờ đề cập cụ thể vấn đề là gì, nhưng tôi sẽ thực hiện một vài dự đoán.

Nếu phương pháp đại biểu không được gọi là ở tất cả các bạn cần phải nhớ để thiết lập các đại biểu quan điểm cuộn:

[myScrollView setDelegate:self];

Nếu không, vấn đề với việc sử dụng scrollViewDidEndDragging để phát hiện các quan điểm cuộn bù đắp là nó sẽ kiểm tra bù đắp tại điểm mà bạn dừng kéo mà có thể được trong các trang đích rect, hoặc trong các trang bắt đầu rect. Thay vào đó, tôi khuyên bạn nên sử dụng scrollViewDidEndDecelerating để kiểm tra độ lệch nội dung vì nó sẽ được gọi ngay khi chế độ xem cuộn đến điểm dừng ở trang đích của nó.

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { 
    if (scrollView.contentOffset.x < 320) { 
     NSLog(@"%@",NSStringFromCGPoint(scrollView.contentOffset)); 
    } 
    else if (scrollView.contentOffset.x >= 320) { 
     NSLog(@"%@",NSStringFromCGPoint(scrollView.contentOffset)); 
    } 
} 
7

Tôi nghĩ điều này có thể giúp bạn :). Với scrollViewDidScroll bạn luôn có được vị trí chính xác của scrollview của bạn:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    if (scrollView.contentOffset.x < 320) 
    { 
     // Load content 1 
    } 
    else if (scrollView.contentOffset.x >= 320) 
    { 
     // Load content 2 
    } 
} 

NSLog(@"Position: %g", scrollView.contentOffset.x);

Đừng quên các đại biểu UIScrollViewDelegate trong file .h của bạn.

+0

Thật không may là không giải quyết vấn đề của tôi . Tôi đã thêm một số thông tin bổ sung để làm rõ vấn đề là gì. –

4

Dưới đây là một giải pháp để có được vị trí hiện tại (trang) như số nguyên Giá trị: Sử dụng scrollViewDidEndDecelerating: tole:

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { 
    NSLog(@"%i", (int)(_scrollView.contentOffset.x/_scrollView.frame.size.width)); 
} 
0

Sử dụng UIScrollViewDelegate,

func scrollViewWillBeginDragging(scrollView: UIScrollView){ 
     print("dragging begins") 
     print("Position: \(scrollView.contentOffset.x) , \(scrollView.contentOffset.y) ") 
    } 
Các vấn đề liên quan