2017-01-04 13 views
0

私はカスタムUICollectionViewを持っており、セルはcellForItemAtにロードされていますが、visibleCellsを使用してすべての表示セルを取得しようとすると、cellはcellForItemAtにロードされていますが、visibleCellsには​​ありません

たとえば、cellForItemAtでは、セル内のラベルのアルファを0に設定しています。私だけではなく、「可視」のすべての「ロード」のセルを変更するために何ができるか

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

    cell.label.alpha = 0 

    return cell 
} 

func scrollViewWillBeginDragging(_ scrollView: UIScrollView) { 
    handleLabel(scrollView, active: true) 
} 

func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { 
    if pickerIsActive { handleLabel(scrollView, active: false) } 
} 

private func handleLabel(_ scrollView: UIScrollView, active: Bool) { 
    guard let pickerView = scrollView as? UICollectionView else { return } 

    let cells = pickerView.visibleCells.flatMap { $0 as? CustomCell } 

    panningIsActive = active 

    UIView.animate(duration: 0.3) { 
     cells.forEach { $0.label.alpha = $0.isSelected || active ? 1 : 0 } 
    } 
} 

とcellForItemAtを:パンしたとき、私は、これらのラベルのアルファが1に変更したいです細胞?

+0

あなたはどんな細胞を手に入れようとしていますか、どの細胞を実際に入手していますか? – MendyK

答えて

1

visibleCellsがあります画面上のセルのみ。これは以前はcellForItem:at:で初期化されていましたが、iOS 10の時点でUICollectionViewはスクロールのパフォーマンス(see WWD 2016 video)を向上させるためにプリフェッチするようになりました。とにかく、あなたがしたいことが画面上に来るときにフェードインするために、細胞をアニメーション化したいと思うように聞こえる。アニメーションロジックをwillDisplayCellに移動するか、UICollectionViewCellをサブクラス化することができます。 UIColectionViewCellはUIViewから継承していますので、UICollectionViewCellでdidMoveToSuperViewをオーバーライドしてアニメーションメソッドを呼び出すと、セルがアニメーション表示されます。

+0

ありがとう、私は非常に多くのことを試みてきました。 'willDisplayCell'を使って最終的に私のために修正しました。 –

1

layoutAttributesForElements(in:)を試してみてください。

デリゲートメソッドを使用するのではなく、独自のコレクションビューレイアウトサブクラスを実装する必要がありますが、長期的にはそれが価値があると思います。

アニメーションを手動で管理するのではなく(UIView.animateWithDuration経由)、このメソッドを使用して、コレクションビューに異なる位置にあるプロパティセルを指定し、コレクションビューをパンするときに正しいプロパティが自動的に適用されます。

私はこのために良いスウィフトの参照を見つけることを試みたが、私はcould'tが、ここであなたがこの方法を試してみたい場合は、あなたが続くことができるのObjective-Cでのポストです: https://bradbambara.wordpress.com/2014/05/24/getting-started-with-custom-uicollectionview-layouts/

+0

'layoutAttributesForElements(in:)'に関する情報を読んだだけで、それは本当に面白いようです。情報のおかげで! –

関連する問題