[TwistedFate]MVC视图控制器

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;
}
  1. 指定屏幕旋转的方向
- (NSUInteger)supportedInterfaceOrientations{
    // 制定屏幕旋转方向
    return UIInterfaceOrientationMaskAll;
}
  1. 找到旋转触发的方法
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator{
    // 打印屏幕大小
    NSLog(@"%@",NSStringFromCGSize(size));
}
  1. 判断屏幕方向 更改布局
// 重新布局子视图
// 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);
    }
}
  1. 测试一下
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值