ios - 通过按钮调用时 cocoa 动画不触发

标签 ios swift cocoa-touch animation

我正在开发一个 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/

相关文章:

ios - 无法在CollectionViewCell中设置imageView

ios - 使用 Swift 创建 Flutter 项目

ios - 捏合手势以展开 UICollectionView Cell

iphone - Objective C 代码中的 usleep()

ios - 我可以捕获异常并重新启动我的应用程序吗?

ios - 使用 MPMoviePlayerController 和 Swift 播放电影

iphone - 将 bool 属性保存到 iOS 中的文件。

ios - 使用 React native 以编程方式显示键盘

ios - 在 reloadData 上禁用 UICollectionView 动画

json - 检索 Json 数据 - 如何?