【问题标题】:How to create custom modal segue in 4.2 Xcode using storyboard [closed]如何使用情节提要在 4.2 Xcode 中创建自定义模式 segue [关闭]
【发布时间】:2011-12-27 04:45:38
【问题描述】:

我正在使用情节提要来创建我的新 iPad 项目。我想使用自定义模态 segue 在视图之间进行更好的转换。我的问题是如何使用自定义模态,是否有任何教程显示使用自定义模态 segues?

【问题讨论】:

    标签: ipad sdk ios5


    【解决方案1】:

    此自定义序列会弹回导航堆栈的根目录。如果您想返回一级,请使用普通弹出窗口而不是“popToViewController”。我就是喜欢这个方法的名字。

    标题:

    #import <UIKit/UIKit.h>
    
    @interface FlipTopPopToRoot : UIStoryboardSegue
    
    @end
    

    实现:

    #import "FlipTopPopToRoot.h"
    
    @implementation FlipTopPopToRoot
    
    - (void) perform {
    
    UIViewController *src = (UIViewController *) self.sourceViewController;
    [UIView transitionWithView:src.navigationController.view duration:0.5
                       options:UIViewAnimationOptionTransitionFlipFromTop
                    animations:^{
                        [src.navigationController popToViewController:[src.navigationController.viewControllers objectAtIndex:0] animated:NO];;
                    }
                    completion:NULL];
    }
    
    @end
    

    【讨论】:

      【解决方案2】:

      我正在寻找类似的东西,发现当前的答案有点误导。 TJ 提供的当前教程是在导航控制器中执行定制的 segue。如果您正在寻找模态转场,我相信您需要调用:

       [self.sourceViewController presentModalViewController:self.destinationViewController animated:NO];
      

      并更改动画的选项。

      可以在我写的这篇文章中找到更多信息:link

      【讨论】:

        【解决方案3】:

        我发现这是最简单的方法,而不是编写大量代码来滑动框架。

        这是自定义转场

        - (void) perform {
            UIView *oldView = ((UIViewController *)self.sourceViewController).view;
            UIView *newView = ((UIViewController *)self.destinationViewController).view;
        
            [oldView.window insertSubview:newView aboveSubview:oldView];
            float offsetY = newView.center.y  - oldView.center.y ;
            //NSLog(@"old y = %f, new y = %f , offsetY = %f", oldView.center.y, newView.center.y, offsetY);
        
        
            // assuming newView and oldView both sized to fill screen,
            //   position newView just to the right of oldView
        
            newView.center = CGPointMake(oldView.center.x + oldView.frame.size.width, oldView.center.y + offsetY);
            //NSLog(@"newView center x = %f y = %f", newView.center.x, newView.center.y);
            // slide newView over oldView, then remove oldView
            [UIView animateWithDuration:0.3
                             animations:^{ newView.center = CGPointMake(oldView.center.x, oldView.center.y + offsetY);}
                             completion:^(BOOL finished){ [oldView removeFromSuperview]; }];
        }
        

        希望这会有所帮助!

        【讨论】:

        • 我在做的一个项目中使用了类似这样的代码,如何返回到新视图替换的原始视图。
        猜你喜欢
        • 2012-03-08
        • 2012-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-13
        • 2017-09-20
        • 1970-01-01
        • 2015-09-03
        相关资源
        最近更新 更多