2017-10-07 59 views
0

我正在尝试对动画制约。它完美的iPhone SE,但不能在iPhone 7,6,8等动画制约因素:使用IB查看“iPhone视图”,但不使用其他iPhone

BIG编辑:

enter image description here

后试图修复它时,我明白了,当我去在IB中选择视图为iPhone 8,当我启动并模拟它时,它可以在iPhone 8上完美运行。当我选择iPhone SE时,它在SE上完美运行。 我不明白? Interface Builder的预览不应该影响模拟?!

我的看法是这样的:

enter image description here

动画是对的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+等,8不在SE上。在SE上,标签不会移动的效果非常好。

我正在与SE模型的故事板,我想这就是为什么它在SE上工作,但我不明白为什么动画移动标签,而不应该。

在此先感谢您的答案!

回答

0

阿克斯帮助我在私人讨论中解决了这个问题。所有的信用和祝贺都应该来找他!再次感谢您真的很感激帮助,AKS :)

所以这里,在UIView.animate:

self.logoImage.layoutIfNeeded() 

,而不是

self.view.layoutIfNeeded() 

无需layoutIfNeeded适用于整个查看,但仅限于我们想要动画的元素...

1

检查您正在进行动画制约的约束,也许您已启用这些约束仅限于设备。

通过示例项目,我发现问题出在layoutIfNeeded()。由于您只是将限制更改为UIImageView,因此layoutIfNeeded()应仅在该视图上调用。

+0

非常感谢您的回答!我如何知道它是否仅启用了设备? – Julien

+0

在你的故事板中,选择你的约束,并检查属性查看器,你会发现,如果约束适用于特定的设备大小。 – Aks

+0

查看这些链接:https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/AutolayoutPG/Size-ClassSpecificLayout.html https:// medium。com/@ craiggrummitt/size-classes-in-interface-builder-in-xcode-8-74f20a541195 – Aks