我正在开发一个 iOS 应用程序,有人要求我添加动画以使其更加用户友好。 所以我想在我的按钮上制作一个显示数量的角标(Badge)动画。当数量发生变化时,我的函数 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,它部分起作用了。有时标签会消失。我在网上搜索,但找不到与此相关的任何内容。所以我想知道我哪里错了。
如果有人能回答我,我将不胜感激。
谢谢
最佳答案
您的动画(两个版本)将角标(Badge)的变换设置为身份变换,但您没有显示任何将变换设置为身份变换以外的任何代码。动画以动画方式呈现属性的变化。如果您实际上不更改任何内容,它就不会动画。
你想做什么?你说你正在使用弹跳动画,但你的意思是什么?弹跳尺寸?位置?
关于ios - 通过按钮调用时 cocoa 动画不触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33807899/