UIKit框架

什么是框架?

简单来说,就是其他攻城狮开发完成的代码,包括库文件、头文件等,这些文件中的API我们可以拿过来使用

UIKit框架是干什么的?

提供创建基于触摸用户界面的类

包括:屏幕上的绘制机制、捕捉事件、管理组织复杂的UI元素


UIKit中最重要的两个类?

1)UIView:所有可以看到的组件/控件/视图的父类

如:UIButton按钮、UILabel标签、UITextField输入框、UIImageView图片视图等

2)UIViewController:所有控制器的父类,负责管理一个页面

如:UIViewController基本页面、UITableViewController表格视图页面等

这两个父类都继承自UIResponder,称作响应者(以后介绍)

UIResponder继承自NSObject


控制器的基本使用

在MVC设计模式中,控制器负责视图与模型数据的关联,完成页面的逻辑功能


UIViewController中包含一个非常重要的属性:页面中的视图

@property(nonatomic,retain)UIView*view

代码创建控制器:

UIViewController*vc=[[UIViewControlleralloc]init];

控制器对象vc,即一个App中的页面,包含一个白色的空白view


设置App的初始页面(空模板下):

在AppDelegate文件中找到以下方法

-(BOOL)application:(UIApplication*)applicationdidFinishLaunchingWithOptions:(NSDictionary*)launchOptions

在注释位置添加代码:

创建控制器对象,并设置其view的背景颜色

设置window对象的根控制器(初始页面)为新建的控制器

详细解释以下 空项目启动 的代码过程:

1)创建一个UIWindow对象,其大小为当前屏幕的大小

2)创建一个控制器

3)设置window对象的根控制器(初始页面)

4)设置window对象为key window 并显示


什么是key window?

即主窗口,同一时刻只有一个窗口是主窗口

主窗口能够接收各种事件,如触摸事件、运动事件、键盘事件等。

UIWindow的父类是UIView


控制器子类

对于UIKit中的使用,一是拿过来直接使用,二是实现子类

实现子类的好处是:将操作封装(高内聚低耦合)

控制器子类:

如UIViewController子类AMViewController

控制器中的几个应重写方法:

init方法:控制器对象被创建后初始化时的调用

该方法中应当先调用父类方法

通常在该方法中添加与视图无关的操作

viewDidLoad方法:控制器对象管理的view被加载时调用

该方法中应当先调用父类方法

通常在该方法中添加与视图相关的操作

-(void)viewDidLoad{[superViewDidLoad];//Doanyadditionalsetupafterloadingtheview.}

UIView的基本属性

//背景颜色@property(nonatomic,copy)UIColor*backgroundColor//透明度@property(nonatomic)CGFloatalpha//视图对象的ID@property(nonatomic)NSIntegertag//是否隐藏@property(nonatomic,getter=isHidden)BOOLhidden//所在window@property(nonatomic,readonly)UIWindow*window



UIView的子视图

UIView是容器对象:

每一个UIView都是一个容器,能容纳其他UIView。

容纳其他UIView的UIView我们称之为父控件,被容纳的UIView我们称之为子控件。

子控件的存在依赖于父控件的存在,子控件的位置等属性是以父控件作为基准的。

相关属性:

@property(nonatomic,readonly)UIView*superview@property(nonatomic,readonly,copy)NSArray*subviews


添加子视图:

subview在显示到屏幕上时,是位于superview上层的 ,添加的方法:

-(void)addSubview:(UIView*)view

同一个view的subview是按照加入的顺序显示对应层的,越晚加入的subview显示在越上层,反之也是如此

用superview可以直接管理subview的层 。相关方法:

-(void)insertSubview:(UIView*)viewatIndex:(NSInteger)index-(void)insertSubview:(UIView*)viewaboveSubview:(UIView*)siblingSubview-(void)insertSubview:(UIView*)viewbelowSubview:(UIView*)siblingSubview-(void)bringSubviewToFront:(UIView*)view-(void)sendSubviewToBack:(UIView*)view-(void)removeFromSuperview-(UIView*)viewWithTag:(NSInteger)tag


子视图的位置及尺寸:

UIView对象包含以下与位置及尺寸相关的属性:

@property(nonatomic)CGRectframe//frame属性(以父视图为坐标原点)@property(nonatomic)CGRectbounds//bounds属性(以自身为坐标原点)@property(nonatomic)CGPointcenter//center属性(以俯视图为坐标原点)@property(nonatomic)CGAffineTransformtransform//形变属性


视图的坐标系: