【发布时间】: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/…
-
不知道你怎么这么快就找到了...非常感谢! :)