如何使用按钮点击启动动画?

How to use button click to start animation?

从我的 UICollectionViewCell 中单击 "Play" 按钮后,我似乎无法弄清楚如何启动动画。下面是我的一些代码,请帮忙?

我还有其他与我的 collectionView 设置相关的代码,但不确定您是否需要查看它。

看来,我只能在 viewAppears 后 运行 动画,但是如何在 viewAppears 之后很好地启动动画?

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
   }

这似乎是您想要的情况:当点击单元格中的按钮时,视图控制器应该执行一些动画?这个问题来自需要在单元格和视图控制器之间更好地协调。单元格只是视图,不具备在自身之外做任何事情的知识。

视图控制器格式化cellForItemAtIndexPath中的单元格时,需要给它一个"perform animation delegate" 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 
    }

}

请注意单元格委托上的弱变量,因为您不希望单元格保持视图控制器处于活动状态。

这不是执行此操作的唯一方法,但它既可靠又简单。请记住,委托(视图控制器)没有任何关于调用它的信息,因此您必须添加一个参数或检查您是否想知道例如正在点击哪个单元格。希望这可以帮助。