ios 视图切换翻页效果

简介:

本文写的是视图切换,涉及到的内容有

1.实现代码添加Navigation Bar  Toolbal;

2.实现在Navigation Bar和Toolbar上用代码添加Bar Button Item;

3.UIView层面的简单动画效果


先把实现结果功能截图贴出来,对应动画效果

开始界面 和第一次向上翻页

向上翻页 和向下翻页

从左向右翻页 和从右向左翻页



开始制作:

1.创建一个新工程叫NVDemo; File->New->Project ->single View Application -> next

2.在新建两个ViewController,分别为FirstViewController和SecondViewController,顺便把XIB一块生成好



3.首先在视图上添加导航栏和导航按钮,经测试导航栏上只能添加两个导航按钮,和设置一个title标题;

我们还需要知道的一个常识是NavigationBar  ToolBar  Tab  Bar  都是44像素,所以在设置他们宽度时候他们的高度设置成44

还有一个通知栏,显示电量信息信号的地方是20像素;

- (void)viewDidLoad {     [super viewDidLoad]; 	// Do any additional setup after loading the view, typically from a nib.      //    创建导航栏,44像素     UINavigationBar *navigationBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];      //    需要在导航栏上创建按钮,所以先创建一个导航栏集合     UINavigationItem *navagationItem = [[UINavigationItem alloc] initWithTitle:@"导航栏"];          UIBarButtonItem *leftButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action:@selector(pageDown:)];          UIBarButtonItem *rightButton = [[UIBarButtonItem alloc]initWithTitle:@"右测试"                                                                    style:UIBarButtonItemStyleDone                                                                   target:self                                                                   action:@selector(leftpage:)];     [navigationBar pushNavigationItem:navagationItem animated:YES];          [navagationItem setLeftBarButtonItem:leftButton animated:YES];     [navagationItem setRightBarButtonItem:rightButton animated:YES];          [self.view addSubview:navigationBar];           UIToolbar *toolBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 416, 320, 44)];          NSMutableArray *toolBarArray = [NSMutableArray array];           [toolBarArray addObject:[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemPageCurl                                                                            target:self                                                                            action:@selector(switchLoadView:)]];          [toolBarArray addObject:[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemSearch                                                                          target:self                                                                          action:@selector(rightpage:)]];          [toolBarArray addObject:[[UIBarButtonItem alloc]initWithTitle:@"MyTitle"                                                             style:UIBarButtonItemStylePlain                                                            target:self                                                            action:nil]];                    //UIToolBar上添加图像     [toolBarArray addObject:[[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"myImage.png"]                                                             style:UIBarButtonItemStylePlain                                                            target:self                                                            action:nil]];             [toolBar setItems:toolBarArray animated:YES];       [self.view addSubview:toolBar];        }


           [navigationBar pushNavigationItem:navagationItem animated:YES];涉及到一个压栈的操作,把navigationItem压到navigationBar里,导航栏上只能添加左右两个按钮;所以是setLeftBarButtonItem 和 setRightBarButtonItem,最后再将navigationBar添加到视图之上;

         在Toolbar上添加可以添加各种按钮,创建一个可变数组,把添加的按钮全部放到数组上,[toolBar setItems:toolBarArray animated:YES];将数组里按钮集合添加到了toolBar上面,选取图片的时候素材没选好,所以显示出来的图片那个按钮效果不是太好


4.接下来说的是按钮事件,因为需要用到FirstViewController和SecondViewController,在RootViewController.m添加上他们的头文件,为了区别确实是两个视图的切换,在他们的ViewDidLoad函数中初始化视图的背景颜色,

self.view.backgroundColor = [UIColor yellowColor];  和self.view.backgroundColor = [UIColor redColor];


按钮时间再次也不做过多解释,全部写在注释里了,其他几个都一样,只是修改了动画效果,变化不大,详情可下载源代码研究一下;

-(void) switchLoadView:(id)sender {  //开始一个动画         [UIView beginAnimations:@"Curl" context:nil]; //    设置动画方式,开始和结束时动画效果比较慢     [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; //    动画持续时间     [UIView setAnimationDuration:1.25]; //    设置动画效果,向上翻页     [UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:self.view cache:YES];          //    首先判断firstView视图父视图是否为空     if (firstView.view.superview == nil)      { //        父视图为空,在判断他的子视图是否为空,如果为空在创建一个视图加载上面         if (firstView.view == nil) {             FirstViewController *firstViewDemo = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];             firstView = firstViewDemo;         } //        把seconView视图从父视图中移除         [secondView.view removeFromSuperview]; //        在当前视图插入子视图firstView的视图         [self.view insertSubview:firstView.view atIndex:0];     }             else {             if (secondView.view == nil)              {                 SecondViewController *secondViewDemo = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];                 secondView = secondViewDemo;             }             [firstView.view removeFromSuperview];             [self.view insertSubview:secondView.view atIndex:0];         } //       动画结束     [UIView commitAnimations]; }

附上代码: http://download.csdn.net/detail/duxinfeng2010/4407717




咱在这在研究一个问题,在RootAppDelegate.m中我们先看看系统生成的代码


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {     self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];     // Override point for customization after application launch.        self.viewController = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil];     self.window.rootViewController = self.viewController;     [self.window makeKeyAndVisible];     return YES; } 

系统直接加载的就是的RootViewController的视图,也就是弹出第一个界面是RootViewController.xib,假如说我想第一个就显示的FirstViewController控制的视图怎么办? 我们就可以在这个函数中进行重写

在delegateApp.h中@class RootViewController后面添加@class FirstViewController;此处声明一个类,在这样当我们添加@property (strongnonatomicFirstViewController *fTestViewController;才不会报错;


只需修改两行代码,此处注释原先加载RootViewController视图的代码,可能是我命名的不够合理,RootViewController和rootViewController要区别开,一个工程建立的,一个是系统本身自动生成的

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {     self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];     // Override point for customization after application launch. //    self.viewController = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil]; //    self.window.rootViewController = self.viewController;           self.fTestViewController = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil]; //  把根控制视图设置成fTestViewController     self.window.rootViewController = self.fTestViewController;          [self.window makeKeyAndVisible];     return YES; }

然后再到我们的FirstViewController.m的ViewDidLoad函数先添加几行代码,以示区别

- (void)viewDidLoad {     [super viewDidLoad];     // Do any additional setup after loading the view from its nib.     self.view.backgroundColor = [UIColor yellowColor];          UIToolbar *toolBar = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, 320, 44)];         NSMutableArray *toolBarArray = [NSMutableArray array];     [toolBarArray addObject:[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemAction                                                                          target:self                                                                          action:nil]];          UIBarButtonItem *title=[[UIBarButtonItem alloc] initWithTitle:@"My Test"                                                             style:UIBarButtonItemStylePlain                                                            target:self                                                            action:nil];     [toolBar setItems:[NSArray arrayWithObject:title]];     [toolBar setItems:toolBarArray];         [self.view addSubview:toolBar];      } 

然后,当运行程序的时候,加载的就是FirstViewController的视图了







     本文转自新风作浪 51CTO博客,原文链接:http://blog.51cto.com/duxinfeng/1208749,如需转载请自行联系原作者






相关文章
|
Swift iOS开发
IOS 小说阅读《覆盖翻页》效果框架 DZMCoverAnimation
IOS 小说阅读《覆盖翻页》效果框架 DZMCoverAnimation
135 0
|
iOS开发
iOS UIPageViewController 翻页背景颜色修改
iOS UIPageViewController 翻页背景颜色修改
78 0
|
iOS开发
iOS开发-加在透明视图上的控件会透明
iOS开发-加在透明视图上的控件会透明
158 0
|
iOS开发
ios贝塞尔曲线表格视图
x轴和y轴都是可自定义,曲线的值也是对应的值
102 0
|
前端开发 小程序 数据处理
iOS上传图片视图的封装:用法 【下篇】
iOS上传图片视图的封装:用法 【下篇】
261 0
iOS上传图片视图的封装:用法 【下篇】
|
前端开发 API 数据处理
iOS小知识:封装上传图片视图(支持删除和添加)
iOS小知识:封装上传图片视图(支持删除和添加)
239 0
iOS小知识:封装上传图片视图(支持删除和添加)
|
安全 iOS开发
iOS 筛选视图的隐藏方案
iOS 筛选视图的隐藏方案
173 0
iOS 筛选视图的隐藏方案
|
监控 iOS开发
iOS视图置顶方案
iOS视图置顶方案
183 0
iOS视图置顶方案
|
API 开发工具 iOS开发
iOS视图置顶的应用:适配iOS12系统上日期控件被筛选视图遮挡问题
iOS视图置顶的应用:适配iOS12系统上日期控件被筛选视图遮挡问题
216 0
iOS视图置顶的应用:适配iOS12系统上日期控件被筛选视图遮挡问题
|
开发工具 iOS开发 git
iOS订单折扣视图应用于购物车界面(支持添加/删除/选择折扣)
iOS订单折扣视图应用于购物车界面(支持添加/删除/选择折扣)
164 0
iOS订单折扣视图应用于购物车界面(支持添加/删除/选择折扣)

热门文章

最新文章

  • 1
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 2
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 3
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
  • 4
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
  • 5
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
  • 6
    iOS8 中无需开源库的内置功能一览
  • 7
    iOS7应用开发7:自定义视图、手势操作
  • 8
    IOS小工具以及精彩的博客
  • 9
    Facebook SDK(iOS)初学讲解
  • 10
    iOS - Swift NSPoint 位置
  • 1
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
    14
  • 2
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
    28
  • 3
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    34
  • 4
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    29
  • 5
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
    23
  • 6
    uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
    143
  • 7
    【05】2025年1月首发完整版-篇幅较长-苹果app如何上架到app store完整流程·不借助第三方上架工具的情况下无需花钱但需仔细学习-优雅草央千澈详解关于APP签名以及分发-们最关心的一篇来了-IOS上架app
    235
  • 8
    app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
    90
  • 9
    深入探索iOS开发中的SwiftUI框架
    145
  • 10
    ios样式开关按钮jQuery插件
    60