iOS8学习笔记-构建多视图应用程序

严格来讲,凡是UIView的子类均可以称为视图,实际上IOS的图形界面就是视图包含视图的方案,绝大多数的控件都是UIView的子类,可是苹果公司定义的视图术语,一般是指具备相应视图控制器的uiview及其子类,MVC架构嘛,所以这些视图有时候也被称为内容视图缓存

第一种常见的多视图是基于导航的应用程序,该类程序拥有一个导航控制器,使用导航栏来控制一系列分层的视图,如iphone的设置应用程序,导航控制器跟踪所在的视图深度,而且向你提供控制权,让你能够回到以前的视图,在但愿显示具备不一样层次结构的视图时就能够使用这种基于导航的应用形式架构

第二种常见的多视图是标签栏,它在屏幕底部显示一行按钮,称之为标签栏,单击某个按钮就能激活一个新的视图控制器,并显示一个新的视图iview

另外,这两种视图交换控制机制不是绝对独立的,应为视图本质上是分层的,因此彻底能够在一个应用程序中使用不一样的视图交换机制,结合标签栏,导航栏一块儿来对应用程序的逻辑进行控制iphone

一些应用程序使用了工具栏,工具栏的样子和标签栏差很少,可是他们有本质上的区别,标签栏用于从两个或者更多选项中选择一个,并且只能选择一个,工具栏能够包含一些按钮和一些控件ide

 

全部的多视图应用程序都是使用的UIKit提供的某个具体的控制器类,好比标签栏界面使用的是UITabBarController类实现,导航界面使用UINavigationController类实现函数

对于负责管理向当前用户显示哪一个界面的的控制器,咱们称之为根控制器,这个根控制器一般是UINavigationController或者UITabBarController的子类,也能够是UIViewController的自定义子类工具

标签栏应用程序中,点击标签栏将会跳转到对应的标签栏控制器中,可是点击屏幕其余位置,都会转到与当前现实的内容视图相对应的控制器中动画

 

使用标签栏应用程序,第一步是应用程序委托,在didFinishLuanchingWithOptions函数中将标签控制器做为程序window主控制器,代码以下ui

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];//建立window
    self.switchViewController = [[SwitchViewController alloc] initWithNibName:@"SwitchViewController" bundle:nil];//建立主视图控制器
    UIView* switchView = self.switchViewController.view;//获得主视图控制器的view
    CGRect switchViewFrame = switchView.frame;//获得view的frame大小
    switchViewFrame.origin.y += [UIApplication sharedApplication].statusBarFrame.size.height;
    switchView.frame = switchViewFrame;//调整几何属性,以避免被隐藏在状态栏后面
    self.window.rootViewController = self.switchViewController;
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    
    return YES;

工具栏上的按钮与其余iOS控件不一样,他们只支持一个目标动做方法,而且只在特定时刻触发,至关于button的touch upsidespa

当切换标签被按下的时候触发切换方法,同时还应该从新定义viewDidLoad方法,以下

 self.blueViewController = [[BlueViewController alloc] initWithNibName:@"BlueViewController" bundle:nil];
    [self.view insertSubview:self.blueViewController.view atIndex:0];

切换方法以下

[UIView beginAnimations:@"View" context:NULL];
    [UIView setAnimationDuration:0.5];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    
    if(self.yellowViewController.view.superview == nil)
    {
        if(self.yellowViewController == nil)
        {
            self.yellowViewController = [[YellowViewController alloc] initWithNibName:@"YellowViewController" bundle:nil];
            
        }
        [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.view cache:YES];
        
        [self.blueViewController.view removeFromSuperview];
        [self.view insertSubview:self.yellowViewController.view atIndex:0];
    }
    else
    {
        if(self.blueViewController == nil)
        {
            self.blueViewController = [[BlueViewController alloc] initWithNibName:@"BlueViewController" bundle:nil];
        }
        [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.view cache:YES];
        
        [self.yellowViewController.view removeFromSuperview];
        [self.view insertSubview:self.blueViewController.view atIndex:0];
    }
    [UIView commitAnimations];

接下来还须要实现didReceiveMemoryWarning方法,当内存减小到一个一个设定的水平的时候,操做系统发送给应用

    if(self.blueViewController.view.superview == nil)
    {
        self.blueViewController = nil;
    }
    else
    {
        self.yellowViewController = nil;
    }

作内存管理

 

 

关于视图转换时候的动画效果

iOS的动画效果使用core animation组件,包括

1.

[UIView beginAnimations:@"View" context:NULL];第一个参数为动画块标题,第二个为链接到动画块的对象

2.

[UIView setAnimationDuration:0.5];

指定动画块的持续时间

3.

[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];

指定动画块效果

4.

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

指定动画块缓存,这样使用动画块的时候就能够使用这个缓存

5.

[UIView commitAnimations];调用动画块开始执行

相关文章
相关标签/搜索