0

在按钮的 touchUpInside 上,它运行一系列代码(所有数据相关,主函数中的代码都不会修改视图对象),代码所做的最后一件事是调用我在下面粘贴的动画函数。问题是,动画看起来不像它应该的那样。

想要的动画:

  1. footerImg 应该淡出
  2. footerBar 文本应淡入
  3. footerBar 文本应该淡出
  4. footerImg 应该淡入

文字和图像在屏幕上占据相同的位置,所以视觉上应该是一个替换另一个,然后又回到原来的状态。视图不相互嵌套,它们共享同一个容器。

在模拟器中看到的实际动画:

-footerImg 甚至从不可见 -footerBar 文本在点击触发器后立即出现,没有动画 -footerBar 文本淡出 -footerImg 淡入

footerBar 是一个 UIButton

- 在动作开始之前,它的起始状态是按钮为空且清晰(用户不可见)

- 万一这很重要,这不是触发该功能的按钮

- 有一个清晰的背景,所以它的文本应该是唯一的动画进/出的东西

footerImg 是一个 UIImageView

- 只是一个图标图像,没什么特别的

func animateFeedback() {
    UIView.animateWithDuration(0.25, delay: 0.0, usingSpringWithDamping: 1.0, initialSpringVelocity: 0, options: nil, animations: {
            self.footerImg.alpha = 0
            self.footerBar.alpha = 0

    },
        completion: { finished in
            self.footerBar.setTitle("Item added", forState: UIControlState.Normal)
        }
    )

    UIView.animateWithDuration(1.5, delay: 0.5, options: nil, animations: {
            self.footerBar.alpha = 1
        }
        , completion: nil
    )
    UIView.animateWithDuration(0.75, delay: 1.25, options: nil, animations: {
            self.footerBar.alpha = 0
        }
        , completion: { finished in
            self.footerBar.setTitle("", forState: UIControlState.Normal)
        }
    )
    UIView.animateWithDuration(0.25, delay: 1.5, options: nil, animations: {
            self.footerImg.alpha = 1
        }
        , completion: nil
    )
}
4

2 回答 2

1

对于序列动画,您应该在完成块中放置动画。例如

footerBar 文本应淡入

footerBar 文本应该淡出

尝试这个:

        self.footerBar.alpha = 0;

        UIView.animateWithDuration(1.5, delay: 0.5, options: nil, animations: {
            self.footerBar.alpha = 1
        }
        , completion: { finished in
            UIView.animateWithDuration(0.75, delay: 1.25, options: nil, animations: {
               self.footerBar.alpha = 0
            }
            , completion: { finished in
               self.footerBar.setTitle("", forState: UIControlState.Normal)
            }
            )
       }
       )

对其他人也是如此

于 2015-08-20T10:10:17.123 回答
0

注释您在“animateFeedback()”中的所有代码并将以下代码粘贴到其中

UIView.animateWithDuration(1.5, delay: 0, options: nil, animations: { () -> Void in
        self.footerImg.alpha = 0;
        self.footerBar.setTitle("Item added", forState: UIControlState.Normal)
        },
        completion: { finished in
            UIView.animateWithDuration(1.5, delay: 0, options: nil, animations: { () -> Void in
                self.footerImg.alpha = 1;
                self.footerBar.setTitle("", forState: UIControlState.Normal)
                },
                completion: { finished in
                }
            )
        }
    )
于 2015-08-20T11:45:09.537 回答