[英]Presenting a View Controller Modally Resets The Current View
我正在嘗試以模態方式呈現視圖控制器(准確地說是一個UIImagePickerController),同時在呈現之前對一些視圖進行動畫處理。
重要的是要注意,動畫和視圖的表示沒有鏈接在一起,並且在動畫和模態呈現圖像選擇器的視圖之間可能存在時間間隔。
話雖如此,當我展示視圖控制器時,似乎我所在的當前視圖的所有子視圖(我正在展示的視圖-父視圖控制器的視圖)都被重置為其原始的“ storyboard” ”位置,這會導致我在呈現圖像選擇器之前重置視圖中所做的所有動畫。
另一點值得注意,是我使用AutoLayout來放置我設置動畫的視圖。
我添加了一個演示該問題的動畫示例-注意在單擊“當前模態視圖控制器”按鈕后,“動畫”按鈕是如何捕捉回到其原始位置的(在顯示模態之前,我已經切換了“慢速動畫”視圖控制器,以便您可以看到“動畫”按鈕的回彈)。
我還在動畫中顯示的示例應用程序中添加了鏈接,以便您更深入地研究問題, 請單擊此處下載它。
為了解決該問題,我使用了@kokx的答案,並對視圖的“自動布局”約束(而不是其幀值)進行了動畫處理。 為此,我只是為要修改的約束創建了出口,並修改了約束的constant
屬性。
要對更改進行動畫處理,只需調用原始的[UIView animateWithDuration:options:animations:completion:]
同時替換其動畫的任何動畫代碼animations:
調用[self.view layoutIfNeeded]
。
要解決該問題,您需要使用NSLayoutConstraint
以及更改Constraint而不是更改框架。
請查看附件中已解決問題的視頻。 影片連結
代碼如下:
self.topcons.constant = self.topcons.constant - 220;
[UIView animateWithDuration:0.4f
delay:0.0f
options:UIViewAnimationOptionCurveEaseInOut
animations:^{
[self.view layoutIfNeeded];
} completion:nil];
謝謝
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.