2017-05-07 70 views
2

我一直在嘗試創建一個自定義轉換細分,並一直遵循在線教程來幫助我。我正在創建我的應用程序沒有故事板編程。使用UIViewControllerAnimatedTransitioning沒有故事板細分

我有一個集合視圖單元格,當點擊時我想有一個自定義的動畫過渡。所有當前的教程都使用Storyboard segues。大部分教程將創建自定義的塞格斯上的腳本,然後用下面的函數的一些變化來調用他們的自定義賽格瑞:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    let vc = segue.destination as! ViewController 
    let cell = sender as! PictureCell 
    sourceCell = cell 
    vc.picture = cell.picture.image 

} 

,因爲我不是用故事板我想我會打電話給我的動畫過渡該didselectitem功能:

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 
} 

我把所有的自定義協議,並建立我的UINaviationDelegate包括自定義動畫化的轉變:

extension FeedViewController: UINavigationControllerDelegate { 
func navigationController(_ navigationController: UINavigationController, animationControllerFor operation: UINavigationControllerOperation, from fromVC: UIViewController, to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? { 

    return PopInAndOutAnimator(operation: operation) 
} 
} 

extension FeedViewController: CollectionPushAndPoppable { 

var collectionView: UICollectionView? { 
    return ideasCollectionView 
} 
} 

下面是我所遵循的教程示例:http://www.stefanovettor.com/2015/12/25/uicollectionview-custom-transition-pop-in-and-out/

如何在沒有故事板的情況下調用我的自定義搜索引擎?

我真的很感謝幫助。過去一週我一直在試圖解決這個問題。

感謝

+1

據我所知,必須在storyboard中構建segue,還可以爲它們提供標識符,您可以使用它來區分segues。但我更喜歡使用UINavigationController而不是Segue處理使用太方便。 –

回答

2

正如你正確地指出塞格斯只可如果你用故事板,因此對於賽格瑞的準備

已創建了不會xibs工作,並設置UINavigationControllerDelegate現在只想啓動動畫到其他視圖控制器。

因此,你只需要調用您的導航視圖控制器推:

let vc = DetailViewController(nibName: "DetailViewController", bundle: nil) 
self.navigationController.pushViewController(vc, animated: true) 

此代碼創建和呈現的DetailViewController實例(重命名爲你使用正確的名稱)。如果您正確設置了導航視圖控制器的委託,則將應用您的自定義動畫。

+0

Hi @ nef10我試過這個,我不斷收到以下錯誤:reason:'無法在捆綁中加載NIB:'NSBundle。我還有什麼需要做的嗎?我是否必須創建一個nib文件或更改某種設置? – ajayb

+0

你是怎麼定義你的DetailViewController的(但是你命名了它)。如果你有一個xib(= nib)它的代碼應該工作。如果佈局只在代碼中完成,則需要使用普通的init方法。 – Nef10