如何使用按钮单击开始动画?

Posted

技术标签:

【中文标题】如何使用按钮单击开始动画?【英文标题】:How to use button click to start animation? 【发布时间】:2017-01-27 13:46:57 【问题描述】:

从 UICollectionViewCell 中单击“播放”按钮后,我似乎无法弄清楚如何启动动画。下面是我的一些代码,有什么帮助吗?

我还有其他与我的 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
   

【问题讨论】:

您想开始哪种类型的动画以及何时开始?你的问题不清楚。 嗨,谢谢@Mady,我想开始func animateScenes (),其中包括要制作动画的图像数组 【参考方案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 
    


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

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

【讨论】:

感谢@MikeSand,我使用您的代码让它工作,但我不得不强制解开 animateDelegate 属性,因为类错误表明它没有任何初始化程序。我在上面更新了我的代码。有没有办法确定通过 scenePlay 按钮点击了哪个单元格?

以上是关于如何使用按钮单击开始动画?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过单击按钮更改另一个对象的动画?

单击单元格按钮时如何显示视图

按钮单击 - 进度动画

单击时如何防止按钮动画

选中单选按钮时如何播放动画?

如何在animate中给动画添加一个播放按钮