为什么在自定义交叉溶解segue中视图控制器的主视图不对齐?(代码片段)

author author     2023-05-13     735

关键词:

我编写了一个自定义的UIStoryboardSegue子类来创建两个UIViewControllers之间的淡出/淡入,交叉溶解过渡。

视图控制器的主视图具有在每个视图中居中的按钮(标记为“视图控制器1”和“视图控制器2”,因此我假设当我将一个交叉溶解到另一个时 - 将它们设置为相同的超级视图和使他们的框架相同 - 按钮也将对齐。

class SwapSegue: UIStoryboardSegue 

    override func perform() 
        fade()
    

    func fade() 
        destination.view.alpha = 0

        source.view.superview?.addSubview(destination.view)
        destination.view.frame = source.view.frame

        UIView.animate(withDuration: 1, delay: 0, options: .curveEaseInOut, animations: 
            self.destination.view.alpha = 1
        , completion:  success in
            if var controllerStack = self.source.navigationController?.viewControllers 
                controllerStack[controllerStack.firstIndex(of: self.source)!] = self.destination
                self.source.navigationController?.setViewControllers(controllerStack, animated: false)
             else 
                self.source.present(self.destination, animated: false, completion: nil)
            
        )

    

这几乎可以工作,但它不会在转换过程中正确定位目标视图,所以当segue的动画完成时,最后会有一个“pop”。对齐似乎大致偏离了导航栏的高度,所以我怀疑这是一个线索。

Swap pop

(注意:在这个循环GIF中你可以看到按钮按下“View Controller 1”,动画交叉淡入淡出,按钮未对齐,然后动画完成时最后的“pop”和目标视图控制器终于放好了。)

如何正确定位它以使其按照应有的方式对齐并且动画将是平滑的?

答案

我找到了解决方案。我不能100%确定为什么会这样,所以如果你能解释一下,请在下面的评论中这样做。

最初我通过自动布局将两个按钮置于视图控制器的主视图中心。

通过将子视图(我们称之为“内容视图”)添加到每个视图控制器的主视图,固定到其边缘,并使该视图中的每个按钮居中,过渡现在可以按预期工作。

Intermediate "content view"

enter image description here

从 nib 文件在自定义视图中设置自定义委托

...这个视图有一个自定义委托,我将委托设置为我的主视图控制器,但在某些时候委托再次设置为nil。这是我将自定义视图添加到我的视图控制器@IBActionfuncnewGoalButtonTapped 查看详情

IOS Segue 在自定义标签栏中不起作用

...的自定义标签栏,它运行成功,现在我尝试在标签栏视图控制器上的两个视图控制器之间传递数据我的标签栏控制器代码-(void)performViewController*ctbcv=(ViewController*)self.sour 查看详情

使用 segue 更改视图

...“主”视图和一个“细节”视图。我将主视图嵌入到导航控制器中。主视图由带有自定义单元格的UITableView组成。点击单元格时,我尝试显示详细信息视图。但我不明白如何做到这一点...我在单元格和详细信息 查看详情

展开后执行segue

...间】:2016-04-0804:19:32【问题描述】:我有一个包含在导航控制器中的主屏幕。主屏幕有几个按钮可以触发到其他视图的segues。一键进入表格视图。此表中的选择应触发通常由主视图上的按钮之一执行的转场。我假设我需要先展开... 查看详情

以编程方式 Swift Segue

...发布时间】:2015-08-2010:28:50【问题描述】:我有一个视图控制器,它有一个带有两个按钮的UISegmentControl。我加载这个视图,当SegmentValue发生变化时,我会在视图中添加一个视图控制器。这是主视图控制器在我定义控制器的类中va... 查看详情

是否允许 segues 循环?

...我正在开发一个登录的应用程序,所以我有一个登录视图控制器和一个主视图控制器,我从登录到主视图。我希望用户可以自动登录,所以如果用户已经登录,我将直接显示主视图控制器。然后问题是注销,我想从mian显示登录... 查看详情

Segue 作为一种新观点

...发布时间】:2016-04-2607:53:48【问题描述】:我有一个导航控制器作为主视图的根视图,然后是登录视图,然后是主视图。当我使用登录并转到主视图时vc.performSegueWithIdentifier("toMenuView",sender:nil)我可以滑回登录视图。我不想要那个... 查看详情

在选项卡之间切换时如何创建交叉溶解动画

...903:11:39【问题描述】:如何在标签之间切换时执行的标签控制器类中编写简单的交叉溶解动画。以下是显示此类动画的应用示例。我对自定义过渡动画还很陌生,我知道它必须在didSelect中进行overridefunctabBar(_tab 查看详情

带有自定义转场的自动布局

...8:09【问题描述】:我正在尝试使用自定义segue在两个视图控制器之间进行交叉融合,segue正确启动并按预期执行动画-但是在横向模式下,目标视图控制器在动画期间出现在其纵向布局中.动画完成后,目标视图控制器“捕捉”到... 查看详情

自定义 Segue 动画不起作用

...自定义点击手势的动画。在我的故事板中,我有一个导航控制器、主视图和另外两个视图。我已将手势连接到另一个视图,并定义了segue使用的自定义类,但出现以下错误。我有另一个使用Push的segue,效果很好。关于我做错了 查看详情

如何在自定义 UITableViewCell 按钮和第二个视图之间创建一个 segue

】如何在自定义UITableViewCell按钮和第二个视图之间创建一个segue【英文标题】:HowcanIcreateaseguebetweenacustomUITableViewCellbuttonandasecondview【发布时间】:2016-02-1315:31:01【问题描述】:我在一个单独的nib中创建了一个自定义UITableViewCell... 查看详情

执行由 UITableViewCell 调用的 Segue

...当按下时我希望它们在单元格所在的表格视图所在的视图控制器中调用segues。我现在正在做的是声明这样的动作:-(无效)行动;在表格视图所在的类中。然后我从单元格中调用该操作,如下所示 查看详情

如何从主视图控制器在详细视图控制器中推送新视图?

】如何从主视图控制器在详细视图控制器中推送新视图?【英文标题】:Howtopushnewviewindetailviewcontrollerfrommasterviewcontroller?【发布时间】:2016-06-0422:42:48【问题描述】:我一直在摸索,试图弄清楚如何做到这一点。如果有人有一些... 查看详情

在父视图控制器上注册一个 Segue 以在子视图控制器上使用

】在父视图控制器上注册一个Segue以在子视图控制器上使用【英文标题】:RegisteraSegueonaParentViewControllertouseonChildViewController【发布时间】:2015-06-0515:33:46【问题描述】:我想知道是否可以在父视图控制器上注册一个Segue以在子视... 查看详情

如何从titleView图像创建一个按钮和segue

...成为一个可点击的按钮,并与起始页面相连(例如主视图控制器的主页按钮)。如何将titleView图像制作成按钮(或项目)以及如何从中创 查看详情

使用 Storyboard 推动 segue

...iPad)应用程序使用故事板。我正在使用默认的主/详细拆分视图。在拆分视图中,一切正常,当我在主视图中选择一个项目时,它会被推送到详细视图中。但是在iPhone上,当我选择一个项目时,详细视图显示为模式弹出框(不确定... 查看详情

在自定义容器控制器中拆分视图控制器?

】在自定义容器控制器中拆分视图控制器?【英文标题】:splitviewcontrollerinacustomcontainercontroller?【发布时间】:2012-04-2517:23:55【问题描述】:我想知道是否可以在自定义容器控制器(或标签栏控制器)中显示splitviewcontroller?我... 查看详情

在自定义视图控制器转换中抑制导航推送动画

】在自定义视图控制器转换中抑制导航推送动画【英文标题】:Suppressnavigationpushanimationinacustomviewcontrollertransition【发布时间】:2013-09-3022:37:43【问题描述】:我将iOS7中引入的新自定义视图控制器转换与UINavigationController结合使用... 查看详情