【问题标题】:Use destinationViewController button in a custom segue在自定义 segue 中使用 destinationViewController 按钮
【发布时间】:2013-03-09 14:12:13
【问题描述】:

我的目标是使用自定义动画制作自定义转场,如下所示: 我希望 segue 用来自 destinationViewController 的按钮覆盖来自 sourceViewController 的按钮,其效果类似于导航控制器的推送效果,即新按钮应该将旧按钮从右向左推开。

我已经能够根据需要使旧按钮(来自 sourceViewController)移开:

[UIView animateWithDuration:1.0 animations:^{
        // set the target frame for animated view
        sourceViewController.optionsButton.frame = leftButtonTargetFrame;
    } completion:^(BOOL finished) {
        [navigationController pushViewController:destinationViewController animated:NO];
        // reset the button's frame back to its original frame
        sourceViewController.optionsButton.frame = leftButtonInitFrame;
}];

但我正在努力让新按钮(来自destinationViewController)移入。原因是我无法访问destinationViewController 的视图元素:在执行segue 时,它​​们没有被实例化。而且我无法为未实例化的按钮设置动画。

那么如何用destinationViewController 中的按钮替换sourceViewController 中的按钮?

【问题讨论】:

    标签: ios animation uiviewcontroller uistoryboardsegue


    【解决方案1】:

    当您尝试访问按钮时,目标视图控制器的视图尚未初始化/加载。要加载目标视图控制器的视图,您可以简单地访问视图属性。在使用按钮之前执行此操作:[destinationViewController view];

    destinationViewController.view; 也可以,但会产生编译器警告。

    背景资料:

    如果您访问view 属性并且它的值当前为nil,则视图控制器会自动调用loadView 方法并返回结果视图。

    方法loadView 加载控制器管理的视图。你永远不应该直接调用这个方法。

    【讨论】:

      【解决方案2】:

      您是正确的,您不能为尚不存在的对象设置动画。但是,您可以伪造它。

      1. 创建一个占位符按钮,该按钮看起来与新视图控制器中的按钮相同。
      2. 将其动画到正确的位置。
      3. 当目标视图控制器进入时,它的按钮应该是不可见的。
      4. 在视图控制器就位后(即 segue 完成),目标视图控制器可以确保其按钮的正确放置并使其实际按钮可见。

      希望这会有所帮助。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-12
      • 2016-05-11
      • 1970-01-01
      • 2015-04-18
      • 2015-01-08
      • 1970-01-01
      • 2013-04-02
      • 2012-04-10
      相关资源
      最近更新 更多