【问题标题】:Swift 4 - animating both alpha and constraint affects other components alpha valueSwift 4 - 为 alpha 和约束设置动画会影响其他组件的 alpha 值
【发布时间】:2018-04-01 11:26:11
【问题描述】:

我遇到了一种奇怪的情况,即为 UIImageView 的 alpha 设置动画会影响同样存在于同一视图中的 UIButton。

我的代码:

func handleArrowAnimation(_ arrowImage: UIImageView, _ arrowImageXCenterConstraint: NSLayoutConstraint) {

    arrowImageXCenterConstraint.constant = CGFloat(80)
    UIView.animate(withDuration: 0.7, delay: 0, options: [.curveEaseInOut, .repeat, .autoreverse], animations: {

        arrowImage.alpha = UIApplication.shared.userInterfaceLayoutDirection == .leftToRight ? 1 : 0.2
        arrowImage.superview!.layoutIfNeeded()

    }) { (completed) in

        arrowImageXCenterConstraint.constant = CGFloat(0)
        arrowImage.alpha = UIApplication.shared.userInterfaceLayoutDirection == .leftToRight ? 0.2 : 1
        arrowImage.superview!.layoutIfNeeded()
    }
}

结果:

我发现删除对 layoutIfNeeded() 的调用可以防止 UIButton alpha 发生变化,但当然它也可以防止箭头移动 - 所以它对我没有多大帮助。

UIButton 不是 arrowImage 的子视图,它们不共享同一个父视图(尽管它们的父视图共享同一个父视图)。

我在这里错过了什么?

谢谢!

【问题讨论】:

  • 这很奇怪。你在使用界面生成器吗? - 旧的/混合的商店有机会吗?
  • @Wez - 是的,我正在使用界面生成器(Xcode 9)。这也是我的直觉,但不幸的是,arrowImage 和按钮各自定义了一个专有插座,并且代码不会以任何方式混合它们的引用:(
  • viewDidAppear() 怎么样?
  • 不,我不能,但我确实搜索了这个问题并找到了以这种方式修复它的人 - stackoverflow.com/questions/19967837/…
  • 不知道你怎么这么快就找到了...非常感谢! :)

标签: ios swift animation alpha


【解决方案1】:

显然其他人遇到了这个问题,答案是确保在视图加载后启动动画,例如在 viewDidAppear() 方法中。

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear()
    handleArrowAnimation()
}

Here is the link to previous question. 目前似乎没有对这种奇怪行为的任何解释。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-03
    • 1970-01-01
    • 1970-01-01
    • 2013-11-26
    • 1970-01-01
    相关资源
    最近更新 更多