MVC 是一种设计模式
好处:让视图(view)可以复用
应用:
1. 视图层(view) 只写视图的布局
2. 数据模型层(model) 只写数据的结构(只写NS开头的)
3. 控制器(controller) 负责逻辑部分(例如从model取出数据 然后 去更改视图的显示)
MVC 把工程中的代码 模块化 (降低耦合度)尽量让视图部分的代码 可以复用
一般一个视图控制器 控制一个页面
1.首先创建一个继承于UIViewController的类RootViewController.h
显示控制器自带的View
给Window设置一个根视图控制器
初始化控制器
RootViewController *rootVC = [[RootViewController alloc] init];
设置根视图控制器
self.window.rootViewController = rootVC;
释放
[rootVC release];
2.在RootViewController.m中引入自定义视图
#import “LoginView.h”
每一个视图控制器 都自带一个 view
并且这个 view 跟屏幕一样大
这个方法 是加载视图的
并且 加载的 自己自带的那个View
– (void)loadView
{
调用父类的方法 去加载自身View视图
[super loadView];
用上午的loginview 替换 控制器自带的view
LoginView *loginView = [[LoginView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
帮系统给self.view 赋值
self.view = loginView;
释放
[loginView release];
}
视图已经加载完成
– (void)viewDidLoad {
[super viewDidLoad];
更改一下自身view的颜色
self.view.backgroundColor = [UIColor redColor];
控制器中写逻辑部分
取出控制器自身的View
LoginView *loginView = (LoginView *)self.view ;
}
屏幕旋转
屏幕横屏时 横屏布局
屏幕竖屏时 视屏布局
1.允许屏幕旋转
2.要指定屏幕旋转的方向
3.找到旋转触发的方法
4.判断屏幕方向 改变布局
5.测试一下
1.允许屏幕旋转
- (BOOL)shouldAutorotate
{
return YES;
}
2.要指定屏幕旋转的方向
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskAll;
}
3.找到旋转触发的方法
-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id< UIViewControllerTransitionCoordinator >)coordinator
{
NSLog(@"%@",NSStringFromCGSize(size));
}
4.重新布局子视图
frame 发生变化的时候会触发layoutSubviews
在#import “LoginView.m”里
- (void)layoutSubviews
{
因为不知道父类这个方法 做了啥
所以需要再重写的 先调用一下父类的方法
然后 再写咱们自己的
[super layoutSubviews];
frame发生变化 相当于 横屏了
这时 咱们需要重新布局视图
判断竖屏 还是横屏
1.把应用程序取出来
2.判断一下当前应用程序 屏幕的朝向
取出应用程序 单例方法的命名规范share什么
UIApplication *app = [UIApplication sharedApplication];
判断屏幕方向
if (app.statusBarOrientation == UIInterfaceOrientationPortrait || app.statusBarOrientation == UIInterfaceOrientationPortraitUpsideDown) {
NSLog(@"竖着");
self.passwordLTView.frame = CGRectMake(self.userNameLTView.frame.origin.x,self.userNameLTView.frame.origin.y + self.userNameLTView.frame.size.height + 20,self.userNameLTView.frame.size.width, self.userNameLTView.frame.size.height);
}else{
NSLog(@"横着");
self.passwordLTView.frame = CGRectMake(self.userNameLTView.frame.origin.x + self.userNameLTView.frame.size.width + 20,self.userNameLTView.frame.origin.y,self.userNameLTView.frame.size.width, self.userNameLTView.frame.size.height);
}
}
接到内存警告出发的方法
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
NSLog(@"内存警告了");
// 内存警告了 要干点什么
// 释放已经显示过的视图 并且 不是当前显示的视图
// 如果这个视图 正在被显示 那么这个view视图的window属性不是空的
if ([self isViewLoaded] == YES && self.view.window == nil) {
// 把当前视图释放
self.view = nil;
}
}
5.测试一下