Swift 4 UIView.Animate不触发并忽略动画

时间:2018-09-18 02:02:39

标签: swift

以下代码在我所有的viewController中都非常有效,除了1。 该代码的目的是在从左到右的方向上为视图添加动画,同时将alpha渐变为1.0。 arrowImage是UIImageView,它通过情节提要上的插座连接。谁能告诉我为什么这个viewController无法运行动画?我正在使用最新的Xcode和iOS 11.4。预先感谢。

   override func viewDidLoad() {
    super.viewDidLoad()

    self.arrowImage.alpha = 0.0
    self.arrowImage.frame = CGRect(x: 1200, y: 412, width: 809, height: 236)


    if self.arrowImage.alpha == 0.0 {
        UIView.animate(withDuration: 20.0, delay: 1.0, usingSpringWithDamping: 0.6, initialSpringVelocity: 0.8,  options: .curveEaseIn, animations:
            {
                // self.startButton.center = CGPoint(x:607 + 759/2 ,y:265)
                self.arrowImage.frame = CGRect(x: 0, y: 412, width: 809, height: 236)
                self.arrowImage.alpha = 1.0
        })


    }

1 个答案:

答案 0 :(得分:2)

最有可能图像视图具有AutoLayout约束,并且在viewDidLoad之后,视图控制器的内容视图将调整为当前显示尺寸,并应用约束。这将导致您的框架更改被忽略。

我希望alpha动画仍然可以正常工作,因此您的图像视图应在20秒内(可见度非常慢)非常生气勃勃。

如果那没有发生,我建议在没有任何动画的情况下将arrowImage.alpha设置为1.0,并确保它出现。如果仍然没有出现,则说明有其他问题,您必须找出答案。

您应按照BonanzaDriver的建议将动画代码移动到viewDidAppear,并应将IBOutlet创建到x位置AutoLayout约束并在动画中为其设置动画常量,而不是尝试为帧设置动画(因为AutoLayout通常会覆盖对您的更改)明确的边框/边界设置。)