2017-09-17 5 views
2

複数のセルを含むコレクションビューがあります。ユーザーは水平方向にスクロールすることができます。しかし、一度ユーザーが移動できるようになると、最も近いセルを中央に配置したい。または、そうでない場合は、ページングの形式を個々のセルに対して行うことができます。私は基本的にアイコン/プロフィール画像ピッカーを作っています。コレクションビューでスティッキーな水平スクロール効果を作成する方法Swift 3

@IBOutlet weak var profilePicScrollView: UIScrollView! 
var profilePicsArray = [#imageLiteral(resourceName: "sample_user_photo"), #imageLiteral(resourceName: "settings_icon"), #imageLiteral(resourceName: "usernametextfield_dark")] 

@IBOutlet weak var profilePicCollectionView: UICollectionView! 


func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
    return profilePicsArray.count 
} 

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionat section: Int) -> CGFloat { 
    return 0 
} 

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "ImageViewCellReuseID", for: indexPath) as! SettingsCollectionViewCell 

    cell.imageInCollection.image = profilePicsArray[indexPath.row] 
    cell.imageInCollection.backgroundColor = UIColor.getRandomColor() 

    return cell 
} 

答えて

0

と仮定すると、あなたのコレクションビューの細胞はあなたのコレクションビューの境界の幅に等しい、あなただけtrueにコレクションビューのisPagingEnabledプロパティを設定することができます - UIScrollViewからUICollectionView継承を考えます。

付属していない場合、あなたは次のことを試してみてください:

まず、あなたのコレクションビューのデリゲートのscrollViewDidEndDragging(_:willDecelerate:)メソッドを実装します。次に、そのメソッドの本体で、collectionView.visibleCellsのどのセルが最もよく表示されているかを、それぞれの中心をコレクションビューの中心と比較して判断します。コレクションビューの最も目に見えるセルを見つけたら、scrollToItem(at:at:animated:)を呼び出してスクロールしてください。

+0

私は実際にそれを試している途中でした!私は、親コレクションビュー(すなわち、継承以来のスクロールビュー)内の各セルの相対位置を取得する方法について固執しています。私はフレーム、境界、center.xを試しましたが、何も現在の位置を返すようです... – aoeuaoeu

関連する問題