2016-01-10 282 views
2

目前正在開發一些swift程序,並且我有一個行動號召,我從超級視圖中移除blurview,同時我爲兩個按鈕設置動畫。Swift:removefromSuperview刪除約束

一切正常,但有一個小問題。當我從超級視圖中移除模糊視圖時,我的2個按鈕上的約束在底部設置爲0,並從該位置開始動畫。

我不希望他們轉移到0.如果我不刪除blurview我的動畫是完美的工作。我檢查了我的按鈕約束是否與blurview相關,但事實並非如此。因爲我認爲它只能在我們的限制與blurview相關時重置。

我的故事板看起來如下:

view 
    |-> camera_view 
    |-> blur_view 
    |-> record_label 
    |-> record_button 

我正在執行是下面的代碼:

@IBAction func recordButton(sender: AnyObject) { 
    self.blurView?.removeFromSuperview() 
    UIButton.animateWithDuration(0.3, delay: 0.2, options: .CurveEaseOut, animations: { 
     var recordButtonFrame = self.recordButton.frame 
     var recordLabelFrame = self.recordLabel.frame 

     recordButtonFrame.origin.y -= recordButtonFrame.size.height 
     recordLabelFrame.origin.y -= recordLabelFrame.size.height 

     self.recordButton.frame = recordButtonFrame 
     self.recordLabel.frame = recordLabelFrame 
     }, completion: { finished in 
      print("Button moved") 
    }) 
} 

我在做什麼錯?

親切的問候,

沃特

+1

self.blurView?.hidden = true –

+0

謝謝你解決我的問題。忘了那個。它仍然留在記憶中這種方式是正確的?如果我再次需要blurview的實例,這種方法會更快,但如果我不需要它,速度會更慢? – Wouter125

+1

是的,如果你只是隱藏它將保留在內存中。也許你可以先隱藏它,然後在動畫結束後將其刪除。 –

回答

2

的問題是,您在使用約束動畫幀。您應該動畫約束更改/約束常數值更改。

當你不刪除視圖佈局不重新計算,所以你的框架動畫'工程'。這是不正確的,將在未來某個時候進行重組。

當您移除視圖時,將重新計算佈局,並且在動畫開始之前,所有內容都會四處移動。

你沒有給出你的約束的細節,但你可能應該在移除視圖前動畫約束,然後移除並確保約束在完成時都是健全的。

+0

謝謝,我真的很感激約束條件下的所有信息。 Dalija Prasnikar已經通過隱藏它來解決問題,但我認爲這給了它一個很好的補充。 – Wouter125

+0

同時隱藏它可以解決您的眼前問題,如果你還在動畫幀你的方法仍然是錯誤的,並可能會導致你在未來 – Wain

+0

嗯好的問題。將研究約束動畫,看看我是否可以重寫我的代碼。謝謝你的建議! – Wouter125

2

而是從superview刪除blurView你可以隱藏的。

更換

self.blurView?.removeFromSuperview() 

self.blurView?.hidden = true 
+1

(不是你要求的)但是在動畫塊內部self.blurView?.effect = nil也會給你一個動畫去模糊效果。 – Antonis

+0

在這裏學習這麼多,有一個主題。感謝Antonis爲此增加。並不是真的需要它,但它對功能參考很有用! @Dalija Prasnikar,感謝您解決問題。 – Wouter125