zoukankan      html  css  js  c++  java
  • IOS

    APPLE提供了三种storyboard segue的方式:push,modal,custom .

    push segue是系统预定义的跳转方式,

    push

    为了使其能正常工作,我们还必须加载UINavigationController。

    有时候,我们不想看到UINavigation bar,我们可以使用modal segue。

    modal segue 的跳转方式有四种:Cover Vertical, Flip Horizontal, Cross Dissolve and Partial Curl。

    要是我们想要的跳转方式与这四种方式都不同,我们可以使用自定义跳转方式custom segue。

    下面是一个实现custom segue的样例:

    1.创建一个UIStoryboardsegue的子类

    customsegue

    2.重载-(void)perform 方法

     1 - (void) perform
     2 {
     3     UIViewController *desViewController = (UIViewController *)self.destinationViewController;
     4     
     5     UIView *srcView = [(UIViewController *)self.sourceViewController view];
     6     UIView *desView = [desViewController view];
     7     
     8     desView.transform = srcView.transform;
     9     desView.bounds = srcView.bounds;
    10     
    11     if(isLandscapeOrientation)
    12     {
    13         if(isDismiss)
    14         {
    15             desView.center = CGPointMake(srcView.center.x, srcView.center.y  - srcView.frame.size.height);
    16         }
    17         else
    18         {
    19             desView.center = CGPointMake(srcView.center.x, srcView.center.y  + srcView.frame.size.height);
    20         }
    21     }
    22     else
    23     {
    24         if(isDismiss)
    25         {
    26             desView.center = CGPointMake(srcView.center.x - srcView.frame.size.width, srcView.center.y);
    27         }
    28         else
    29         {
    30             desView.center = CGPointMake(srcView.center.x + srcView.frame.size.width, srcView.center.y);
    31         }
    32     }
    33     
    34     
    35     UIWindow *mainWindow = [[UIApplication sharedApplication].windows objectAtIndex:0];
    36     [mainWindow addSubview:desView];
    37     
    38     // slide newView over oldView, then remove oldView
    39     [UIView animateWithDuration:0.3
    40                      animations:^{
    41                          desView.center = CGPointMake(srcView.center.x, srcView.center.y);
    42                          
    43                          if(isLandscapeOrientation)
    44                          {
    45                              if(isDismiss)
    46                              {
    47                                  srcView.center = CGPointMake(srcView.center.x, srcView.center.y + srcView.frame.size.height);
    48                              }
    49                              else
    50                              {
    51                                  srcView.center = CGPointMake(srcView.center.x, srcView.center.y - srcView.frame.size.height);
    52                              }
    53                          }
    54                          else
    55                          {
    56                              if(isDismiss)
    57                              {
    58                                  srcView.center = CGPointMake(srcView.center.x + srcView.frame.size.width, srcView.center.y);
    59                              }
    60                              else
    61                              {
    62                                  srcView.center = CGPointMake(srcView.center.x - srcView.frame.size.width, srcView.center.y);
    63                              }
    64                          }
    65                      }
    66                      completion:^(BOOL finished){
    67                          //[desView removeFromSuperview];
    68                          [self.sourceViewController presentModalViewController:desViewController animated:NO];
    69                      }];

    70 } 

    在viewcontroller中,重载prepareforsegue方法

     1 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
     2 {
     3     HorizontalSlideSegue *s = (HorizontalSlideSegue *)segue;
     4     s.isDismiss = NO;
     5     
     6     if (UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation))
     7     {
     8         s.isLandscapeOrientation = YES;
     9     }
    10     else
    11     {
    12         s.isLandscapeOrientation = NO;
    13     }

    14 } 

    3.选择custom segue 设置segue class为:customsegue(我们自定义的类)

    drfine

    4.使用代码方式调用segue: 

  • 相关阅读:
    关于同余最短路
    【水】关于 __attribute__
    题解【AtCoder
    一些简单图论问题
    浅谈简单动态规划
    关于博客园主题(美化博客园)
    Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Machine Learning 第47章 读书笔记(待更新)
    Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Machine Learning 第46章 读书笔记(待更新)
    Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Machine Learning 第45章 读书笔记(待更新)
    Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Machine Learning 第44章 读书笔记(待更新)
  • 原文地址:https://www.cnblogs.com/ZJUT-jiangnan/p/3884457.html
Copyright © 2011-2022 走看看