簡體   English   中英

呈現視圖控制器以模態重置當前視圖

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM