Swift 4 UIView。动画不发射并忽略动画

Swift 4 UIView。动画不发射并忽略动画,swift,Swift,以下代码在除1之外的所有视图控制器中都非常有效。 该代码的目的是在将alpha衰减到1.0时,将箭头从左向右设置为视图的动画。arrowImage是UIImageView,通过故事板上的插座连接。有人能告诉我为什么这个viewController不运行动画吗?我正在使用最新的Xcode和iOS 11.4。提前谢谢 override func viewDidLoad() { super.viewDidLoad() self.arrowImage.alpha = 0.0

以下代码在除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
        })


    }

很可能图像视图上有自动布局约束,在viewDidLoad之后,视图控制器的内容视图将根据当前显示大小调整大小,并应用约束。这将导致帧更改被忽略

我希望alpha动画仍能工作,因此您的图像视图应该在20秒的时间内(非常缓慢地)进入可见性

如果没有,我建议将arrowImage.alpha设置为1.0,不带任何动画,并确保它出现。如果它仍然没有出现,那么其他的东西是错误的,你必须去解决这个问题


您应该按照BonanzaDriver的建议将动画代码移动到ViewDidDisplay,并且应该为x位置自动布局约束创建一个IBOutlet,并在动画中设置该约束的常量动画,而不是尝试为帧设置动画(因为自动布局通常会覆盖对显式帧/边界设置的更改)

图像视图很可能具有自动布局约束,在viewDidLoad之后,视图控制器的内容视图将根据当前显示大小调整大小,并应用约束。这将导致帧更改被忽略

我希望alpha动画仍能工作,因此您的图像视图应该在20秒的时间内(非常缓慢地)进入可见性

如果没有,我建议将arrowImage.alpha设置为1.0,不带任何动画,并确保它出现。如果它仍然没有出现,那么其他的东西是错误的,你必须去解决这个问题


您应该按照BonanzaDriver的建议将动画代码移动到ViewDidDisplay,并且应该为x位置自动布局约束创建一个IBOutlet,并在动画中设置该约束的常量动画,而不是尝试为帧设置动画(因为自动布局通常会覆盖对显式帧/边界设置的更改)

当您将其移动到“显示”中时会发生什么?是否使用约束来设置视图的位置?我尝试了与动画相同的代码,尝试在DispatchQueue.main.async中使用动画块{///Animation code}当您将其移动到DidDisplay时会发生什么情况?您是否使用约束来设置视图的位置?我尝试了与动画相同的代码,尝试在DispatchQueue.main.async{///Animation code}中使用动画块谢谢。我把它移到了VIEWDID,一切都很好。我在Objective C中学习了这一课,我想我只是在Swift中再次学习了这一课。有没有办法只对对象x设置动画?有人能举个例子吗?谢谢。如我的回答中所述,您可以向(x位置)约束添加一个出口,并设置更改约束常量值的动画(您可以更改约束常量,并将代码
视图。layoutifneed()
放在动画块中)。谢谢。我把它移到了VIEWDID,一切都很好。我在Objective C中学习了这一课,我想我只是在Swift中再次学习了这一课。有没有办法只对对象x设置动画?有人能举个例子吗?谢谢。如我在回答中所述,您可以向(x位置)约束添加一个出口,并为更改约束的常量值设置动画(您可以更改约束的常量,并将代码
view.layoutifneed()
放在动画块中。)