我正在尝试动画约束。它适用于iPhone SE,但不适用于iPhone 7,6,8等。
BIG EDIT:
经过几个小时的尝试修复它,我明白当我进入IB并选择视图作为iPhone 8时,它在iPhone 8上完美运行,当我启动并模拟它时。当我选择iPhone SE时,它在SE上完美运行。 我不明白吗? Interface Builder的预览不应该影响模拟?!
我的观点是这样的:
动画在UIImageView上。 UIImageView和标签之间的约束没有链接: 图像具有X和Y约束以将其对齐在屏幕的中心,以及使用以下代码设置动画的高度和宽度约束:
func animate() {
UIView.animate(withDuration: 1.0,
delay:0.0,
options: .curveEaseIn ,
animations:{
self.imageHeightConstraint.constant = 240.0
self.imageWidthConstraint.constant = 240.0
self.imageAlignYAxes.constant = 0
self.logoImage.center.x = (self.view.frame.width)/2
self.logoImage.center.y = (self.view.frame.height)/2
self.view.layoutIfNeeded()
},
completion:nil)
animateTwo()
}
图像从中心移动,直到我添加了此代码:
self.imageAlignYAxes.constant = 0
但现在它只是移动的图像下方的标签,但仅限于iPhone 6,6s,7,7 +等,而不是SE上的标签。在SE上,它的工作非常精细,标签没有。移动。
我正在使用SE模型制作故事板,我想这就是为什么它适用于SE,但我不明白为什么动画会移动标签,而它不应该。
提前感谢您的回答!
答案 0 :(得分:1)
检查您正在制作动画的约束,也许您已启用这些仅限于设备的约束。
通过示例项目,我发现该问题与layoutIfNeeded()
有关。由于您只将约束更改为UIImageView
,因此应仅在该视图上调用layoutIfNeeded()
。
答案 1 :(得分:0)
Aks帮助我在私人讨论中解决了这个问题。所有的学分和恭喜都应该来找他!再次感谢您的非常感谢,Aks :)
所以在这里,在UIView.animate中:
self.logoImage.layoutIfNeeded()
而不是
self.view.layoutIfNeeded()
无需将layoutIfNeeded应用于整个视图,只需应用于我们想要设置动画的元素......