0

2 つの異なるサイズのセルがある UIcollection ビューがあります。最後のセルは常に大きく露出しており、他のすべてのセルは小さく半分隠れています。

ユーザーが半分の非表示のセルをタップすると、それらのセルを選択し、その位置をアニメーションで前面 (露出) のセルに置き換えます。

今まで、データ ソース内のデータを再シャッフルして再読み込みしていますが、これは目的を果たしていますが、有用なものが見つからない限り、アニメーションはありません。

どんな助けでも大歓迎です。注: Swift を使用しています。

ありがとう、

4

1 に答える 1

0

これを試して:

import UIKit

private let reuseIdentifierBig = "bigger"
private let reuseIdentifierSmall = "small"

class CollectionViewController: UICollectionViewController {

let array = [0,1,2,3,4]
var selectedIndex:NSIndexPath?
var preSelectedIndex:NSIndexPath?

override func viewDidLoad() {
    super.viewDidLoad()
}

override func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
    return 1
}


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

override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
    if selectedIndex != indexPath {
        let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifierSmall, forIndexPath: indexPath)
        return cell
    } else {
        let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifierBig, forIndexPath: indexPath)
        return cell
    }
}

override func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
    preSelectedIndex = selectedIndex
    selectedIndex = indexPath
    collectionView.reloadItemsAtIndexPaths([indexPath])
    if preSelectedIndex != nil {
        collectionView.reloadItemsAtIndexPaths([preSelectedIndex!])
    }
}

}

于 2015-08-27T05:34:54.580 に答える