Cocoa动画在按钮调用时不会触发

时间:2015-11-19 15:24:01

标签: ios swift cocoa-touch animation

我正在开发一个iOS应用程序,并且我被要求添加动画以使其更加用户友好。 所以我想在显示数量的按钮上设置徽章的动画。当数量改变时,调用我的函数valueForItemChanged,然后我改变bimButtonBadge标签中的值,并使用一个动画使其大小反弹。 但是我遇到了一个问题:当我从一个按钮触发的事件中调用.animateWithDuration()时,它不起作用:

 @IBAction func valueForItemChanged(sender: AnyObject) {
    print("value changed");
    self.bimButtonBadge.text = String(self.getTotalItemQuantity())
    self.bimButtonBadge.transform = CGAffineTransformMakeScale(0.2, 0.2)
        UIView.animateWithDuration(1.0,
            delay: 0,
            usingSpringWithDamping: 0.2,
            initialSpringVelocity: 4.0,
            options: UIViewAnimationOptions.AllowUserInteraction,
            animations: {
                self.bimButtonBadge.transform = CGAffineTransformIdentity
            }, completion: nil)
}

所以我试着在viewDidLayoutSubviews()中制作这个动画,只是为了看看。有效。 我认为viewDidLayoutSubview是从主线程调用的,所以我尝试了这个:

@IBAction func valueForItemChanged(sender: AnyObject) {
    print("value changed");
    self.bimButtonBadge.text = String(self.getTotalItemQuantity())
    self.bimButtonBadge.transform = CGAffineTransformMakeScale(0.2, 0.2)
    dispatch_async(dispatch_get_main_queue(), {
        UIView.animateWithDuration(1.0,
            delay: 0,
            usingSpringWithDamping: 0.2,
            initialSpringVelocity: 4.0,
            options: UIViewAnimationOptions.AllowUserInteraction,
            animations: {
                self.bimButtonBadge.transform = CGAffineTransformIdentity
            }, completion: nil)
    });
}

Aaaaaand,部分工作。有时标签会消失。我在网上搜索,但我找不到任何与此相关的内容。所以我想知道我哪里错了。

如果有人能回答我,我们将非常感激。

由于

2 个答案:

答案 0 :(得分:0)

您的动画(两个版本)将徽章的变换设置为标识变换,但您不会显示任何将变换设置为除标识变换之外的任何内容的代码。动画可以动画更改属性。如果你实际上没有改变任何东西,它就不会动画。

你想做什么?你说你正在使用反弹动画,但你的意思是什么?弹跳大小?位置?

答案 1 :(得分:0)

问题解决了。

我通过Duncan C在主线程中进行第一次转换来解决这个问题。 我的代码现在是:

stars

}