【问题标题】:Creating a custom segue in xcode在 xcode 中创建自定义 segue
【发布时间】:2013-11-20 02:06:28
【问题描述】:

我正在尝试在 xcode 故事板中使用自定义 segue 来让视图向下滑动(封面垂直的反面)。

我知道我需要打电话:

[self dismissViewControllerAnimated:YES completion:nil];

但是我在哪里以及如何做到这一点?这应该在 .h 文件中吗?然后这会创建一个转换,然后我可以在选择转换时从下拉菜单中选择?

我是新手,所以认为我需要一步一步的指南。提前致谢!

【问题讨论】:

    标签: iphone ios objective-c segue


    【解决方案1】:

    假设有一个后退按钮,您想在该按钮上转到上一个视图控制器。在按钮操作方法中,您必须编写如下代码行

    -(IBAction)Back{
    [self dismissViewControllerAnimated:NO completion:nil];
    }
    

    对于动画,在你想要动画的那个类中写这个方法

    - (void)fadeIn
    {
         self.view.transform = CGAffineTransformMakeScale(1.3, 1.3);
         self.view.alpha = 0;
        [UIView animateWithDuration:.35 animations:^{
        self.view.alpha = 1.0;
        self.view.transform = CGAffineTransformMakeScale(1, 1);
    }];
    
    }
    

    从该类的 ViewWillAppear 方法中调用该方法为:

    -(void)viewWillAppear:(BOOL)animated{
    
    [self fadeIn];
    }
    

    查看高级动画:https://github.com/JosephLin/TransitionTest

    【讨论】:

      【解决方案2】:

      您不需要为此自定义 segue - 当您希望屏幕向下时(比如说当您按下按钮时),只需在您想要向下的视图控制器中实现它即可。

      -(IBAction)closeScreen:(id)sender{
          [self dismissViewControllerAnimated:YES completion:NULL];
      }
      

      您将在 .m 文件中调用它。

      【讨论】:

        【解决方案3】:

        您不需要仅用于封面垂直过渡的自定义转场。

        如果您在情节提要中设置模态转换就足够了(在您的按钮和目标视图控制器之间使用 ctrl+拖动)。然后单击 segue 线并将过渡从默认更改为在检查器中覆盖垂直(右上角)。

        @您的目标视图控制器,您从要关闭视图的按钮创建一个 ibaction(通过 ctrl+从您的按钮拖动到 .m 文件)。然后你将驳回线添加到这个 ibaction。

        【讨论】:

        • 感谢您的回答。当您说“通过 ctrl+从您的按钮拖动到 .m 文件”时,是否意味着从按钮拖动到视图下方的“视图控制器”图标?因为我无法拖到导航器中的 .m 文件。此外,当我尝试将原始帖子中提供的驳回行添加到 .m 文件时,我收到一条错误消息“使用未声明的标识符自身”
        • 如果您还没有这样做,您必须创建一个 UIViewController 的自定义子类,并将它在情节提要中与您的视图控制器相关联。当您在故事板中时,从右上角的编辑器按钮启用“显示助手编辑器”,您将看到新创建的 .h 文件。切换到 .m 文件,在那里您可以 ctrl+拖动您的 ibaction。在 youtube 上试试,有很多视频教程。
        【解决方案4】:

        一个叫做unwind segue 的东西非常适合这个。想象一下 FooViewController 呈现 BarViewController。你在故事板中都有。在FooViewController.h 中定义一个方法- (IBAction)onCloseBarController:(UIStoryboardSegue *)segue; 并在FooViewController.m 中放入一个空实现

        - (IBAction)onCloseBarController:(UIStoryboardSegue *)segue
        {
        }
        

        现在,转到您的 Storyboard 并在 BarViewController 视图中找到您要用于触发关闭操作的控件。单击该控件,在右侧检查器中转到 Triggering Segues(最右侧的选项)并从action(在UIBarButtonItem 的情况下)或Sent Events(在UIButton 的情况下)拖动到故事板中BarViewController 底部的Exit 控件。然后它应该会显示所有可用的放松转场,只需选择onCloseBarController

        Unwind segues 是专门为此制作的。最好的部分 - 您不必手动关闭控制器,展开 segue 会自动完成。所以你可以只使用onCloseBarController方法作为解雇通知方法。

        相当不错的关于 unwind segues 的教程:http://pragmaticstudio.com/blog/2013/2/5/unwind-segues

        【讨论】:

        • 刚刚尝试了这个解决方案,它确实可以将视图滑出。但是,我正在构建原型以了解应用程序中的流程,因此如果在第一个视图中我点击用户以选择他,我将使用交叉溶解转换将视图更改为用户作为用户界面的屏幕截图被选中。我现在需要这个视图再次向下滑动,但不是回到原始视图,而是到下一个屏幕截图,其中参与者图标现在已更改以指示参与者已被选中。希望这是有道理的......
        • 很好的展开segues只对回到之前的状态有好处(控制器)。如果您需要推送/显示另一个控制器(不是父控制器),只需在情节提要中使用常规 segue。如果没有任何预定义对您有好处(Push、Modal、Popover),只需选择 Custom。但是你必须提供一个 UIStoryboardSegue 子类——文档中有很多关于如何创建子类的信息。我已经做到了,并不难 - 基本上你只需定义在两个时间点之前需要发生的事情。所以你可以做任何类型的动画。
        • 酷 - 我今天一定会尝试的。但是有一个问题:当我创建了 UIStoryboardSegue 的子类时,这是我需要放入类中的代码吗? stackoverflow.com/questions/14081880/…
        • 是的,类似的。
        猜你喜欢
        • 1970-01-01
        • 2013-10-15
        • 1970-01-01
        • 1970-01-01
        • 2012-05-28
        • 1970-01-01
        • 2014-02-14
        • 1970-01-01
        • 2011-12-27
        相关资源
        最近更新 更多