UIView,UIViewController简单介绍,类的常用方法说明
2016-11-16 00:00
465 查看
UIView
UIView有下面这些基础概念:
• UIViewController的view属性拥有一个UIView。
• UIView中可以包含多个UIView(subviews)。
• UIView可以通过superview属性访问父UIView。
• 如果是UIWindow的子元素,则可以通过Window属性访问UIWindow。
• UIView中常用的结构体:
• CGPoint point = CGPointMake(x, y); //坐标
CGSize size = CGSizeMake(width, height); //大小
CGRect rect = CGRectMake(x, y, width, height); //位置和大小
UIView的常用属性:
@property(nonatomic,readonly)UIView *superview;
获得自己的父控件对象
@property(nonatomic,readonly,copy) NSArray *subviews;
获得自己的所有子控件对象
@property(nonatomic) NSInteger tag;
控件的ID(标识),父控件可以通过tag来找到对应的子控件
@property(nonatomic) CGAffineTransform transform;
控件的形变属性(可以设置旋转角度、比例缩放、平移等属性)
@property(nonatomic) CGRect frame;
控件所在矩形框在父控件中的位置和尺寸(以父控件的左上角为坐标原点)
可以定义控件的位置(origin)和大小(size)
@property(nonatomic) CGRect bounds;
控件所在矩形框的位置和尺寸(以自己左上角为坐标原点,所以bounds的x、y一般为0)
可以定义控件的大小(size)
@property(nonatomic) CGPoint center;
控件中点的位置(以父控件的左上角为坐标原点)
可以定义控件的位置(center)
• · userInteractionEnabled — 是否相应用户交互事件
•· 通过transform属性来对视图进行缩放、旋转和平移
一个控件可以有多个子控件,但只有一个父控件
常见方法:
- (void)addSubview: (UIView *)view;
添加子控件
- (void)removeFromSuperview;
从父控件中移除
- (UIView *) viewWithTag:(NSInteger)tag;
根据一个tag标识找出对应的控件(一般是子控件)
// 把self.btnIcon这个控件显示到最上层
[self.view bringSubviewToFront:self.btnIcon];
// 禁止pickView这个控件与用户交互
self.pickView.userInteractionEnabled =NO;
// 动画的常用方法(UIView类的类方法)
+ (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOLfinished))completion NS_AVAILABLE_IOS(4_0);
+ (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completionNS_AVAILABLE_IOS(4_0);// delay = 0.0, options = 0
+ (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations NS_AVAILABLE_IOS(4_0);
//例子
// 开启一个动画,这个动画要执行1.5秒钟
[UIView animateWithDuration:1.5 animations:^{
// 动画代码: 将透明度变成0.6
lblMsg.alpha = 0.6;
}completion:^(BOOL finished) {
//当上面的动画执行完毕以后执行这个代码
if (finished) {
//这个代码的含义是,隔一段时间后再启动另外一个动画
//这个动画的执行时间是1.5秒钟,但是这个动画会在1.0秒之后再开始执行
// UIViewAnimationOptionCurveLinear表示是匀速执行动画
[UIViewanimateWithDuration:1.5delay:1.0 options:UIViewAnimationOptionCurveLinear animations:^{
//这个动画的代码
lblMsg.alpha = 0
}completion:^(BOOL finished) {
if (finished) {
// 当Label的透明度变成0以后,再把这个Label从view中移除
[lblMsgremoveFromSuperview];
}
}];
}
}];
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ViewController生命周期
alloc -> initWithNibName -> loadView(加载视图) ->调用viewDidLoad方法->调用viewWillAppear方法 ->调用viewDidAppear方法 ->调用viewWillDisappear方法 ->调用viewDidDisappear方法 -> dealloc
1)- (void)viewDidLoad;
一个APP在载入时会先通过调用loadView方法或者载入IB中创建的初始界面的方法,将视图载入到内存中。然后会调用viewDidLoad方法来进行进一步的设置。通常,我们对于各种初始数据的载入,初始设定等很多内容,都会在这个方法中实现,所以这个方法是一个很常用,很重要的方法。
但是要注意,这个方法只会在APP刚开始加载的时候调用一次,以后都不会再调用它了,所以只能用来做初始设置。
2) - (void)viewDidUnload;
在内存足够的情况下,软件的视图通常会一直保存在内存中,但是如果内存不够,一些没有正在显示的viewcontroller就会收到内存不够的警告,然后就会释放自己拥有的视图,以达到释放内存的目的。但是系统只会释放内存,并不会释放对象的所有权,所以通常我们需要在这里将不需要在内存中保留的对象释放所有权,也就是将其指针置为nil。
这个方法通常并不会在视图变换的时候被调用,而只会在系统退出或者收到内存警告的时候才会被调用。但是由于我们需要保证在收到内存警告的时候能够对其作出反应,所以这个方法通常我们都需要去实现。
另外,即使在设备上按了Home键之后,系统也不一定会调用这个方法,因为IOS4之后,系统允许将APP在后台挂起,并将其继续滞留在内存中,因此,viewcontroller并不会调用这个方法来清除内存。
3)- (void)viewWillAppear:(BOOL)animated;
系统在载入所有数据后,将会在屏幕上显示视图,这时会先调用这个方法。通常我们会利用这个方法,对即将显示的视图做进一步的设置。例如,我们可以利用这个方法来设置设备不同方向时该如何显示。
另外一方面,当APP有多个视图时,在视图间切换时,并不会再次载入viewDidLoad方法,所以如果在调入视图时,需要对数据做更新,就只能在这个方法内实现了。所以这个方法也非常常用。
4) - (void)viewDidAppear:(BOOL)animated;
有时候,由于一些特殊的原因,我们不能在viewWillApper方法里,对视图进行更新。那么可以重写这个方法,在这里对正在显示的视图进行进一步的设置。
5) - (void)viewWillDisappear:(BOOL)animated;
在视图变换时,当前视图在即将被移除、或者被覆盖时,会调用这个方法进行一些善后的处理和设置。
由于在IOS4之后,系统允许将APP在后台挂起,所以在按了Home键之后,系统并不会调用这个方法,因为就这个APP本身而言,APP显示的view,仍是挂起时候的view,所以并不会调用这个方法。
6) - (void)viewDidDisappear:(BOOL)animated;
我们可以重写这个方法,对已经消失,或者被覆盖,或者已经隐藏了的视图做一些其他操作。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
补充:
1.+(void)load{
加载类到内存,程序刚启动的时候调用,调用在main函数之前
}
2.+(void)initialize{
初始化类,类第一次使用的时候调用一次
}
3.-(void)loadView{
控制器的视图架构,设置控制器的根view,重写该方法后,以该方法为主,storyboard文件将不再起作用
}
4.-(void)viewDidLoad{
视图加载完成时只调用一次,在视图切换期间不会再次调用,除非显示调用self.view
}
5.-(void)viewWillAppear:(BOOL)animated{
视图将要出现
}
6.-(id)initWithCoder:(NSCoder *)aDecoder{
解档方法,使用xib/storyboard等文件时都会调用这个方法
}
7.-(void)awakeFromNib{
加载xib完成时调用,在6之后调用。使用xib时一般我们可以在6&7两个方法里动态添加组件
}
8.- (instancetype)initWithFrame:(CGRect)frame
{
使用代码创建控件时,一般我们在该方法里动态添加组件&设置自身的一些属性。外界调用init方法,系统内部也会自动调用这个方法
}
9.-(void)layoutSubviews{
一般我们在这个方法里计算frame,这个方法里是控件最后一次布局子控件,这里计算最准确
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ (id)allocWithZone:(struct _NSZone *)zone
所有对象的内存分配,最终都会调用到的方法
单例
dispatch_once
// dispatch_once能够保证块代码中的操作只被执行一次,是线程安全的
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_instance = [super allocWithZone:zone];
});
UIView有下面这些基础概念:
• UIViewController的view属性拥有一个UIView。
• UIView中可以包含多个UIView(subviews)。
• UIView可以通过superview属性访问父UIView。
• 如果是UIWindow的子元素,则可以通过Window属性访问UIWindow。
• UIView中常用的结构体:
• CGPoint point = CGPointMake(x, y); //坐标
CGSize size = CGSizeMake(width, height); //大小
CGRect rect = CGRectMake(x, y, width, height); //位置和大小
UIView的常用属性:
@property(nonatomic,readonly)UIView *superview;
获得自己的父控件对象
@property(nonatomic,readonly,copy) NSArray *subviews;
获得自己的所有子控件对象
@property(nonatomic) NSInteger tag;
控件的ID(标识),父控件可以通过tag来找到对应的子控件
@property(nonatomic) CGAffineTransform transform;
控件的形变属性(可以设置旋转角度、比例缩放、平移等属性)
@property(nonatomic) CGRect frame;
控件所在矩形框在父控件中的位置和尺寸(以父控件的左上角为坐标原点)
可以定义控件的位置(origin)和大小(size)
@property(nonatomic) CGRect bounds;
控件所在矩形框的位置和尺寸(以自己左上角为坐标原点,所以bounds的x、y一般为0)
可以定义控件的大小(size)
@property(nonatomic) CGPoint center;
控件中点的位置(以父控件的左上角为坐标原点)
可以定义控件的位置(center)
• · userInteractionEnabled — 是否相应用户交互事件
•· 通过transform属性来对视图进行缩放、旋转和平移
一个控件可以有多个子控件,但只有一个父控件
常见方法:
- (void)addSubview: (UIView *)view;
添加子控件
- (void)removeFromSuperview;
从父控件中移除
- (UIView *) viewWithTag:(NSInteger)tag;
根据一个tag标识找出对应的控件(一般是子控件)
// 把self.btnIcon这个控件显示到最上层
[self.view bringSubviewToFront:self.btnIcon];
// 禁止pickView这个控件与用户交互
self.pickView.userInteractionEnabled =NO;
// 动画的常用方法(UIView类的类方法)
+ (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOLfinished))completion NS_AVAILABLE_IOS(4_0);
+ (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completionNS_AVAILABLE_IOS(4_0);// delay = 0.0, options = 0
+ (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations NS_AVAILABLE_IOS(4_0);
//例子
// 开启一个动画,这个动画要执行1.5秒钟
[UIView animateWithDuration:1.5 animations:^{
// 动画代码: 将透明度变成0.6
lblMsg.alpha = 0.6;
}completion:^(BOOL finished) {
//当上面的动画执行完毕以后执行这个代码
if (finished) {
//这个代码的含义是,隔一段时间后再启动另外一个动画
//这个动画的执行时间是1.5秒钟,但是这个动画会在1.0秒之后再开始执行
// UIViewAnimationOptionCurveLinear表示是匀速执行动画
[UIViewanimateWithDuration:1.5delay:1.0 options:UIViewAnimationOptionCurveLinear animations:^{
//这个动画的代码
lblMsg.alpha = 0
}completion:^(BOOL finished) {
if (finished) {
// 当Label的透明度变成0以后,再把这个Label从view中移除
[lblMsgremoveFromSuperview];
}
}];
}
}];
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ViewController生命周期
alloc -> initWithNibName -> loadView(加载视图) ->调用viewDidLoad方法->调用viewWillAppear方法 ->调用viewDidAppear方法 ->调用viewWillDisappear方法 ->调用viewDidDisappear方法 -> dealloc
1)- (void)viewDidLoad;
一个APP在载入时会先通过调用loadView方法或者载入IB中创建的初始界面的方法,将视图载入到内存中。然后会调用viewDidLoad方法来进行进一步的设置。通常,我们对于各种初始数据的载入,初始设定等很多内容,都会在这个方法中实现,所以这个方法是一个很常用,很重要的方法。
但是要注意,这个方法只会在APP刚开始加载的时候调用一次,以后都不会再调用它了,所以只能用来做初始设置。
2) - (void)viewDidUnload;
在内存足够的情况下,软件的视图通常会一直保存在内存中,但是如果内存不够,一些没有正在显示的viewcontroller就会收到内存不够的警告,然后就会释放自己拥有的视图,以达到释放内存的目的。但是系统只会释放内存,并不会释放对象的所有权,所以通常我们需要在这里将不需要在内存中保留的对象释放所有权,也就是将其指针置为nil。
这个方法通常并不会在视图变换的时候被调用,而只会在系统退出或者收到内存警告的时候才会被调用。但是由于我们需要保证在收到内存警告的时候能够对其作出反应,所以这个方法通常我们都需要去实现。
另外,即使在设备上按了Home键之后,系统也不一定会调用这个方法,因为IOS4之后,系统允许将APP在后台挂起,并将其继续滞留在内存中,因此,viewcontroller并不会调用这个方法来清除内存。
3)- (void)viewWillAppear:(BOOL)animated;
系统在载入所有数据后,将会在屏幕上显示视图,这时会先调用这个方法。通常我们会利用这个方法,对即将显示的视图做进一步的设置。例如,我们可以利用这个方法来设置设备不同方向时该如何显示。
另外一方面,当APP有多个视图时,在视图间切换时,并不会再次载入viewDidLoad方法,所以如果在调入视图时,需要对数据做更新,就只能在这个方法内实现了。所以这个方法也非常常用。
4) - (void)viewDidAppear:(BOOL)animated;
有时候,由于一些特殊的原因,我们不能在viewWillApper方法里,对视图进行更新。那么可以重写这个方法,在这里对正在显示的视图进行进一步的设置。
5) - (void)viewWillDisappear:(BOOL)animated;
在视图变换时,当前视图在即将被移除、或者被覆盖时,会调用这个方法进行一些善后的处理和设置。
由于在IOS4之后,系统允许将APP在后台挂起,所以在按了Home键之后,系统并不会调用这个方法,因为就这个APP本身而言,APP显示的view,仍是挂起时候的view,所以并不会调用这个方法。
6) - (void)viewDidDisappear:(BOOL)animated;
我们可以重写这个方法,对已经消失,或者被覆盖,或者已经隐藏了的视图做一些其他操作。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
补充:
1.+(void)load{
加载类到内存,程序刚启动的时候调用,调用在main函数之前
}
2.+(void)initialize{
初始化类,类第一次使用的时候调用一次
}
3.-(void)loadView{
控制器的视图架构,设置控制器的根view,重写该方法后,以该方法为主,storyboard文件将不再起作用
}
4.-(void)viewDidLoad{
视图加载完成时只调用一次,在视图切换期间不会再次调用,除非显示调用self.view
}
5.-(void)viewWillAppear:(BOOL)animated{
视图将要出现
}
6.-(id)initWithCoder:(NSCoder *)aDecoder{
解档方法,使用xib/storyboard等文件时都会调用这个方法
}
7.-(void)awakeFromNib{
加载xib完成时调用,在6之后调用。使用xib时一般我们可以在6&7两个方法里动态添加组件
}
8.- (instancetype)initWithFrame:(CGRect)frame
{
使用代码创建控件时,一般我们在该方法里动态添加组件&设置自身的一些属性。外界调用init方法,系统内部也会自动调用这个方法
}
9.-(void)layoutSubviews{
一般我们在这个方法里计算frame,这个方法里是控件最后一次布局子控件,这里计算最准确
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ (id)allocWithZone:(struct _NSZone *)zone
所有对象的内存分配,最终都会调用到的方法
单例
dispatch_once
// dispatch_once能够保证块代码中的操作只被执行一次,是线程安全的
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_instance = [super allocWithZone:zone];
});
相关文章推荐
- Executors常用的创建ExecutorService的方法的简单说明
- 简单介绍一下asmack中常用到的方法属性
- 【书籍简评】《Python计算机视觉编程》还算可以的入门书,简单介绍了CV中的常用方法,但由于代码版本过老,有一些用3.6跑不通。
- 简单介绍一下asmack中常用到的方法属性
- NSAttributedString富文本简单介绍和常用方法浅析
- NSString的简单介绍及常用方法总结
- Executors常用的创建ExecutorService的方法的简单说明
- 简单说明dom4j的使用流程和常用方法
- 四大常见XML类型的生成和解析方法详解(介绍+优缺点对比+示例+说明)==> 简单实用
- 简单介绍一下asmack中常用到的方法属性
- Sqlite3 数据库介绍及常用方法的简单封装
- Sqlite3 数据库介绍及常用方法的简单封装
- NSAttributedString富文本简单介绍和常用方法浅析
- 简单介绍一些php操作redis常用方法代码例子
- java Thread类常用方法简单说明
- 简单介绍一下asmack中常用到的方法属性
- Vue简单介绍以及常用方法总结
- UIView控件的一些常用方法和简单动画设置
- 简单介绍一下asmack中常用到的方法属性
- jquery中常用的方法简单介绍