【问题标题】:How to wait until an animation is finished in Swift?如何在 Swift 中等待动画完成?
【发布时间】:2015-04-11 01:04:43
【问题描述】:

我尝试在我的测验的下一个问题加载之前让按钮“摇动”。

动画看起来像

var timer = NSTimer()
    UIView.animateWithDuration(0.1, animations: {
        self.IMGVIEWcat.center = CGPointMake(self.IMGVIEWcat.center.x + 2, self.IMGVIEWcat.center.y)
    })
    UIView.animateWithDuration(0.2, animations: {
        self.IMGVIEWcat.center = CGPointMake(self.IMGVIEWcat.center.x - 4, self.IMGVIEWcat.center.y)
    })
    UIView.animateWithDuration(0.3, animations: {
            self.IMGVIEWcat.center = CGPointMake(self.IMGVIEWcat.center.x + 2, self.IMGVIEWcat.center.y)
    })

在此之后调用以下函数

    func QueryInformations(){
        println("QueryInformationsStart")
        self.ActivityIndicator.hidden = false
        ObjectIDsArrayCount = ObjectIDsArray.count
        var RandomQuestion = Int(arc4random_uniform(ObjectIDsArray.count + 0))
        var QuestionID:String = ObjectIDsArray[RandomQuestion]
        var query : PFQuery = PFQuery(className: "AddonQuiz")
        query.getObjectInBackgroundWithId(QuestionID){
            (ObjectHolder : PFObject!, error : NSError!) -> Void in
...

现在动画开始了,但在加载下一个问题的瞬间,是否有一些简单的等待让初学者实现“等待”直到动画完成?

我试着设置

var complet == true 

在动画中

在查询函数中

if complet = true {....

但这对我不起作用,我还找到了一些关于完成处理程序的信息,但在我的代码中没有得到它。

【问题讨论】:

  • if complet = true {...} 不是您想要使用的。请改用if complet == true {...}。顺便说一句,您应该在动画结束时使用 completion 块。
  • true ;) 在代码中它是 == 但它仍然没有帮助

标签: ios swift animation nstimer


【解决方案1】:

在您正在调用的函数上使用 completion 块:

UIView.animateWithDuration(0.3, animations: {
        self.IMGVIEWcat.center = CGPointMake(self.IMGVIEWcat.center.x + 2, self.IMGVIEWcat.center.y)
}, completion: {(finished:Bool) in
  QueryInformations()
})

【讨论】:

【解决方案2】:

如果您想在动画结束时使用completion 块,您也应该使用带有delayoptions 参数的构造。

UIView.animateWithDuration(0.3, delay: 0.0, options: UIViewAnimationOptions.CurveLinear, animations: { 
// put here the code you would like to animate
    self.IMGVIEWcat.center = CGPointMake(self.IMGVIEWcat.center.x + 2, self.IMGVIEWcat.center.y)

}, completion: {(finished:Bool) in
// the code you put here will be compiled once the animation finishes
    QueryInformations() 
})

【讨论】:

  • 在 "} 上出现错误,完成:{" 'Bool' 不是 '()' 的子类型
  • 很高兴你能成功!了解options: nil 块非常重要。您可以使用UIViewAnimationOptions.CurveLinearUIViewAnimationOptions.CurveEaseOut 而不是nil。这些设置修改动画的行为方式。如果您使用最后一个,动画将快速开始,并在动画完成时放慢速度。
  • 你所说的 UIViewAnimationOptions.CurveLinear 或 UIViewAnimationOptions.CurveEaseOut 是什么意思
猜你喜欢
  • 1970-01-01
  • 2013-02-13
  • 1970-01-01
  • 2012-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-01
相关资源
最近更新 更多