API collectionView.insertItems(at:)
を使用して、コレクションビューのセルを1つずつロードします。オンラインで多くの答えが得られます。このセルには、のセルのalpha
と他の方法をアニメーション化します。たとえば、linkです。しかし、何も完璧に動作しません。 collectionView.insertItems(at:)
を使用する理由は、アニメーションが既に組み込まれており、ハックは必要ないからです。 、その理由iOS - セルを1つずつロードする
***「NSInternalInconsistencyException」キャッチされない例外によりにアプリを終了:「無効な更新:セクション0内の項目の無効 数番号を
しかし
collectionView.insertItems(at:)
を使用して、私は次のようなエラーが出ますupdate(5)の後の 既存のセクションに含まれるアイテムの数は、更新(5)前にそのセクションに含まれている アイテムの数と同じでなければなりません(プラスまたはマイナス )挿入され、 が削除された0)、プラスまたはマイナスの項目の数がの内外に移動したそのセクション(0は移動し、0は移動しました)。
この
は、私は上記のように、それがクラッシュしています持っているものの一例であるが、それは私が(うまくいけば)右方向に考えてスタートだ:私は見る主な問題のclass ViewController: UIViewController {
@IBOutlet weak var collectionView: UICollectionView!
/// This array is populated from a network call.
let images = [Image]()
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
animateCells()
}
func animateCells() {
let indexPaths = [IndexPath(item: 0, section: 0),
IndexPath(item: 1, section: 0),
IndexPath(item: 2, section: 0),
IndexPath(item: 3, section: 0),
IndexPath(item: 4, section: 0)]
for indexPath in indexPaths {
let delayTime = 0.1 + Double(indexPath.row) * 0.3
delay(delayTime) {
self.collectionView.performBatchUpdates({
self.collectionView.insertItems(at: [indexPath])
}, completion: nil)
}
}
}
func delay(_ delay: TimeInterval, closure: @escaping() -> Void) {
let when = DispatchTime.now() + delay
DispatchQueue.main.asyncAfter(deadline: when, execute: closure)
}
}
// MARK: - UICollectionViewDataSource
extension ViewController: UICollectionViewDataSource {
func numberOfSections(in collectionView: UICollectionView) -> Int {
return 1
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return images.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath)
return cell
}
}
ワン私はreturn images.count
の中にnumberOfItemsInSection
の中にいます。
どのような考えですか?
あなたは正しいものとして任意の答えを選択してくださいだろう。 –
@GovindPrajapati答えはまだ試していない、すぐになります! – JEL