UI 自定义视图 ,视图管理器
- 自定义视图:系统标准UI之外,自己组合而出的新的视图
- iOS 提供了很多UI组件 ,借助它们,我们可以做各种程序
- 尽管如此,实际开发中,我们还需要自定义视图.积累自己的代码库,方便开发.自己封装的视图,能像系统UI控件一样,用于比别的项目中,能大大降低开发成本,提高开发效率.
- 根据需求的不同,自定义视图继承的类也有所不同,一般自定义的视图会继承于UIView ,以下是自定义视图的要点:
- 1>创建一个UIView子类
- 2>在类的初始化方法中添加子类图
- 3>类的.h文件提供一些接口(方法 ) ,便于外界操作子视图
- 假设我们使用LTView 类代表label - textfield 视图
- 我们创建一个LTView 类继承与UIView
@interface LTView : UIView
@property(nonatomic,retain)UITextField *textField;
- 我们将LTView 作为一个容器 ,在LTView 的初始化方法中创建并添加label 和textField
@implementation LTView
{
//frame 要重写
self = [super initWithFrame:frame];
if( self )
return self;
}
//自己写的方法
-(void)addAllViews
{
_label = [[UILabel alloc] initWithFrame:CGRectMake(50, 50, 60, 30)];
_label.backgroundColor = [UIColor blueColor];
[self addSubview:_label];
// _label.text = @"QQ";
// _label.textAlignment =NSTextAlignmentCenter;
_textField = [[UITextField alloc] initWithFrame:CGRectMake(CGRectGetMaxX(_label.frame)+20, CGRectGetMinY(_label.frame), CGRectGetWidth(_label.frame)+100, CGRectGetHeight(_label.frame))];
_textField.backgroundColor = [UIColor greenColor];
[self addSubview:_textField];
}
@end
- 此时的LTView 就变成了一个具有label 和textField 的视图了
- 把label 和 Textfield 封装到LTView 中 ,在一定程度上简化了我们代码
- 往往我们需要对LTView 中的label 或者textfield进行一定的控制,比如:设置label的text ,获取Textfield 的 text ,给Textfield 指定delegate ,设置textColor ...
- 为了方便外界操作label和Textfield ,因此我们要为外界提供一些方法
- 自定义LTView 使用了一种设计模式:复合设计模式
- 复合设计模式: A类中,使用B类(或者更多类) 作为自己的成员(实例变量)
- iOS中复合是特别常见的设计模式,ios新控件往往都是自己已有控件组合而成的
- UIViewController : 视图控制器
- 控制视图显示,响应事件
- 分担APPDelegate 的工作
- 实现模块独立,提高复用性
- 控制视图大小变换,布局视图,响应事件
- 检测以及处理内存警告
- 检测以及处理屏幕旋转
- 检测视图的切换
- UIViewController : 是MVC 设计模式的核心
- MVC是一个框架级 的设计模式
- M 是Model ,主要用于建立数据模型( 即数据的结构 )
- V 是View ,我们能看到的所有控件都是view ,view主要的功能是展示数据 .
- C是控制器 ,主要是控制M和V的通信
- 是用MVC 系统的可维护型 ,可扩展性增强
- 定以UIViewController 的子类 ———> RCViewController
- 创建视图控制器对象 ,作为window的根视图控制器
- 在viewDidload 中 使用默认创建好的视图对象view
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.backgroundColor = [UIColor whiteColor];
[_window makeKeyAndVisible];
//2>创建视图控制器
RCViewController *rcc = [[RCViewController alloc] init];
//首先我们window自带了一个视图控制器也就是根视图控制器
//3>将我们创建的rcc 代替我们的跟视图器 (rootViewController)
- UIViewController 自带一个空的view,与需求不符合
- 视图控制器只负责控制视图显示,响应事件
- 自定义视图类继承UIView ,在初始化方法中添加子视图控件
- 重写controller 的 loadView 方法,创建自定义视图对象,并指定为controller 的view
- 将子视图控件对象设置为自定义视图类的属性, 在viewDidLoad 方法中进行设置:添加action ,设置delegate...
- 在controller 中添加按钮点击事件实现和代理方法的实现
- 1> supportedInterfaceOrientations —> 设置设备支持旋转的方向
- 2>willRotate( 旋转 ) ToInterfanceOrientations : duration(时间 ) : —> 暂停音乐 ,关闭视图交互....
- 3> willAnimate( 使…有活气 ) ROtation ToInterfanceOrientation : duration : ——> 添加自定义动画....
- 4>did RotateFromInterfaceOrientation : ——> 播放音乐,打开视图交互...
- 注意视图控制器会自动调整view 的大小以适应屏幕旋转 ,bounds 被修改,触发view 的layoutSubviews方法
- view重写layoutSubviews方法 ,根据设备方向,重新布局
- [UIApplication share( 分配 )Application ] .status( 状态 )BarOrientation 提供设备当前方向
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
//可以打印看 ,可以吧不要的视图放在这里面就释放掉了
NSLog(@"%s,%d",__FUNCTION__,__LINE__);
// Dispose of any resources that can be recreated.
- self . view 显示 : viewWillAppear : 和 viewDidAppear :
-(void)viewWillAppear:(BOOL)animated
{
//要用父类的调用
[super viewWillAppear:animated];
NSLog(@"%s,%d",__FUNCTION__,__LINE__);
}
//视图已将出现
-(void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
NSLog(@"%s,%d",__FUNCTION__,__LINE__);
- self . view 消失 : viewWillDisapper : 和 viewDIdDisapper :
-(void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
NSLog(@"%s,%d",__FUNCTION__,__LINE__);
}
//视图已经消失
-(void)viewDidDisappear:(BOOL)animated
{
[super viewDidDisappear:animated];
NSLog(@"%s,%d",__FUNCTION__,__LINE__);
- 当self .view 添加到父视图上时, 执行appear 方法 ,当self.view 从父视图上移除是,会执行 disappear 方法
UI 自定义视图 ,视图管理器的更多相关文章
- 【详细】Android入门到放弃篇-YES OR NO-》各种UI组件,布局管理器,单元Activity
问:达叔,你放弃了吗? 答:不,放弃是不可能的,丢了Android,你会心疼吗?如果别人把你丢掉,你是痛苦呢?还是痛苦呢?~ 引导语 有人说,爱上一个人是痛苦的,有人说,喜欢一个人是幸福的. 人与人之 ...
- ZendFramework-2.4 源代码 - 关于MVC - View层 - 视图渲染器、视图插件管理器
<?php // 1. 视图渲染器 class PhpRenderer implements Renderer, TreeRendererInterface { /** * 插件管理器 */ p ...
- 第1组UI组件:布局管理器
1 布局管理的来源 为了让UI在不同的手机屏幕上都能运行良好----不同手机屏幕的分辨率/尺寸并不完全相同,如果让程序手动控制每个组件的大小.位置,会给编程带来巨大的麻烦.为了解决这个问题.andro ...
- Android UI组件:布局管理器
为了更好的管理Android应用的用户界面中的组件,Android提供了布局管理器.通过使用布局管理器,Android应用的图形用户界面具有良好的平台无关性.通常,推荐使用布局管理器来管理组件的分布. ...
- 自定义缓存管理器 或者 Spring -- cache
Spring Cache 缓存是实际工作中非常常用的一种提高性能的方法, 我们会在许多场景下来使用缓存. 本文通过一个简单的例子进行展开,通过对比我们原来的自定义缓存和 spring 的基于注释的 c ...
- 游戏开发之UI管理器(跨引擎)
使用UI管理器的目的 使用单场景与zindex结合的方式管理UI. 能够隐藏底层UI达到优化效果. 很好的组织和管理UI. 跨引擎使用. 管理器分类 根据以往经验我开发了三种类型的管理器,队列管理器, ...
- Python深入02 上下文管理器
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 上下文管理器(context manager)是Python2.5开始支持的一种语 ...
- python 上下文管理器
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 上下文管理器(context manager)是Python2.5开始支持的一种语 ...
- 【Python学习笔记】with语句与上下文管理器
with语句 上下文管理器 contextlib模块 参考引用 with语句 with语句时在Python2.6中出现的新语句.在Python2.6以前,要正确的处理涉及到异常的资源管理时,需要使用t ...
- 流畅python学习笔记:第十五章:上下文管理器
在开始本章之前,我们首先来谈谈try-excep..final模块.在Python中,进行异常保护的最多就是用try..except..final.首先来看下下面的代码.进行一个简单的除法运算.为了防 ...
随机推荐
- 让Flash支持Stage3D
如要需要支持Stage3D,采用GPU来渲染,需要设置wmode="direct",在FB中,对于web和air设置方法不同: 1.web: 需要在web的html模板中,添加参数 ...
- jquery属性的相关js实现方法
有些公司手机网站开发不用第三方的jquery或者zeptio,直接用原生的javascript.原生javascript功能是蛮强大的,只不过部分属性不支持IE8以下浏览器.下面对jquery相关方法 ...
- JDK源码分析-Integer
Integer是平时开发中最常用的类之一,但是如果没有研究过源码很多特性和坑可能就不知道,下面深入源码来分析一下Integer的设计和实现. Integer: 继承结构: -java.lang.Obj ...
- .NET Core 最小化发布
.NET Core 应用最小化独立部署发布,.NET Core 默认应用独立发布,大概占用50m左右的空间,不同的系统大小有所区别. .NET Core 的发布之前我也有所介绍,.NET Core 跨 ...
- iOS深入学习之Weak关键字介绍
iOS深入学习之Weak关键字介绍 前言 从大二的开始接触OC就用到了weak属性修饰词,但是当时只是知道如何去用这个关键字:防止循环引用.根本没有深入地去了解它. 在刚来北京的时候面试过程中也常常考 ...
- [笔记]FTRL与Online Optimization
1. 背景介绍 最优化求解问题可能是我们在工作中遇到的最多的一类问题了:从已有的数据中提炼出最适合的模型参数,从而对未知的数据进行预测.当我们面对高维高数据量的场景时,常见的批量处理的方式已经显得力不 ...
- Python开发项目:大型模拟战争游戏(外星人入侵)
外星人入侵 游戏概述: 现在准备用python开始搞一个大型游戏,模拟未来战争,地球人狙击外星人大战(其实就是小蜜蜂游戏2333),玩家控制一个飞船,用子弹歼灭屏幕上空的外星飞船:项目用到了Pygam ...
- Android开发10:传感器器及地图相关应用
前言 啦啦啦~各位小伙伴们好~经过这一学期的Android知识的学习,我们学到了很多和Android开发相关的知识,这一学期的学习也要告一段落了. 一起进入我们今天的相关内容~这次我们将一起学习使用 ...
- Mac上写C++
用惯Windows的同学可能刚开始用Mac的时候并不知道如何写C++,我刚开始在Mac上写C++的时候也遇到过这个困扰,Mac上并没有Windows上自己用习惯的Visual C++,下面我分享一下个 ...
- 对于block的理解,block的面试题
1.block跟swift中的闭包(closure)基本一样,都常用于值的回调,特别是在多线程的网络请求回调中,使用起来极为方便. 2.block的开头是"^",接着是由小括号所报 ...