2017-01-27 4 views
0

UICollectionViewCellから「再生」ボタンをクリックした後にアニメーションを開始する方法がわかりません。以下は私のコードのいくつかです、何か助けてください?クリックしてアニメーションを開始するにはどうすればいいですか?

コレクションビューの設定に関連する他のコードがありますが、表示する必要があるかどうかはわかりません。

私は、一度viewAppearしたアニメーションを実行することができるようだが、viewAppears後にアニメーションをどのようにして起動するのですか? HERE

Here is my UICollectionViewCell code: 

import UIKit 

class CreateCollectionViewCell: UICollectionViewCell { 

    var animateDelegate: AnimateScenesDelegate!  

@IBOutlet weak var scenes: UIImageView! 

@IBAction func scenePlay(sender: UIButton) { 

    animateDelegate.animateScenes() 

    let playButtonFromCreateCollection = scenes.image! 

    print("It was this button \(playButtonFromCreateCollection)") 

     } 

    } 

私のUIViewControllerコードの一部です:ボタンは、セルにタップすると、ビューコントローラは、いくつかのアニメーションを実行する必要があります。あなたがしたい場合のようです

class CreateViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate, AnimateScenesDelegate { 

    @IBOutlet weak var StoryViewFinal: UIImageView! 

    var scene01_68: [UIImage] = [] 

    func animateScenes() { 

     print("Play button was pressed") 
     StoryViewFinal.animationImages = scene01_68 
     StoryViewFinal.animationDuration = 15.0 
     StoryViewFinal.animationRepeatCount = 1 
     StoryViewFinal.startAnimating() 

     } 

    func loadScenes() { 
     for i in 1...158 { 
      scene01_68.append(UIImage(named: "Scene01_\(i)")!) 
      print(scene01_68.count) 
     } 
     } 


override func viewDidAppear(animated: Bool) { 

     animateScenes() 

super.viewDidLoad() 


    loadScenes() 


func collectionView(collectionView: UICollectionView,  cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
\\ OTHER CODE... 
    cell.animateDelegate = self 
    return cellA 
    } 
+0

開始するアニメーションのタイプはいつですか? あなたの質問でその明確ではありません。 –

+0

こんにちは、ありがとう@マディ、アニメーションのような画像の配列を含む 'func animateScenes()'を開始します – Ojay

答えて

1

?この問題は、セルとビューコントローラ間の調整が必要になることから発生します。細胞はただの見解であり、自分自身の外で何かを行う知識はありません。

ビューコントローラがcellForItemAtIndexPathのセルをフォーマットするときに、「アニメーションデリゲートを実行する」performAnimationDelegateを与える必要があります。これはビューコントローラへの参照です。

protocol AnimateScenesDelegate { 
    func animateScenes() 
} 

class CreateCollectionViewCell: UICollectionViewCell { 
    weak var animateDelegate : AnimateScenesDelegate 

    @IBAction func scenePlay(sender: UIButton) { 
     animateDelegate?.animateScenes() 
    } 
} 

class CreateViewController: UIViewController, ... AnimateScenesDelegate { 

    func animateScenes() { 
     //Animate here ... 
    } 

    func collectionView(_ collectionView: UICollectionView, 
    cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
     //... 
     cell.animateDelegate = self 
    } 

} 

セルがビューコントローラをアクティブに保つことを望まないため、セルデリゲートの弱いvarに注意してください。

これはこれを行う唯一の方法ではありませんが、それは確立されており、簡単です。デリゲート(ビューコントローラ)には何を呼び出すかについての情報はないので、パラメータを追加するか、またはどのセルがタップされているかなどを知りたい場合はチェックする必要があります。お役に立てれば。

+0

ありがとう@MikeSand、私はあなたのコードを使用して動作するようになったが、私はアニメーションを強制的に解除しなければならなかったクラスエラーは初期化子を持たないと述べているからです。上記のコードを更新しました。 scenePlayボタンでタップされたセルを特定する方法はありますか? – Ojay

関連する問題