不使用Storyboard Segues实现UIViewControllerAnimatedTransitioning

3
我一直在尝试创建自定义的过渡segue,并且一直在遵循在线教程帮助我。我正在以编程方式创建我的应用程序,而没有使用Storyboard。
当我点击一个集合视图单元格时,我想要有一个自定义的动画过渡。所有当前的教程都使用Storyboard segues。大多数教程将在Storyboard上创建自定义segue,然后使用以下函数的某些变体来调用他们的自定义segue:
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/ 没有故事板,我如何调用自定义segue?
我非常感谢您的帮助。我一直在尝试解决这个问题已经一个星期了。
谢谢

1
据我所知,人们必须在Storyboard中构建segue,并且您可以为它们提供标识符,以便您可以区分不同的segues。但是,我更喜欢使用UINavigationController而不是Segue处理,因为它太方便了。 - Aman Gupta
1个回答

2
正如您正确指出的那样,如果您使用故事板,则只能使用Segues,因此准备segue将无法与xibs一起使用。
您已经创建并设置了UINavigationControllerDelegate,现在只想开始到其他视图控制器的动画。
因此,您只需要在导航视图控制器上调用push即可:
let vc = DetailViewController(nibName: "DetailViewController", bundle: nil)
self.navigationController.pushViewController(vc, animated: true)

这段代码创建并呈现了一个DetailViewController实例(请将其重命名为您使用的正确名称)。如果您正确设置导航视图控制器的委托,您的自定义动画将被应用。


嗨@nef10,我尝试了这个问题,但一直出现以下错误:原因是:“无法在' NSBundle '中加载NIB。我是否需要进一步操作?是否需要创建nib文件或更改某些设置? - ajayb
你如何定义你的DetailViewController(或其他你给它的名称)?如果你有一个xib(=nib),代码应该可以工作。如果布局只在代码中完成,你需要使用普通的init方法。 - Nef10
如果您不使用prepareForSegue方法,那么您在哪里以及如何设置委托? - yambo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接