2014-12-04 40 views
4

我試圖在兩個視圖控制器之間進行自定義轉換。首先,這裏的圖片說明我想要的東西:「魔法移動」效果自定義轉換

我想UICollectionViewCell擴展到整個屏幕。在這個單元格中,子視圖與Autolayout放在IB中。

我只是想讓每個子視圖都轉到新的位置。所以我試圖在動畫塊中嘗試subview.frame = newSubview.frame,但它不起作用(因爲我認爲Autolayout)。

我想在動畫發生時刪除約束,但它不起作用。

我也試着讓@IBOutlets的約束和改變常量屬性。

這裏是我的代碼:

let detailView = detailViewController.view 
    let cellView = self.selectedCell 

    container.addSubview(cellView!) 

    let duration = self.transitionDuration(transitionContext) 

    UIView.animateWithDuration(duration, delay: 0.0, options: .CurveEaseInOut, animations: { 

      let newFrame = detailViewController.view.frame 
      cellView!.frame = newFrame 
      cellView!.imageView.frame = newFrame 
      cellView!.labelTopConstraint.constant = 27 
      cellView!.labelRightConstraint.constant = 8 
      cellView!.layoutIfNeeded() 
     } 

... 

實際上,當動畫開始標籤捕捉到的位置,然後他們移動,並在年底他們不是在正確的位置...

任何想法?由於

+0

您是否找到適合您問題的酷解決方案? – mikrobi 2015-04-23 09:13:29

回答

1

看看這個回購協議,我認爲這是你在找什麼BCMagicTransition:https://github.com/boycechang/BCMagicTransition

與您的代碼的問題是,你是不是你的轉換您的收藏觀察室子視圖的畫面,請想要爲過渡的容器視圖控制器的座標設置動畫,並且與其位置的最終框架相同。即使你使用AutoLayout,你仍然可以用它們的框架來操作視圖。

要做到這一點,結賬這種方法(documentation):

 func convertRect(rect: CGRect, fromView view: UIView?) -> CGRect 

你也應該看看動畫的希望動畫的意見快照。然後,將快照添加到容器視圖中,並將它們設置爲轉換後的最終幀,然後在動畫完成時將其刪除。

希望這會有所幫助!