7.MVC设计模式

1 篇文章 0 订阅
0 篇文章 0 订阅

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.测试一下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值