2015-10-23 9 views
5

私は、この画像のようにUICollectionViewでアプリを作成しました:スワイプアニメーション - スウィフト2.0

enter image description here

追加した2つのジェスチャー:

最初(アップ)は、セルが消去されます。

2番目(下)はセルを更新します(CoreDataの新しいデータを取り込みます)。 機能は正常に動作しますが、アニメーションはありません。 iOSには非常にクールなアニメーションがあり、セルをドラッグするとセルが消えます。

私はアニメーションの初心者ですので、少し遅れてしまいます。

私の質問は次のとおりです。セル全体を占めるアニメーションを追加するにはどうすればよいですか?

私はこのサイトでいくつかの回答を読んだが、すべてObject-C(like this)で読んだ。

誰かが私を助けることができますか?

+0

Jamesあなたのアプリは素晴らしいです! –

+0

James、あなたは意図したとおりにこれを実現しましたか? Swiftで同じタイプの機能を正確に実装しようとしています。あなたのアプリを見たいと思っても、もしうまくいけば! –

答えて

12

UICollectionViewのセルがレイアウトUICollectionViewLayoutをオーバーライドしている上のアニメーションを実現するための最良の方法。そのhasメソッドは、表示/挿入/削除したいセルのレイアウト属性を返します。

例:UICollectionViewFlowLayoutを継承するクラスKDCollectionViewFlowLayoutを作成し、delete属性を上書きします。

class KDCollectionViewFlowLayout: UICollectionViewFlowLayout { 

    override func finalLayoutAttributesForDisappearingItemAtIndexPath(itemIndexPath: NSIndexPath) -> UICollectionViewLayoutAttributes? { 
     let attribute = super.finalLayoutAttributesForDisappearingItemAtIndexPath(itemIndexPath) 

     attribute?.transform = CGAffineTransformTranslate(attributes.transform, 0, ITEM_SIZE) 
     attribute?.alpha = 0.0 
     return attribute 

    } 
} 

は今、あなたはストーリーボードを通してそれを割り当てることができますのviewDidLoadかのいずれかでのコレクションビューに、このFlowLayoutののオブジェクトを割り当てる必要があります。

let flowLayout = KDCollectionViewFlowLayout() 
self.collectionView?.setCollectionViewLayout(flowLayout, animated: true) 

は今、あなたはすべてのあなたがcollectionView上の任意の削除操作を実行するたびにfinalLayoutAttributesForDisappearingItemAtIndexPathメソッドに定義された細胞の形質転換のために設定されています。

更新

あなたは、バッチ操作を使用して、コレクションビューからアイテムを削除する必要があります。

collectionView.performBatchUpdates({() -> Void in 
    //Array of the data which you need to deleted from collection view 
    let indexPaths = [NSIndexPath]() 
    //Delete those entery from the data base. 

    //TODO: Delete the information from database 

    //Now Delete those row from collection View 

    collectionView.deleteItemsAtIndexPaths(indexPaths) 

}, completion:nil) 
+0

最初の例では、自分のコードに収めようとしましたが、成功しませんでした。私のコードは、クラスと2つの拡張機能の3つに分かれています。 私のコードに彼のサンプルを適合させるにはどうすればいいですか?私は当初よりももっと混乱しています... – James

+0

すみませんが、ここではうまくいきませんでした。実例をダウンロードするためのリンクを投稿できました。 – James

+0

@James、削除アニメーションのための完全な[サンプルコード](https://github.com/mpospese/CircleLayout)。 – deoKasuhal