我正在开发一个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,部分工作。有时标签会消失。我在网上搜索,但我找不到任何与此相关的内容。所以我想知道我哪里错了。
如果有人能回答我,我们将非常感激。
由于
答案 0 :(得分:0)
您的动画(两个版本)将徽章的变换设置为标识变换,但您不会显示任何将变换设置为除标识变换之外的任何内容的代码。动画可以动画更改属性。如果你实际上没有改变任何东西,它就不会动画。
你想做什么?你说你正在使用反弹动画,但你的意思是什么?弹跳大小?位置?
答案 1 :(得分:0)
问题解决了。
我通过Duncan C在主线程中进行第一次转换来解决这个问题。 我的代码现在是:
stars
}