UI基础视图----UIView总结
UIView是UIKit框架里面最基础的视图类,是UIResponder的子类,是UIApplication和UIViewController的兄弟类,是UIWindow,UILabel,UIImageView,UIScrollView,UIControl等的父类,是UIButton,UITextField的父父类(它们是UIControl的子类),是UITableView,UICollectionView的父父类(它们是UIScrollView的子类)。在UIKit框架中掌握各个视图之间的继承关系是很重要的,比如知道了UILabel的父类是UIView,那么UIView的很多属性和方法UILabel继承过去就可以直接用。同样的,UIView继承于UIResponder,了解UIResponder的属性和方法同样是有必要的,会在UIResponder的总结中写出来。
因为UIView是很多常用视图控件的父类,它的属性和方法可以被直接继承到子类。所以,了解UIView的常用属性和方法就显得尤为重要,这里做一个简单的总结,一些细节异同点注意点后续会继续完善。
根据官方文档,UIView根据不同的用途可以分为7大常用模块(当然不止这些),分别是基础配置,几何学配置,层级关系,渲染,动画,手势,约束。
0:准备工作
首先添加两个UIView的属性
@property (nonatomic, strong) UIView * view1;
@property (nonatomic, strong) UIView * view2;
1:基础配置
基础配置主要包括实例化,用户交互,tag值。
注意:
1:用户交互:UIView的用户交互是默认打开的,它的子类中UILabel和UIimageView的用户交互默认是关闭的(因为这两个偏重展示文字或者图片),所以其他继承于UIView的子类,用户交互默认是打开的,但是上面两个是关闭的,如果需要使用交互,需要把它们的用户交互打开(如在图片上添加手势)。
2:tag值:一般来说,我们自己创建的tag值要写的大一点并且有规律一些,因为小的tag值可能和系统定义的冲突,有规律方便使用。
/**
* 1:基础配置
*/
- (void)basisConfig
{
//1:常用的两种实例化方式
self.view1 = [[UIView alloc] init];
self.view2 = [[UIView alloc] initWithFrame:CGRectMake(, , , )];
//2:基础属性
self.view1.userInteractionEnabled = YES;//用户交互,默认是打开的
self.view2.userInteractionEnabled = NO;
//3:tag值
self.view1.tag = ;
self.view2.tag = ;
}
2:几何学配置
几何学主要包括frame,bounds,center,transform四种
注意:
1:frame,bounds,center的区别和关系:frame是相对于父视图来说的,包括坐标和尺寸。bounds是相对于本身来说的,坐标是(0,0),center就是视图的中心点坐标。
2:transform两种写法的区别:make那种写法是相对于初始视图的,就是不管后面做什么样的变换,这个变换都是相对于初始视图进行变换的,所以有可能出现后面的变换把前面的覆盖掉。另一种写法就是相对于上一种变换的,所以可以实现连续变换。
/**
* 2:几何学配置
*/
- (void)geometryConfig
{
//1:frame
self.view1.frame = CGRectMake(, , , );
//2:bounds
self.view1.bounds = CGRectMake(, , , );
self.view2.bounds = CGRectMake(, , , );
//3:center
self.view1.center = CGPointMake(self.view.center.x, self.view.center.y);
self.view2.center = self.view.center;//和上面效果相同
//4:transform
self.view1.transform = CGAffineTransformMakeRotation(0.1);//旋转
self.view2.transform = CGAffineTransformRotate(self.view2.transform, 0.7);//旋转
self.view1.transform = CGAffineTransformMakeTranslation(, );//平移
self.view2.transform = CGAffineTransformTranslate(self.view2.transform, -, );//平移
self.view1.transform = CGAffineTransformMakeScale(0.5, 0.5);//比例缩放
self.view2.transform = CGAffineTransformScale(self.view2.transform, 0.5, 0.5);//比例缩放
}
3:层级关系
层级关系主要包括视图之间各种层级关系以及对视图之间层级关系的操作。方法很灵活,几乎可以实现任何层视图的切换,添加,删除,插入,放到最上面,放到最下面,交换等。
/**
* 3:层级关系
*/
- (void)hierarchyConfig
{
//1:添加到父视图
[self.view addSubview:self.view1];//视图来的时候父视图把你带来
[self.view addSubview:self.view2];
//父视图管理子视图的思想,其实父视图上面应该有个子视图数组,来管理在它上面所有的子视图
UIView * view3 = [[UIView alloc] initWithFrame:CGRectMake(, , , )];
view3.backgroundColor = [UIColor orangeColor];
//2:三种插入方式
[self.view insertSubview:view3 aboveSubview:self.view1];
[self.view insertSubview:view3 belowSubview:self.view2];
[self.view insertSubview:view3 atIndex:];
//3:bring send
[self.view bringSubviewToFront:self.view1];
[self.view sendSubviewToBack:self.view2];//父视图来操作,把它放到兄弟视图的最下面
//4:交换
[self.view exchangeSubviewAtIndex: withSubviewAtIndex:];//按顺序交换视图
//5:移除
[view3 removeFromSuperview];//走的时候自己走,来的时候父视图把你带来
//6:两个属性
NSLog(@"----%@----%@",self.view.subviews, self.view1.superview); }
4:渲染
渲染主要是常用的背景颜色,切边界,透明度,显示隐藏
注意:
切边界:切边界是父视图做的事情,父视图来切子视图,这也体现了父视图管理子视图的核心思想。
隐藏属性:实际开发中,隐藏属性可以帮助我们通过捷径修改一些展示效果,很多时候不需要删除,隐藏就行了。
/**
* 4:渲染
*/
- (void)renderingConfig
{
//1:背景颜色
self.view1.backgroundColor = [UIColor orangeColor];
//2:切边界
UIView * view4 = [[UIView alloc] initWithFrame:CGRectMake(, , , )];
view4.backgroundColor = [UIColor blueColor];
[self.view1 addSubview:view4];
self.view1.clipsToBounds = YES;//父视图做的事情,让子视图切到自己的边界
//3:透明度
view4.alpha = 0.3;//View自带,不用Image
//4:显示隐藏
view4.hidden = YES;//视图的隐藏属性 }
5:动画
UIView中封装了一些动画属性,可以让我们在不实用Core Animation的情况下就能实现很多动画效果。实现方式也是多种多样,iOS7以后甚至封装了关键帧动画,可见,在开发中,如果对动画效果没有很高的要求,UIView自带的动画效果是足够用的。这里简单的实现一下用block方式实现的基础动画。
注意:
动画改变的是什么?是视图的属性,比如frame,backgroundColor,alpha等,而且动画效果一般都是类方法,直接用UIView调用,把需要改变的属性末状态写在block块中即可。
/**
* 5:动画
*/
- (void)animationBlockConfig
{
//第一种
[UIView animateWithDuration: animations:^{
self.view1.alpha = 0.1;
}];
//第二种
[UIView animateWithDuration: animations:^{
self.view2.alpha = 0.1;
} completion:^(BOOL finished) {
self.view2.alpha = 1.0;
}];
//第三种
[UIView animateWithDuration: delay: options:UIViewAnimationOptionBeginFromCurrentState animations:^{
self.view2.frame = CGRectMake(, , , ); } completion:nil]; }
6:手势
手势主要包括添加手势和移除手势。
/**
* 6:手势
*/
- (void)gestureRecognizersConfig
{
UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] init];
//添加手势
[self.view1 addGestureRecognizer:tap];
//移除手势
[self.view1 removeGestureRecognizer:tap]; }
7:约束
约束在开发中也是很重要的,添加约束的方式也有很多种,通过系统封装好的类,xib拖线,第三方库,VFL语言等等很多方式,这里就是View本身添加约束和删除约束两个基本方法
/**
* 7:约束
*/
- (void)constraintConfig
{
NSLayoutConstraint * constraint = [[NSLayoutConstraint alloc] init];
//添加约束
[self.view1 addConstraint:constraint];
//添加约束组
[self.view1 addConstraints:@[constraint]];
//删除约束
[self.view1 removeConstraint:constraint];
//删除约束组
[self.view1 removeConstraints:@[constraint]]; }
UI基础视图----UIView总结的更多相关文章
- UI基础视图----UIWebView总结
UIWebView是UIKit框架中继承于UIView的一个常用的基础视图,和UILabel,UIImageView是兄弟类,用于展示一个网页. UIWebView是一个可以设置代理的类,在加载的不同 ...
- IOS开发-UI基础-视图
//------------------------------UIWindow--------------------------// 1.UIWindow:是 UIView 的子类,用于管理.协调 ...
- iOS用心学 UI基础之UIView
一.引入UI 在实际开发中,基本的流程大致如下图所示: UI(User Interface)作为最基本的要点,也是非常重要的一部分,UI界面的美观直接决定着着用户的体验,苹果官方给开发中提供了非常强大 ...
- UI基础视图----UIImageView总结
UIImageView和UILabel一样,也是UIKit框架中非常常用的视图类.继承关系和UILabel完全一致(都是继承于UIView),功能也相似(用户交互都默认为关,主要用于展示),只不过UI ...
- UI基础视图----UIScrollView总结
UIScrollView是UIKit框架下的很重要的视图类,是UIView的子类.UILabel,UIImageView,UIWebView分别用于展示文字,图片,网页,UILabel通过属性text ...
- UI基础视图----UILabel总结
UILabel是UIKit框架中非常常用的视图类,是UIView的子类,是UIWindow,UIImageView等的兄弟类,因为继承自UIView,所以继承了UIView中的属性和方法,大部分都可以 ...
- UI基础:视图控制器.屏幕旋转.MVC 分类: iOS学习-UI 2015-07-02 22:21 62人阅读 评论(0) 收藏
UIViewController 视图控制器,继承自UIResponder,作用:管理视图并且响应事件 功能: 1.分担APPdelegate的工作 2.实现模块独立,能提高复用性 创建UIViewC ...
- UI基础UIWindow、UIView
UI基础UIWindow.UIView 在PC中,应用程序多是使用视窗的形式显示内容,手机应用也不例外,手机应用中要在屏幕上显示内容首先要创建一个窗口承载内容,iOS应用中使用UIWindow.UIV ...
- UI基础:UIView(window,frame,UIColor,CGPoint,alpha,CGRect等) 分类: iOS学习-UI 2015-06-30 20:01 119人阅读 评论(0) 收藏
UIView 视图类,视图都是UIView或者UIView子类 UIWindow 窗口类,用于展示视图,视图一定要添加window才能显示 注意:一般来说,一个应用只有一个window 创建一个UIW ...
随机推荐
- 【学习笔记】【oc】Block
块(block):类似于定义一个匿名的函数.至于其他什么用处我就不知道了 块的定义: ^[块返回值类型](形参类型1 形参1, 形参类型2 形参2,...) { //块执行体 } 跟函数语法格式的差别 ...
- 转:1.1 cdev_init cdev_alloc 使用说明
对 “从globalmem学习linux字符设备驱动” 的 cdev_init 和 cdev_alloc中一些不清楚的地方进行说明: cdev_init 和 cdev_alloc函数定义如下: ...
- Mssql显错和不显错模式下的注入
Title:Mssql显错和不显错模式下的注入 -- 2010-10-27 19:51 近期用手工注入用习惯了,便列出最近用的Mssql语句,以后方便拿来用! -------------------- ...
- PYTHONE的WHILE,BREAK,CONTINUE示例
简短示例: while True: s = raw_input('Enter something : ') if s == 'quit': break if len(s) < 3: print ...
- Largest product in a grid
这个比前面的要复杂点,但找对了规律,还是可以的. 我逻辑思维不强,只好画图来数数列的下标了. 分四次计算,存入最大值. 左右一次,上下一次,左斜一次,右斜一次. In the 2020 grid be ...
- Gridview中奇偶数行颜色设置
在gridview中的RowDataBound事件里面写 switch (e.Row.RowType) {case DataControlRowType.Header: e.Row.BackColor ...
- ASCII、Unicode、GBK和UTF-8字符编码的区别联系[转]
http://dengo.org/archives/901 这是我看过的最好的一篇讲述编码的文章 很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物.他们看到 ...
- Skipped Rebuild All: Project with VS2008
This Problem is getting me head around it in these days. BUt , i have solve it: Description of Probl ...
- Android 利用Application对象存取公共数据
本文章来给大家介绍Android 利用Application对象存取公共数据. Android系统在运行每一个程序应用的时候,都会创建一个Application对象,用于存储与整个应用相关的公共变量. ...
- rsyslog 只读取变化的日志
<pre name="code" class="html">input(type="imfile" File="/us ...