MVC
基本介紹
- UIViewController是MVC設計模式的核⼼。
- MVC是⼀個框架級的設計模式。
- M是Model,主要⽤於建⽴數據模型(即數據的結構)
- V是View,我們能看到的所有控件都是view,view主要的功能是展⽰數據。
- C是控制器,主要是控制M和V的通信
一種業務邏輯、數據、界面顯示分離的方法組織代碼,將業務邏輯聚集到一個部件裏面,在改進和個性化定製界面及用戶交互的同時,不需要重新編寫業務邏輯
優點
讓視圖(View)可以複用
應用
首先 視圖層
1. 視圖層(view) 只寫視圖的佈局
2. 數據模型層(model) 只寫數據的結構(以NS開頭)
3. 控制器(controller)負責邏輯部分(例如從model裏取數據 然後去更改視圖顯示)
MVC 把工程中的代碼模塊化(降低耦合度) 儘量然視圖部分的代碼可以複用
一般一個視圖控制一個頁面
視圖控制器
每一個視圖控制器 都自帶一個view
這個view和屏幕一樣大
loadView方法
每一個視圖控制器 都自帶一個View
並且這個View跟屏幕一樣大
- (void)loadView{
// 這個方法是加載視圖的 並且加載的是自身的View
// 調用父類的方法 去加載自身的View
// [super loadView];
// 用之前的LoginView替換 控制器自帶的View
LoginView *logview = [[LoginView alloc] initWithFrame:[UIScreen mainScreen].bounds];
logview.tag = 1000;
// 幫系統給self.view賦值
self.view = logview;
[logview release];
}
viewDidLoad
視圖已經加載完成
1. (void)viewDidLoad{
[super viewDidLoad];
// 控制器中寫邏輯部分
// 更改一下自身的顏色
self.view.backgroundColor = [UIColor grayColor];
LoginView *loginView = (LoginView *)self.view ;
[loginView.loginButton addTarget:self action:@selector(button:) forControlEvents:(UIControlEventTouchUpInside)];
}
didReceiveMemoryWarning
2. (void)didReceiveMemoryWarning{
[super didReceiveMemoryWarning];
NSL(@"內存警告");
// 內存警告 做什麼
// 釋放已經顯示過的視圖 並且不是當前顯示的
// 如果這個視圖正在被顯示 那麼這個視圖的window屬性就不爲空
if([self isViewLoad] == YES && self.view.window == nil){
// 把當前視圖釋放
self.view = nil;
}
}
檢測屏幕旋轉
屏幕旋轉
- 屏幕橫屏時 改變原來的佈局
- 屏幕豎屏時 屏幕豎屏時 變回原來的佈局
1. 允許屏幕旋轉
- (BOOL)shouldAutorotate{
return YES;
}
- 指定屏幕旋轉的方向
- (NSUInteger)supportedInterfaceOrientations{
// 制定屏幕旋轉方向
return UIInterfaceOrientationMaskAll;
}
- 找到旋轉觸發的方法
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator{
// 打印屏幕大小
NSLog(@"%@",NSStringFromCGSize(size));
}
- 判斷屏幕方向 更改佈局
// 重新佈局子視圖
// frame發生變化的時候會觸發layoutSubViews方法
- (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 + kRowHeight, 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 + 10, self.userNameLTView.frame.origin.y , self.userNameLTView.frame.size.width, self.userNameLTView.frame.size.height);
}
}
- 測試一下