Tôi sẽ thêm giải pháp khác. Việc chụp tại chỗ không phải là hoàn hảo (không tốt như khi kích hoạt phân trang được thiết lập, nhưng hoạt động đủ tốt).
Tôi đã thử triển khai giải pháp của Soroush, nhưng nó không hiệu quả đối với tôi.
Vì UICollectionView
là một lớp con của UIScrollView
nó sẽ phản ứng với một UIScrollViewDelegate
phương pháp quan trọng đó là:
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView
withVelocity:(CGPoint)velocity
targetContentOffset:(inout CGPoint *)targetContentOffset
Các targetContentOffset
(một inout con trỏ) cho phép bạn xác định lại điểm dừng cho một cái nhìn bộ sưu tập (x
trong trường hợp này nếu bạn vuốt theo chiều ngang).
Một lưu ý nhanh chóng về một cặp vợ chồng của các biến tìm thấy dưới đây:
self.cellWidth
- đây là chiều rộng tế bào xem bộ sưu tập của bạn (thậm chí bạn có thể hardcode nó ở đó nếu bạn muốn)
self.minimumLineSpacing
- đây là khoảng cách dòng tối thiểu bạn đặt giữa các ô
self.scrollingObjects
là mảng đối tượng chứa trong chế độ xem bộ sưu tập (tôi cần phần lớn này cho đếm, để biết khi nào phải ngừng di chuyển)
Vì vậy, ý tưởng là thực hiện phương pháp này trong đại biểu quan điểm bộ sưu tập, như vậy:
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView
withVelocity:(CGPoint)velocity
targetContentOffset:(inout CGPoint *)targetContentOffset
{
if (self.currentIndex == 0 && velocity.x < 0) {
// we have reached the first user and we're trying to go back
return;
}
if (self.currentIndex == (self.scrollingObjects.count - 1) && velocity.x > 0) {
// we have reached the last user and we're trying to go forward
return;
}
if (velocity.x < 0) {
// swiping from left to right (going left; going back)
self.currentIndex--;
} else {
// swiping from right to left (going right; going forward)
self.currentIndex++;
}
float xPositionToStop = 0;
if (self.currentIndex == 0) {
// first row
xPositionToStop = 0;
} else {
// one of the next ones
xPositionToStop = self.currentIndex * self.cellWidth + (self.currentIndex + 1) * self.minimumLineSpacing - ((scrollView.bounds.size.width - 2*self.minimumLineSpacing - self.cellWidth)/2);
}
targetContentOffset->x = xPositionToStop;
NSLog(@"Point of stopping: %@", NSStringFromCGPoint(*targetContentOffset));
}
Mong bất kỳ phản hồi nào bạn có thể có mà làm cho chụp ở vị trí tốt hơn.Tôi cũng sẽ tiếp tục tìm kiếm một giải pháp tốt hơn ...
này, tuy nhiên, không vượt qua lựa chọn và sự kiện tap một cách chính xác thông qua các bộ sưu tập xem cơ bản như của iOS7. Bất kỳ ý tưởng? – eanticev
Trên iOS7 (ít nhất— có thể đã đúng trước điều này), bạn không cần scrollview. Chỉ cần phát hiện cử chỉ vuốt trái và phải và sử dụng chúng để đặt độ lệch của giao diện bộ sưu tập của bạn 1 trang về phía trước/sau. – buildsucceeded
Tôi không thể cho cuộc sống của tôi làm cho nó hoạt động trên iOS7. 'scrollViewDidScroll' của chế độ xem cuộn" bí mật "không bao giờ được phân phối. –