2017-05-07 57 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