Ich habe das Paging in meiner Sammlungsansicht aktiviert und dabei die erste Ausgabe jedes Swipe-Vorgangs gefunden, der nicht auf einer anderen Zelle als auf der Seite angehalten wurde.Swift CollectionView Vertikale Paging-Funktion
Ich habe dann versucht, Code einzugeben und die Auslagerung manuell in ScrollViewWillEndDecelerating zu behandeln. Mein Problem ist jedoch das Ändern der Collectionviews ContentOffset oder Scrollen zu einem Punkt beide funktionieren nicht, wenn sie in LayoutSubiews aufgerufen werden. das ist der einzige Ort, an dem sie das CollectionView bewirken.
Jede Zelle in meiner Sammlungsansicht ist Vollbild. Ich kümmere mich um die Zellengröße in Layout-Subviews.
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
if let layout = customCollectionView.collectionViewLayout as? UICollectionViewFlowLayout {
let itemWidth = view.frame.width
let itemHeight = view.frame.height
layout.itemSize = CGSize(width: itemWidth, height: itemHeight)
layout.invalidateLayout()
}
let ip = IndexPath(row: 2, section: 0)
view.layoutIfNeeded()
customCollectionView.scrollToItem(at: ip, at: UICollectionViewScrollPosition.centeredVertically, animated: true)
let point = CGPoint(x: 50, y: 600)
customCollectionView.setContentOffset(point, animated: true)
}
func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
let pageHeight = customCollectionView.bounds.size.height
let videoLength = CGFloat(videoArray.count)
let minSpace:CGFloat = 10
var cellToSwipe = (scrollView.contentOffset.y)/(pageHeight + minSpace) + 0.5
if cellToSwipe < 0 {
cellToSwipe = 0
}
else if (cellToSwipe >= videoLength){
cellToSwipe = videoLength - 1
}
let p = Int(cellToSwipe)
let roundedIP = round(Double(Int(cellToSwipe)))
let ip = IndexPath(row: Int(roundedIP), section: 0)
let ip = IndexPath(row: 2, section: 0)
view.layoutIfNeeded()
customCollectionView.scrollToItem(at: ip, at: UICollectionViewScrollPosition.centeredVertically, animated: true)
}