Những gì tôi muốn nhận được là hành vi tương tự mà xem di chuyển này có:Làm thế nào để thực hiện một UIScrollView snap vào biểu tượng (như App Store: Feature)
tôi biết rằng đây là cách sử dụng HTML và không phải là API gốc, nhưng tôi đang cố gắng triển khai nó như một thành phần UIKit.
Bây giờ, với hành vi Tôi đang tìm:
- Chú ý rằng đó là một cái nhìn cuộn paged, nhưng "kích thước trang" nhỏ hơn chiều rộng của view.
- Khi bạn cuộn từ trái sang phải mỗi trang "chụp" sang mục ngoài cùng bên trái.
- Khi bạn cuộn từ đầu phải sang bên trái, hãy "chụp nhanh" sang mục ngoài cùng bên phải.
Trang cùng nhưng bây giờ phải sang trái:
Những gì tôi đã cố gắng:
- Tôi đã thử làm xem di chuyển nhỏ hơn đó là siêu xem và ghi đè hitTest, và điều đó đã cho tôi rằng hành vi từ trái sang phải.
- Tôi đã thử triển khai scrollViewWillEndDragging: withVelocity: targetContentOffset: và đặt targetContentOffset tôi muốn nhưng vì tôi không thể thay đổi vận tốc, nó chỉ cuộn quá chậm hoặc quá nhanh.
- Tôi đã thử triển khai scrollViewDidEndDecelerating: và sau đó tạo hoạt ảnh cho độ lệch chính xác nhưng chế độ xem cuộn đầu tiên dừng lại sau đó di chuyển, nó trông không tự nhiên.
- Tôi đã thử triển khai scrollViewDidEndDragging: willDecelerate: và sau đó tạo hoạt ảnh cho độ lệch chính xác nhưng chế độ xem cuộn "nhảy" và không hoạt ảnh chính xác.
Tôi hết ý tưởng.
Cảm ơn!
Cập nhật:
tôi đã kết thúc sử dụng phương pháp Rob Mayoff, nó trông sạch sẽ. Tôi đã thay đổi nó để nó hoạt động khi vận tốc là 0, ví dụ khi người dùng kéo, dừng và nhả ngón tay.
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView
withVelocity:(CGPoint)velocity
targetContentOffset:(CGPoint *)targetContentOffset {
CGFloat maxOffset = scrollView.contentSize.width - scrollView.bounds.size.width;
CGFloat minOffset = 0;
if (velocity.x == 0) {
CGFloat targetX = MAX(minOffset,MIN(maxOffset, targetContentOffset->x));
CGFloat diff = targetX - baseOffset;
if (ABS(diff) > offsetStep/2) {
if (diff > 0) {
//going left
baseOffset = MIN(maxOffset, baseOffset + offsetStep);
} else {
//going right
baseOffset = MAX(minOffset, baseOffset - offsetStep);
}
}
} else {
if (velocity.x > 0) {
baseOffset = MIN(maxOffset, baseOffset + offsetStep);
} else {
baseOffset = MAX(minOffset, baseOffset - offsetStep);
}
}
targetContentOffset->x = baseOffset;
}
Vấn đề duy nhất với giải pháp này là trượt chế độ xem cuộn không tạo ra hiệu ứng "thoát". Nó cảm thấy "bị mắc kẹt".
Bất kỳ cơ hội nào có thể đạt được bằng cách sử dụng UITableView/UICollectionView?Tôi muốn cùng một cuộn và hiệu ứng snap nhưng với bảng/bộ sưu tập để xem trước các mục tiếp theo/trước như một trong iTunes. Làm một cái gì đó giống như 4 hàng trong bảng 1 cột/bộ sưu tập. –
Đối với tất cả những người muốn sửa chữa cảm giác "mắc kẹt": Nếu abs (velocity.x) lớn hơn 0.8, bạn có thể cộng/trừ hai offsetStep thay vì một. – lassej
Đừng quên cách cực kỳ đơn giản để làm điều này. JUST MAKE THE SCROLL VIEW, ** SIMPLY SIZE của "UNIT" ** Và làm cho nó trang. Nó chỉ đơn giản như vậy. Sử dụng siêu khéo léo [kỹ thuật một cái gì đó như thế này] (http: // stackoverflow.com/a/37505837/294884) nếu cần thiết để điều chỉnh "khu vực có thể chạm" – Fattie