2009-07-09 32 views
32

Có cách nào để hủy kích hoạt giảm tốc độ UIScrollView không?Tắt UIScrollView giảm tốc

Tôi muốn cho phép người dùng cuộn canvas, nhưng tôi không muốn cuộn tiếp tục cuộn sau khi người dùng nhấc ngón tay lên.

+1

Tại sao bạn làm điều đó? –

+5

Adam, Tôi biết rằng việc thay đổi hành vi mặc định không phải là đề xuất nhưng tôi nghĩ trong trường hợp đặc biệt của tôi, điều đó sẽ có ý nghĩa. Tôi đang triển khai canvas mở rộng có khả năng chỉnh sửa đối tượng trực tiếp trên canvas. Khi vào chế độ on-canvas-edit này, tôi muốn giới hạn khoảng cách mà người dùng cuộn để đối tượng nằm trong phạm vi nhìn thấy được. Việc sử dụng được cho phép để di chuyển xa hơn, nhưng nó sẽ trả lại trên ngón tay lên. Tôi biết về thuộc tính contentSize, nhưng nó ảnh hưởng đến canvas đang phát triển của tôi. –

+2

Trong trường hợp của tôi, chúng tôi đã trả tiền cho công việc thuê và khách hàng yêu cầu chúng tôi xóa chuyển động giảm tốc. – Mark

Trả lời

60

Điều này có thể được thực hiện bằng cách sử dụng phương thức ủy quyền UIScrollViewscrollViewWillBeginDecelerating để tự động đặt bù đắp nội dung cho vị trí màn hình hiện tại.

Thực hiện:

  1. Gán một đại biểu đến đối tượng UIScrollView của bạn nếu bạn chưa làm như vậy.
  2. Trong .m tập tin thực thi của đại biểu của bạn, thêm những dòng mã sau đây:

    -(void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView{ 
        [scrollView setContentOffset:scrollView.contentOffset animated:YES]; 
    } 
    

Voila! Không tự động cuộn nữa.

+1

Tốt. Tôi không biết tại sao, nhưng nó hoạt động. Cảm ơn bạn! –

+0

Tôi nhảy đến nơi mà sự giảm tốc sẽ kết thúc trở lại nơi nó bắt đầu ... Bất kỳ đề nghị? – jjxtra

+0

Nó hoạt động tốt .. –

18

Bạn chỉ có thể tăng tốc độ giảm tốc rất cao. Với một tốc độ vô hạn, nó sẽ dừng ngay lập tức. Hãy thử thiết lập tốc độ với những hằng số:

scrollView.decelerationRate = UIScrollViewDecelerationRateNormal; 

scrollView.decelerationRate = UIScrollViewDecelerationRateFast; 

Nếu nhanh vẫn là không đủ nhanh cho bạn, UIScrollViewDecelerationRateFast chỉ là typedef'ed như một phao, vì vậy bạn chỉ có thể nhân nó bởi hệ số 10 hoặc hơn để tăng tốc độ hơn nữa.

+0

Cảm ơn bạn đã trả lời! Tôi đã thử các giá trị khác nhau cho thuộc tính decelerationRate, nhưng không quản lý để làm giảm tốc xuất hiện không tồn tại. Một swipe nhanh chóng luôn làm cho scrollview cuộn một số lượng đáng kể. –

+9

Theo kinh nghiệm của tôi, thuộc tính 'decelerationRate' chỉ trả lời các giá trị được giải thích trong tài liệu:' UIScrollViewDecelerationRateNormal' và 'UIScrollViewDecelerationRateFast'. –

+0

Đây là những gì tôi đang tìm kiếm. Cảm ơn :) – codeburn

38

Đối với iOS 5.0 trở lên, có phương pháp tốt hơn gọi số setContentOffset:animated:.

Thực hiện phương pháp đại biểu scrollViewWillEndDragging:withVelocity:targetContentOffset: trong tập tin .m của bạn:

- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView 
        withVelocity:(CGPoint)velocity 
       targetContentOffset:(inout CGPoint *)targetContentOffset { 
    *targetContentOffset = scrollView.contentOffset; 
} 

Gán hiện tại bù đắp để targetContentOffset dừng UIScrollView từ tự động di chuyển.

Các vấn đề liên quan