2015-04-25 47 views
1

我能夠通過簡單設置preferredContentSize成功更改彈出框的框架。我現在想動畫化內容大小的變化,但我還沒有成功。它只是即時更新,實際上我設置的延遲甚至沒有得到尊重。如何讓內容大小發生變化?如何在使用UIPopoverPresentationController時動畫preferredContentSize?

//In viewDidAppear: 
UIView.animateWithDuration(5, delay: 3, usingSpringWithDamping: 0.5, initialSpringVelocity: 0.25, options: UIViewAnimationOptions.CurveEaseInOut, animations: {() -> Void in 
    self.preferredContentSize = CGSizeMake(320, 400) 
}, completion: nil) 

回答

1

我能夠重現您的問題,然後想出了一種方法使其工作。動畫延遲在這裏不起作用,因此將其設置爲0並在執行動畫之前執行其他類型的延遲。我使用我在SO上找到的函數:

func delay(delay: Double, closure:()->()) { 
    dispatch_after(
     dispatch_time(
      DISPATCH_TIME_NOW, 
      Int64(delay * Double(NSEC_PER_SEC)) 
     ), 
     dispatch_get_main_queue(), closure) 
} 

只要將它放在類定義之外的任何swift文件的頂部即可。

然後改變你的代碼看起來像這樣:

delay(3, {() ->() in 
    UIView.animateWithDuration(5, delay: 0, usingSpringWithDamping: 0.5, initialSpringVelocity: 0.25, options: UIViewAnimationOptions.CurveEaseInOut, animations: {() -> Void in 
     self.preferredContentSize = CGSizeMake(320, 400) 
     }, completion: nil) 
}) 
+0

真棒!我也注意到它不喜歡內容大小爲0,0 - 它似乎將其設置爲默認大小。我想從0到0,320,400進行動畫處理。你知道如何覆蓋它嗎? – Joey

+0

對不起,我不知道。但從1x1尺寸開始可能會很開心。 –

+0

我能得到的最低數量是60x60,從這個尺寸開始產生一個不良效果並開始動畫。不知道是否還有其他方法可以解決這個問題。 – Joey

相關問題