IOS开发 - Create Push Segue Animation Without UINavigationController

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

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

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

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

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

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

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

1.创建一个UIStoryboardsegue的子类

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(我们自定义的类)

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

IOS开发 - Create Push Segue Animation Without UINavigationController

时间: 2024-10-15 12:21:58

IOS开发 - Create Push Segue Animation Without UINavigationController的相关文章

IOS开发之——使用Segue在StoryBoard之间切换

使用Segue能够在ViewController之间来回切换,以下就来说下切换方法: 1. 使用点击button进行切换 直接上图,在须要切换的View属性界面,点击Modal然后拉到前一个view界面或者是Button上 2. 手动进行跳转 假设拉到了Button的TouchUpInside上,那么点击左側button的时候就会切到右边的View,假设拉到了view上,就会连接Manual,在代码中实现跳转 设置Segue的Indentifier属性: 代码中手动进行跳转: //在viewDi

iOS开发UINavigation系列四——导航控制器UINavigationController

iOS开发UINavigation系列四--导航控制器UINavigationController 一.引言 在前面的博客中,我么你介绍了UINavigationBar,UINavigationItem和UIToolBar,UINavigationController是将这些控件和UIViewController紧密的结合了起来,使用导航,我们的应用程序层次会更加分明,对controller的管理也更加方便.前几篇博客地址如下: UINavigationBar:http://my.oschina

IOS开发——Core Graphics & Core Animation

好久没写过blog了,首先了解下最近苹果和IOS方面的最新消息. 1.WWDC2014在上个月举行了,与2013年一样,今年WWDC没发布硬件产品和新品(如果你懂cook你就会期待今年秋季发布会,预计10中旬举行) 今年WWDC有一个最令人兴奋的新语言发布--Swift,小编也花了将近半个月来学习新语言,发现Swift与反人类语言objective-c不同的是完全抛弃了C,更像是js+lua+python+各种脚本语言的集合,这也是时间上最新最先进的开发语言,小道消息说swift今年4岁,也就是

iOS开发日记16-动画Animation

今天博主有一个动画Animation的需求,遇到了一些困难点,在此和大家分享,希望能够共同进步. iOS开发中的动画分为两种:一种为UIView动画,又称隐式动画,动画后frame的数值发生了变化.另一种是CALayer动画,又称显示动画,动画后模型层的数据不会发生变化,图形回到原来的位置.但是在实际开发中,因为UIView可以相应用户交互,所以UIView动画用的多. 一.UIview的动画 1.实现方式:动画块,block begin //设置动画效果  修改属性值,动画时长等等 conmm

【iOS开发-UITabBarController】UITabBarController上面的UINavigationController的设置

自定义导航栏 为了保证项目的导航栏效果一直,一般都会设置导航栏的样式一样 ①自定义一个NavigationController类,继承与UINavigationController类 ②更改所有的UITabBarController下面的UINavigationController的class属性为自定义类形式 ③主要是取得导航栏的appearance对象,操作它就设置导航栏的主题 UINavigationBar *navBar = [UINavigationBar appearance]; ④

iOS开发使用Unwind Segue进行返回

我们在之前的一篇博客中谈到怎样使用dismissViewControllerAnimation()的方法在iOS中返回,如今我们有一个更为方便的方法来实现界面跳转之后的返回操作.使用的是Unwind Segue.详细实现过程例如以下: (1)分别在两个ViewController中创建一个button.一个作为跳转.一个作为返回,而且链接"跳转"button到第二个ViewController.总体界面布局例如以下: (2)在第一个ViewController中写一个@IBAction

iOS开发UI篇——Core Animation核心动画CAShapeLayer(绘制图形等)简介

重点: 获取绘制图形        Layer CAShapeLayer *shapeLayer = [CAShapeLayer layer];     设置图形有线颜色   [CAShapeLayer layer].strokeColor = [UIColor redColor].CGColor;      设置图形填充颜色   [CAShapeLayer layer].fillColor = [UIColor clearColor].CGColor;   设置图形线宽      [CASha

ios开发:UINavigationController反方向滑动push

新建个UINavigationController的类别: #import "UINavigationController+CustomAnimation.h" @implementation UINavigationController (CustomAnimation) - (void)customPushViewController:(UIViewController *)viewController { viewController.view.frame = (CGRect){

iOS开发——控制器OC篇&UINavigationController&UITabBarController详解

UINavigationController&UITabBarController详解 一:UINavigationController 控制器的属性: UINavigationController以栈的形式保存子控制器 @property(nonatomic,copy) NSArray *viewControllers; @property(nonatomic,readonly) NSArray *childViewControllers; 导航控制器之间的跳转: 使用push方法能将某个控制