如何在完成动画之前禁用按钮

How do I disable the button before finished animating

我正在使用下面的代码。如何在完成动画效果之前禁用按钮?在这种情况下,当我在完成动画之前单击按钮时,动画图像会重新启动并且不是很流畅。

@IBAction func btn_LeeStatue(sender: AnyObject) {    
    lee_statue_img.animationImages = [
        UIImage(named: "lee_statueAni0001.png")!,
        UIImage(named: "lee_statueAni0002.png")!,
        UIImage(named: "lee_statueAni0003.png")!,
        UIImage(named: "lee_statueAni0004.png")!,
        UIImage(named: "lee_statueAni0005.png")!,
    ] 

    lee_statue_img.animationDuration = 3
    lee_statue_img.animationRepeatCount = 1
    lee_statue_img.startAnimating()     
}

UIImageView 图像动画没有"completion handler"。比这简单多了。

如果您需要完成处理程序,请使用某种具有完成处理程序的动画。

(在你的情况下,我不明白为什么你甚至需要一个完成处理程序。你知道这个动画什么时候结束:从现在开始 X 秒。所以只需设置一个 NSTimer 到那时给你打电话。) 所以你的代码将是:

func showButton(timer : NSTimer) {
   YourButtonOutlet.enabled = true
   //this will enable you button again
}

@IBAction func btn_LeeStatue(sender: AnyObject) {    
lee_statue_img.animationImages = [
    UIImage(named: "lee_statueAni0001.png")!,
    UIImage(named: "lee_statueAni0002.png")!,
    UIImage(named: "lee_statueAni0003.png")!,
    UIImage(named: "lee_statueAni0004.png")!,
    UIImage(named: "lee_statueAni0005.png")!,
] 

//Disable the button
YourButtonOutlet.enabled= false
lee_statue_img.animationDuration = 3
lee_statue_img.animationRepeatCount = 1
lee_statue_img.startAnimating()
//set the timer for X seconds (4s in this example)  
let myTimer : NSTimer = NSTimer.scheduledTimerWithTimeInterval(4, target: self, selector: Selector("showButton:"), userInfo: nil, repeats: false)
}

你也可以在之后使用调度, 只需添加此功能->

func delay(delay:Double, closure:()->()) {
    dispatch_after(
        dispatch_time(
            DISPATCH_TIME_NOW,
            Int64(delay * Double(NSEC_PER_SEC))
        ),
        dispatch_get_main_queue(), closure)
} 

你可以这样调用它->(0.75 是应用程序在执行闭包中的内容之前应该等待的时间)

delay(0.75, closure: {
    //write here the code to be executed after 0.75 second
    //in your case it will be YourButtonOutlet.enabled = true
})

PS: 必须在动画开始前设置YourButtonOutlet.enabled = false

我想你想禁止用户触摸一个按钮使其动画然后启用它以供用户触摸。为此,您需要切换 userInteractionEnabled 属性。

let button: UIButton = UIButton()
button.userInteractionEnabled = false
button.animateMethod()
button.userInteractionEnabled = true