MVC设计模式
MVC介绍:MVC是一种满足面向对象思想的设计模式
MVC特点:低耦合、高重用、维护及拓展性强; 对修改关闭,对扩展开放。
MVC设计模式是一种面向对象思想的设计模式
M(Model):模型,用于提供和存储程序执行过程中所需要的数据。
V(View):视图,用户可见或可交互的界面元素。
C(Controller):控制器,作为Model和View之间交互的媒介,实现大量的鞋无逻辑。
MVC设计模式结构:
注意:View及Model永远不会直接交互,通过Controller实现View和Model间的间接交互,Controller处理View接收的用户事件更新Model,Model更新完成通知Controller及时刷新View用户界面。
MVC中常用到委托delegate及通知NOtification设计模式。
UIWindow(窗口)
UIWindow作为程序的窗口,容纳并展示所有界面元素
AppDelegate中默认初始化了一个UIWindow,一般情况下不用手动新建;
在iOS里UIWindow是UIView的子类
UIWindow初始化方法:
[UIWindow alloc] initWithFrame:[[UIScreen mainScreen].bounds]
UIView(视图)
UIView是基本的视图类,表示屏幕上的一块矩形区域。
UIView用于展示内容以及接收用户交互事件。
UIView可以管理其下显示的所有子视图。
屏幕坐标系:
视图(层次、大小、位置)
subview在显示到屏幕上时,是位于superview 上面的,同一个view中的subview是按照嵌入顺序显示的,越晚加入的subview显示在越上层 ,可以通过tag值从父视图中找到对应的视图。 -(UIView *)viewWithTag:(NSInteger) aTag;
frame属性是边框矩形,用于指定视图相对于其父视图坐标系统的位置 和大小(相对于父视图),bounds属性是边界矩形,负责定义视图相对于本地坐标系统的位置和 大小(相对于本身),center属性是边框矩形的中心点。
一些有用的Core Graphic数据结构 CGPoint、CGSize、CGRect以及对应的创建方法:CGPointMake(x, y) CGSizeMake(width, height) CGRectMake(x,y,width,height) CGRectZero
视图(属性)
- autoresizeSubviews 默认是YES,自动调整子视图大小
- autoresizingMask 父视图改变的时候自己如何跟着变化
- hidden 是否隐藏
- multipleTouchEnabled 是否支持多点触摸
- subviews 所有子视图(NSArray类型)
- superview 父视图
- userInteractionEnabled是否接收交互
- frame 相对父视图的位置和大小(CGRect)
- bounds 相对自己的位置和大小(CGRect)
- center 相对父视图的中心点(CGPoint)
- transform 变换属性(CGAffineTransform)
- window 当前view所在的window
- backgroundColor 背景色(UIColor)
- alpha 透明度(CGFloat)
- tag 区分标识(NSInteger)
- layer 视图层(动画部分重点讲解)(CALayer)
视图(操作)
- 初始化一个视图-(id) initWithFrame:(CGRect)frame
- 添加视图:addSubview:
- 插入视图:
insertSubview:atIndex:
insertSubview:aboveSubview:
insertSubview:belowSubview: - 整理视图:
bringSubviewToFront: sendSubviewToBack:
exchangeSubviewAtIndex:withSubviewAtIndex: - 移除视图:removeFromSuperview
UIViewController(视图控制器)
- 视图控制器即MVC中的Controller,视图控制器中封装中欧诺个封装了一个UIView,并且管理某个页面区域的所有视图;视图控制器是模型和视图之间的媒介,模型和视图通过视图控制器来交互
- 多种类的控制器:UIViewController、UINavigationController、 UITabBarController
- 视图控制器提供了多种的界面响应方法,及界面生命周期方法,如监控界面旋转、界面加载等
- UIViewController不能直接被使用,创建一个自定义控制器需要子泪花UIViewController。
- UIWindow默认需要一个控制器作为整个窗口的根控制器,使用rootViewController来添加。
- 控制器的
- (void)viewDidLoad
;方法会在控制器自身视图(self.view)及其它配置初始化完成后调用,作为控制器的入口方法,可以在其中添加自定义视图控件的初始化方法或初始化数据;
UIViewController(方法)
- view 视图控制器的根视图
- title 视图控制器的标题
- interfaceOrientation 朝向(只读属性)
- initWithNibName:bundle: 指定初始化方法
- loadView 加载视图的方法,只调用一次
- viewDidLoad 视图加载之后被调用,只调用一次
- viewWillAppear: 视图将要出现的时候调用
- viewDidAppear: 视图出现的时候调用
- viewWillDisappear: 视图将要消失的时候调用
- viewDidDisappear: 视图消失的时候调用
- didReceiveMemoryWarning 接受到内存警告的时候调用
- 视图控制器间基本的页面切换方法:
模态控制器切换:
- (void)presentViewController:(UIViewController *)
viewControllerToPresent animated:(BOOL)flag
completion:(void (^)(void))completion;
- (void)dismissViewControllerAnimated:(BOOL)flag
completion:(void (^)(void))completion;