【iOS】第01讲 UIView/UIViewController/UIApplication详解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Nanhu2012/article/details/75095840

一、UIView详解

Command+Alt+Enter -> 显示ViewController

按住Ctrl直接把UIView拖到ViewController


 1.1 UIView的常见属性

 @property(nonatomic,readonly) UIView *superview;

   获得自己的父控件对象

 @property(nonatomic,readonly,copy) NSArray *subviews;

   获得自己的所有子控件对象

 @property(nonatomic) NSInteger tag;

   控件的ID,父控件可以通过tag来找到对应的字控件

 @property(nonatomic) CGAffineTransform transform;

   控件的形变属性(可以设置旋转角度、比例缩放、平移)

 @property(nonatomic) CGRect frame;

   控件矩形框在父控件中的位置和尺寸(以父控件的左上角为坐标原点)

 @property(nonatomic) CGRect bounds;

   控件矩形框的位置和尺寸(以自己左上角为坐标原点,所以bounds的x,y一般为0)

 @property(nonatomic) CGPoint center;

   控件中点的位置(以父控件的左上角为坐标原点)


二、UIViewController详解


  2.1 UIViewController

     //当控制器加载完毕时调用

      - (void) viewDidLoad;

     //当控制器的view即将显示的时候调用

      - (void) viewWillAppear:(BOOL) animated;

     //当控制器的view显示完毕时调用

      - (void) viewDidAppear:(BOOL) animated;

     //当控制器view将要布局子控件时调用

      - (void) viewWillLayoutSubviews;

     //当控制器的view布局子控件完毕时调用

      - (void) viewDidLayoutSubviews;

     //当控制器的view即将消失时调用

      - (void) viewWillDisapper:(BOOL) animated;

     //当控制器的view消失完毕时调用

      - (void) viewDidDisappear;

     //当控制器受到内存警告时调用

      - (void) didReceiveMemoryWarning;


  2.2 多控制器

      一个iOS的app很少只由一个控制器组成

      当app中有很多个控制器的时候,我们就需要对这些控制器进行管理

      有多个view时,可以用1个大的view去管理一个或多个小view

       控制器也是如此,用1个控制器去管理其他多个控制器


    为了便于管理控制器,iOS提供了2个比较特殊的控制器

    UINavigationController和UITabBarController


   <1> UINavigationController

      view结构

      导航条

      栈顶控制器的view

       


     UINavigationController的简单使用

         >初始化UINavigationController

         >设置UIWindow的rootViewController为UINavigationController

         >根据具体情况,通过push方法添加对应个数的字控制器


     UINavigationController的子控制器

        >UINavigationController以栈的形式保存子控制器

        @property(nonatomic,copy) NSArray *viewControllers;

        @property(nonatomic,readonly) NSArray *childViewControllers;


       >使用push方法能将某个控制器压入栈

        - (void) pushViewController:(UIViewController*):viewController animated:(BOOL)animated;


       >使用pop方法可以移除控制器

        将栈顶的控制器移除

         - (UIViewController*) popViewControllerAnimated:(BOOL)animated;

        回到指定的子控制器

        - (NSArray*) popToViewController:(UIViewController*) viewController animated:(BOOL)animated;

         回到根控制器(栈底控制器)

        - (NSArray*) popToRootViewControllerAnimated:(BOOL)animated;  


      如何修改导航条的内容

      导航条的内容由栈顶控制器的navigationItem属性决定

      UINavigationItem有以下属性影响着导航条的内容

       >左上角的返回按钮

         @property(nonatomic,retain) UIBarButtonItem *backBarButtonItem;

       >中间的标题视图

         @property(nonatomic,retain) UIView   *titleView;

       >中间的标题文字

         @property(nonatomic,copy) NSString   *title;

       >左上角的视图

         @property(nonatomic,retain) UIBarButtonItem *leftBarButtonItem;

       >右上角的视图

         @property(nonatomic,retain) UIBarButtonItem *rightBarButtonItem;


    <2> UITabBarController

     使用步骤

       > 初始化

       > 设置UIWindow的rootViewController为UITabBarController

       > 根据具体情况,通过addChildViewController方法添加对应个数的子控制器

          添加子控制器的方式有2种:

           > 添加单个子控制

             - (void)addChildViewController:(UIViewController*)childController;

           > 设置子控制器数组

             @property(nonatomic,copy) NSArray *viewControllers;

      

       view结构

            UITabBarController默认显示第一个子控制器

            


三、程序框架原理及工程文件概念


  3.1 LaunchScreen文件

    用来设置启动页面,如果不设置,默认它的屏幕大小是4s的尺寸

    

      也可以不从LaunchScreen.storyboard加载启动图

       把启动图添加到LaunchImage里的

     

       指定LaunchImage 启动图里的各个尺寸

              

  3.2 info.plist文件

        设置app的配置信息,它是一个字典

        Bundle name : 应用程序的名称

        Bundle identifier : 应用程序的唯一标识

        Bundle versions string,short : 版本号

        Bundle version : 应用程序打包版本号


  3.3 PCH文件

      首先在工程新建一个PCH文件

      然后 在Build Settings 下

      设置 Apple LLVM - Language 的 Precompile Prefix Header 和 Prefix Header

     

       a.存放一些公有的宏

           #define ScreenW [UIScreen mainScreen].bounds.size.width

       b.导入公用的头文件

           #import "UIView+frame.h"

       c.自定义log

         #ifdef DEBUG

            #define LOG(...) NSLog(__VA_ARGS_)

         #else

            #define LOG(...)

         #endif


  3.4 UIApplication

      每一个应用都有自己的UIApplication ,而且是单例的

      通过[UIApplication sharedApplication] 可以获得这个单例对象

      一个iOS程序启动后创建的第一个对象就是UIApplication对象

      > 设置应用程序图标右上角的红色提醒数字

         iOS 8之后需要先注册用户通知

         @property(nonatomic) NSInteger applicationIconBadgeNumber;

    UIApplication *app = [UIApplicationsharedApplication];

    

    UIUserNotificationSettings *notice = [UIUserNotificationSettings         settingsForTypes:UIUserNotificationTypeBadgecategories:nil];

    [app registerUserNotificationSettings:notice];

    

    app.applicationIconBadgeNumber =1;


      > 设置联网指示器的可见性

         @property(nonatomic,getter=isNetworkActivityIndicatorVisible)

               BOOL networkActivityIndicatorVisible;


      > 设置状态栏

          从iOS7开始,系统提供了2种管理状态栏的方式

             > 通过UIViewController管理(每一个UIViewController都可以拥有自己不同的状态栏)

             > 通过UIApplication管理 (一个应用程序的状态栏由它统一管理)

          在iOS7中,默认情况下,状态栏都是由UIViewController管理的

          UIViewController实现下列方法就可以轻松管理状态栏的可见性和样式

              > 状态栏的样式

                - (UIStatusBarStyle)preferredStatusBarStyle;

              > 状态栏的可见性

                - (BOOL)preferredStatusBarHidden;

          设置通过UIApplication管理状态栏,需要在Info.plist中添加 设置为NO

          


    app.statusBarHidden =YES;

    app.statusBarStyle =UIStatusBarStyleLightContent;


      > 打开网页openURL

         - (BOOL)openURL:(NSURL*)url;

         >打电话

           [app openURL:[NSURL URLWithString:@"tel://10086"]];

         >发短信

           [app openURL:[NSURL URLWithString:@"sms://10086"]];

         >发邮件

           [app openURL:[NSURL URLWithString:@"mailto:[email protected]"]];

         >打开一个网页资源

           [app openURL:[NSURL URLWithString:@"http://www.baidu.com"]];


      > UIApplication和delegate

        所有的移动操作系统都有个致命的缺点:

           app很容易受到打扰。比如一个来电或者锁屏会导致app进入后台甚至被终止。

        在app受到干扰时,会产生一些系统事件,

           这时UIApplication会通知它的delegate对象,让delegate代理来处理这些系统事件

         delegate可处理的事件包括:

           > 应用程序的生命周期事件(如程序启动,关闭)

           > 系统事件 (如来电)

           > 内存警告

      

                    

               

  3.5 UIWindow

     UIWindow是一种特殊的UIView,通常在一个app中至少有一个UIWindow


     iOS程序启动完毕后,创建的第一个视图控件就是UIWindow,接着创建控制器的view

     最后将控制器的view添加到UIWindow上,于是控制器的view就显示在屏幕上了


     窗口创建流程:

       1> 如果Info.plist中的Main storyboard file base name 设置为 Main

            它会加载Main.storyboard,如果为空,不加载Main.storyboard

       2> 先创建一个窗口UIWindow

       3> 把Main.storyboard箭头指向的控制器,设为根控制器

       4> 显示窗口(把控制器的view,添加到窗口)

      




猜你喜欢

转载自blog.csdn.net/Nanhu2012/article/details/75095840