2017-02-08 53 views
0

所以我有一個水平的集合視圖,我希望當用戶滾動來設置我想要的滾動。Swift CollectionView設置在哪裏滾動

@IBOutlet var joke_cards: UICollectionView! 

extension ViewController: UIScrollViewDelegate{ 

    func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) { 

     joke_cards.contentOffset.x = scrollView.contentOffset.x + 1000 
     joke_cards.reloadData() 

    } 

} 

但是這不起作用,它正常滾動,我想指定多少滾動,任何建議?

所以我想我需要一點更清晰,我要的是通過一些卡片翻轉水平這就是爲什麼我要當用戶星刷卡顯示在中間

+0

怎麼不起作用?究竟發生了什麼? –

+0

Nothing ..它正常滾動..我想指定多少滾動 – Uffo

+0

你確定'scrollViewWillEndDragging'是你想要達到什麼的正確方法嗎?那麼'scrollviewdidenddecelerating'呢? –

回答

1

下一個單元格如果您想要手動將用戶滾動到您需要的某個區域,先定義您需要滾動到視圖中的區域。這將取決於正是你試圖滾動一點點,但如果目標只是滾動1000點到右側,你可以定義正確,而且滾動,像這樣:

let destinationRect = CGRect(x: scrollView.contentOffset.x + 1000, y: scrollView.contentOffset.y, width: 1, height: 1) 
scrollView.scrollRectToVisible(destinationRect, animated: true) 

請注意,滾動將只要任何部分的矩形可見,就立即停止,所以如果你想contentOffset.x + 1000在中心,你需要做更多的數學運算來創建destinationRect

另一種選擇,因爲您正在使用UICollectionView是找出哪個單元格在您要滾動到的點,並將該單元格滾動到某個位置。在這個例子中,我安全地解開你指定的位置可選indexPath,並滾動該小區在的CollectionView水平居中:

if let indexPath = self.joke_cards.indexPathForItem(at: CGPoint(x: scrollView.contentOffset.x, y: scrollView.frame.midY)) { 
    self.joke_cards.scrollToItem(at: indexPath, at: .centeredHorizontally, animated: true) 
} 
+0

謝謝,它有點作品,用scrollToItem和scrollviewdidenddecelerating,但它不能正常工作,它應該顯示中間的下一個笑話,並預覽左和右,如你所見:https:// www。 screencast.com/t/gv41nwxdVKs它跳過一些卡..像「金髮女孩」,有什麼建議嗎? – Uffo

+0

@Uffo我不太明白你到底想要做什麼,但是如果有一個特定的單元格,你想要滾動到屏幕中間,你只需要獲得indexPath(不過你可以選擇)並調用水平居中的'scrollToItem'。你知道你想要滾動用戶的單元嗎? – creeperspeak

+0

那麼用戶向左或向右滾動,我希望下一個項目在中間居中,但是如果你現在看它不向右滾動,有時會滾動太多,我也啓用了分頁,你可以在這裏看到:https://i.stack.imgur.com/ap4cA.png我試圖實現的目標 – Uffo