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: 

  • 相关阅读:
    【面积并】 Atlantis
    【动态前k大 贪心】 Gone Fishing
    【复杂枚举】 library
    【双端队列bfs 网格图建图】拯救大兵瑞恩
    【奇偶传递关系 边带权】 奇偶游戏
    【权值并查集】 supermarket
    CF w4d3 A. Pythagorean Theorem II
    CF w4d2 C. Purification
    CF w4d2 B. Road Construction
    CF w4d2 A. Cakeminator
  • 原文地址:https://www.cnblogs.com/ZJUT-jiangnan/p/3884457.html
Copyright © 2011-2022 走看看