2017-12-11 20 views
2

現在、UICollectionViewを使用して3つの画像を表示しています(各画像はセル全体に広がっています)。私はUICollectionViewの上に配置したUIPageControlも持っています。私がしたいのは、UIPageControlにイメージの数(この場合は3)と、ユーザーが現在表示しているイメージを表示させることです。私が取り組もうとしている効果はInstagramアプリの効果です。UICageControlをUICollectionView(Swift)に接続する方法

私は現在、この効果を達成するために使用しています方法はそうのように、UICollectionViewのwillDisplay関数内UIPageControlの更新を配置することによって、次のとおりです。

func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) { 
    pictureDots.currentPage = indexPath.item 
} 

これは正しく間のページング効果をフックアップするために管理しますコレクションビューとページコントロール。しかし、私が持っている問題は、UIPageControlが、最初のイメージを表示しているにもかかわらず、ユーザーが3番目のイメージにあると言ってしまうことです。

なぜこの問題が発生しているのか、この問題を解決する方法を知っていますか?

答えて

5

最初に、UICollectionViewを使用してUIPageControlをストーリーボードに追加してから、コンセントとしてView Controllerに接続してください。

@IBOutlet var pageControl: UIPageControl! 
@IBOutlet var collectionView: UICollectionView! 

常にコレクションビュー内の細胞の数に等しくなるようにページコントロールの数を設定するUICollectionViewDataSourceであなたのnumberOfItemsInSection方法を調整します。

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 

    let count = ... 

    pageControl.numberOfPages = count 
    pageControl.isHidden = !(count > 1) 

    return count 
} 

最後に、UIScrollViewDelegateを使用して、我々はUICollectionViewが上停止するセル伝えることができます。 UICollectionViewControllerを使用していない場合は、代理人プロトコルを追加する必要があります。

func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { 

    pageControl?.currentPage = Int(scrollView.contentOffset.x)/Int(scrollView.frame.width) 
} 

func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView) { 

    pageControl?.currentPage = Int(scrollView.contentOffset.x)/Int(scrollView.frame.width) 
} 

UICollectionViewは、実際にはフードの下UIScrollViewあるので、これは可能です。

関連する問題