2017-10-07 19 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