码迷,mamicode.com
首页 > 其他好文 > 详细

第06章 多视图应用程序

时间:2014-12-20 14:03:49      阅读:263      评论:0      收藏:0      [点我收藏+]

标签:

6.1 多视图应用程序的常见类型

视图术语,通常指具有相应视图控制器的UIView或其子类,这些视图类型也称为内容视图。
 
常见的多视图类型有:
基于标签栏的应用程序 UITabBarController
基于导航栏的应用程序 UINavigationController
在ipad上,大部分基于导航的应用程序使用分割视图 split view
 
注意区分工具栏和标签栏,工具栏仅仅是底部放置了一系列工具控件的控件而已。
?
6.2 多视图应用程序的体系结构
 
根控制器:应用程序的主视图控制器,它负责管理当前向用户显示哪个视图。
这个根控制器通常是UINavigationController或UITabBarController或者其他自定义UIViewController
 
内容视图:每个内容视图至多由三部分组成,控制器,nib文件,UIView子类;
每个视图控制器控制着一个内容视图。
 
6.3 UINavigationController
使用Empty Application模版创建应用程序,这个模版提供了一个应用程序委托,其中有个UIWindow属性。
注意,每个应用程序仅拥有一个属于它的窗口。
 
 
1.创建控制器
创建根视图控制器 BIDSwitchViewController,不自动创建xib文件
创建两个内容视图控制器BIDBlueViewController,BIDYellowViewController
 
都不自动创建xib,后面手动创建,手动关联,是为了更好的理解controller和xib的关联
 
2.创建xib文件
command+n, 选中user interface, 选择view模版,这将创建一个带由内容视图的xib文件
名称为SwitchView.xib, BlueView.xib,  YellowView.xib
 
3.修改应用程序委托
使用SwitchView.xib初始化BIDSwitchViewContrller,并且设置其为应用程序委托窗口的根视图控制器。

 self.switchViewController = [[BIDSwitchViewController alloc]

                                 initWithNibName:@"SwitchView" bundle:nil];

 self.window.rootViewController = self.switchViewController;

 
 
4.在根视图控制器中,添加内容视图

//  BIDSwitchViewController.h

@property (strong, nonatomic) BIDYellowViewController *yellowViewController;

@property (strong, nonatomic) BIDBlueViewController *blueViewController;

 
5.修改手动创建的xib文件
手动创建的xib文件,起初不知道其File’s Owner的具体类型,所以需要设置
command+option+3 打开身份检查器,修改其File‘s Owner类型为 BIDSwitchViewController
 
UIViewController中有个view输出口,修改了xib文件的拥有者类型后,还需要将控制器的view输出口关联到xib文件的View。
之所以创建xib文件的时候其内部不自动关联,是因为其File‘s Owner默认类型为NSObject,无view输出口
 
6.构建带有工具栏的视图
从对象库中,拖出一个Toolbar,放置到view底部,并关联其按钮的动作方法switchViews
(现在应该搞清楚了,toolbar只是一个控件类型,而标签栏是一个可以容纳不同视图的视图控制器)
 
 
7.修改根视图控制器

- (void)viewDidLoad

{

    [super viewDidLoad];

 

    if (self.blueViewController == nil) {

        self.blueViewController = [[BlueViewController alloc] initWithNibName:@"BlueViewController" bundle:nil];

    }

    

    if (self.yellowViewController == nil) {

        self.yellowViewController = [[YellowViewController alloc] initWithNibName:@"YellowViewController" bundle:nil];

 

    } 

    //起初显出蓝色视图

    [self.view insertSubview:self.blueViewController.view atIndex: 0];    

}

 

//切换视图

- (IBAction)switchViews:(UIBarButtonItem *)sender

{

    if (self.yellowViewController.view.superview == nil) {

        //注意,移出父视图,是通过自己

        [self.blueViewController.view removeFromSuperview];

        //插入父视图,是通过父视图add

        [self.view insertSubview:self.yellowViewController.view atIndex:0];

    }else {

        [self.yellowViewController.view removeFromSuperview];

        [self.view insertSubview:self.blueViewController.view atIndex:0];

    }

}

 
注意,视图insertSubview:atIndex并且插入到0的位置,意思是将其放在其他所有子视之后,作为背景视图
避免遮住了前面创建的工具栏子视图。
 
 
8.实现内容视图
添加button,添加action方法
 
注意,虽然是简单的view切换,但是每个view视图,都是由一个视图控制器所拥有的。
 
 
9.视图转换过程的动画效果
UIView中,有几个类方法用于制定视图转换过程中,是否使用动画效果,指定转换类型和转换过程的持续时间。
 
为了告诉IOS,我们希望在转换过程中使用动画效果,需要声明一个动画块,并指定动画持续的时间。
 
beginAnimations:context:
第一个参数,动画块标题
第二个参数是一个void*指针
 
比如:

    [UIView beginAnimations:@"Flip View" context:nil];//设置动画块标题

    [UIView setAnimationDuration:1.25];//设置持续时间

 

    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];//设置动画曲线

 
 
应该始终对动画进行缓存,除非视图外观在动画执行过程中需要改变
//设置转换类型

[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.view cache:YES];

 

 

//…视图转换
。。。
 
//合成动画

[UIView commitAnimations];

 
从beginAnimations开始到最后commitAnimations之间的所有动作,都会被制成动画。
 
 
总结:
initWithNibName
insertSubview
removeFromSuperview
 

第06章 多视图应用程序

标签:

原文地址:http://www.cnblogs.com/wildathearthy/p/4175303.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!