উল্লম্ব সেল-ভিত্তিক পেজিংয়ের জন্য সুইফট 5 এ আমার বাস্তবায়ন এখানে রয়েছে :
override func targetContentOffset(forProposedContentOffset proposedContentOffset: CGPoint, withScrollingVelocity velocity: CGPoint) -> CGPoint {
guard let collectionView = self.collectionView else {
let latestOffset = super.targetContentOffset(forProposedContentOffset: proposedContentOffset, withScrollingVelocity: velocity)
return latestOffset
}
// Page height used for estimating and calculating paging.
let pageHeight = self.itemSize.height + self.minimumLineSpacing
// Make an estimation of the current page position.
let approximatePage = collectionView.contentOffset.y/pageHeight
// Determine the current page based on velocity.
let currentPage = velocity.y == 0 ? round(approximatePage) : (velocity.y < 0.0 ? floor(approximatePage) : ceil(approximatePage))
// Create custom flickVelocity.
let flickVelocity = velocity.y * 0.3
// Check how many pages the user flicked, if <= 1 then flickedPages should return 0.
let flickedPages = (abs(round(flickVelocity)) <= 1) ? 0 : round(flickVelocity)
let newVerticalOffset = ((currentPage + flickedPages) * pageHeight) - collectionView.contentInset.top
return CGPoint(x: proposedContentOffset.x, y: newVerticalOffset)
}
কিছু নোট:
- ভুল নেই
- মিথ্যাতে প্যাগিং সেট করুন ! (অন্যথায় এটি কাজ করবে না)
- আপনাকে সহজেই নিজের ফ্লিকবেলসিটি সেট করতে দেয় ।
- এটি চেষ্টা করার পরেও যদি কিছু কাজ না করে থাকে তবে আপনার
itemSize
আইটেমটির আকারটি আসলে মিলছে কিনা তা যাচাই করে দেখুন, বিশেষত collectionView(_:layout:sizeForItemAt:)
ব্যবহারের সময় আইটেম সাইজের পরিবর্তে কাস্টম ভেরিয়েবল ব্যবহার করুন।
- আপনি সেট করার সময় এটি সবচেয়ে ভাল কাজ করে
self.collectionView.decelerationRate = UIScrollView.DecelerationRate.fast
।
এখানে একটি অনুভূমিক সংস্করণ রয়েছে (এটির পুরোপুরি পরীক্ষা করা হয়নি তাই দয়া করে কোনও ভুল ক্ষমা করুন):
override func targetContentOffset(forProposedContentOffset proposedContentOffset: CGPoint, withScrollingVelocity velocity: CGPoint) -> CGPoint {
guard let collectionView = self.collectionView else {
let latestOffset = super.targetContentOffset(forProposedContentOffset: proposedContentOffset, withScrollingVelocity: velocity)
return latestOffset
}
// Page width used for estimating and calculating paging.
let pageWidth = self.itemSize.width + self.minimumInteritemSpacing
// Make an estimation of the current page position.
let approximatePage = collectionView.contentOffset.x/pageWidth
// Determine the current page based on velocity.
let currentPage = velocity.x == 0 ? round(approximatePage) : (velocity.x < 0.0 ? floor(approximatePage) : ceil(approximatePage))
// Create custom flickVelocity.
let flickVelocity = velocity.x * 0.3
// Check how many pages the user flicked, if <= 1 then flickedPages should return 0.
let flickedPages = (abs(round(flickVelocity)) <= 1) ? 0 : round(flickVelocity)
// Calculate newHorizontalOffset.
let newHorizontalOffset = ((currentPage + flickedPages) * pageWidth) - collectionView.contentInset.left
return CGPoint(x: newHorizontalOffset, y: proposedContentOffset.y)
}
এই কোডটি আমি আমার ব্যক্তিগত প্রকল্পে যে কোডটি ব্যবহার করি তার উপর ভিত্তি করে, আপনি এটি ডাউনলোড করে এবং উদাহরণ টার্গেট চালিয়ে এখানে এটি পরীক্ষা করে দেখতে পারেন ।