2011-02-07 28 views
6

Tôi đang sử dụng UIScrollView làm cơ sở của thành phần sử dụng hoạt ảnh lõi. Khi người dùng vuốt chế độ xem, tôi muốn định vị các phần tử theo vị trí đích (nghỉ ngơi) của chế độ xem cuộn. Đối với điều này, tôi cần phải tính toán contentOffset đích của UIScrollView trong phương thức scrollViewWillBeginDecelerating: hoặc tương tự.Cách tính điểm nội dung đích của UIScrollView trong chuyển động

Lý do tôi cần điều này là tôi sẽ sử dụng contentOffset đích để tạo hiệu ứng các chế độ xem lồng nhau trong contentView của scrollview đến vị trí cuối cùng của chúng. Tất nhiên tôi có thể thiết lập một người quan sát trên contentOffset hoặc tương tự, nhưng điều này sẽ dẫn đến hoạt ảnh hỗn loạn khi các khung nhìn lồng nhau sau đó sẽ cập nhật vị trí của chúng nhiều lần trong khi giảm tốc. Tôi muốn điều này xảy ra chỉ một lần.

Có cách nào đơn giản để thực hiện việc này không?

+2

Có vẻ ai đó có nhu cầu này quá: http://stackoverflow.com/questions/1651560/predicting-the-resting-offset-in-a-uiscrollview-after-deceleration – Tricky

Trả lời

0

Có lý do cụ thể nào khiến bạn cần biết trước khi chế độ xem cuộn sẽ dừng lại không? Bạn có thể định vị các khung nhìn của mình trong layoutSubviews (nếu bạn phân lớp UIScrollView) hoặc trong scrollViewDidScroll: trong triển khai dạng xem dạng xem của tác giả.

+1

Hi, vâng có . Tôi sẽ sử dụng vị trí để tạo hiệu ứng các khung nhìn được lồng trong contentView của scrollview đến vị trí cuối cùng của chúng. Tất nhiên tôi có thể thiết lập một người quan sát trên contentOffset hoặc tương tự, nhưng điều này sẽ dẫn đến hoạt ảnh hỗn loạn khi các khung nhìn lồng nhau sau đó sẽ cập nhật vị trí của chúng nhiều lần trong khi giảm tốc. – Tricky

0

Tôi tin rằng bạn đang đề cập đến hành vi được tự động cung cấp bởi pagingEnabled trên UIScrollView. Từ iOS Reference Library trên UIScrollView, khi phân trang được bật ", chế độ xem cuộn sẽ dừng lại trên bội số của giới hạn của chế độ xem cuộn khi người dùng cuộn." Tôi sử dụng hành vi này mọi lúc, và tôi tin là những gì bạn đang mô tả. Nó xử lý tất cả các công việc khó khăn cho bạn - chỉ bằng cách thiết lập một tài sản!

CẬP NHẬT: Tôi nghĩ tôi đã hiểu nhầm câu hỏi của bạn. Bạn luôn có thể kiểm tra thuộc tính contentOffset của UIScrollView để xác định nguồn gốc hiện tại của nó trong chế độ xem cuộn. Bạn có thể làm điều đó theo một trong các phương thức ủy nhiệm, có thể là scrollViewDidEndDecelerating:.

+0

Có, bạn có thể nhận được contentOffset hiện tại, nhưng tôi cần contentOffset đích ... – Tricky

+0

Làm cách nào để bạn biết được contentOffset cuối cùng cho đến khi thoát khỏi scrollview? – rcw3

1

Có một phương pháp đại biểu cho điều này:

- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset NS_AVAILABLE_IOS5(5_0); 

Theo doc:

gọi trên ngón tay lên nếu người dùng kéo. vận tốc tính bằng điểm/giây. targetContentOffset có thể được thay đổi để điều chỉnh nơi khung nhìn cuộn đến phần còn lại. không được gọi khi pagingEnabled là YES

0

Không chắc chắn nếu bạn vẫn cần điều này. nhưng đây là cách bạn có thể nhận được trong các đại biểu của UIScrollView.

-(void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset{ 
NSLog(@"X offset: %f", targetContentOffset->x); 
NSLog(@"Y offset: %f", targetContentOffset->y); 
} 
Các vấn đề liên quan