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总结的更多相关文章

  1. UI基础视图----UIWebView总结

    UIWebView是UIKit框架中继承于UIView的一个常用的基础视图,和UILabel,UIImageView是兄弟类,用于展示一个网页. UIWebView是一个可以设置代理的类,在加载的不同 ...

  2. IOS开发-UI基础-视图

    //------------------------------UIWindow--------------------------// 1.UIWindow:是 UIView 的子类,用于管理.协调 ...

  3. iOS用心学 UI基础之UIView

    一.引入UI 在实际开发中,基本的流程大致如下图所示: UI(User Interface)作为最基本的要点,也是非常重要的一部分,UI界面的美观直接决定着着用户的体验,苹果官方给开发中提供了非常强大 ...

  4. UI基础视图----UIImageView总结

    UIImageView和UILabel一样,也是UIKit框架中非常常用的视图类.继承关系和UILabel完全一致(都是继承于UIView),功能也相似(用户交互都默认为关,主要用于展示),只不过UI ...

  5. UI基础视图----UIScrollView总结

    UIScrollView是UIKit框架下的很重要的视图类,是UIView的子类.UILabel,UIImageView,UIWebView分别用于展示文字,图片,网页,UILabel通过属性text ...

  6. UI基础视图----UILabel总结

    UILabel是UIKit框架中非常常用的视图类,是UIView的子类,是UIWindow,UIImageView等的兄弟类,因为继承自UIView,所以继承了UIView中的属性和方法,大部分都可以 ...

  7. UI基础:视图控制器.屏幕旋转.MVC 分类: iOS学习-UI 2015-07-02 22:21 62人阅读 评论(0) 收藏

    UIViewController 视图控制器,继承自UIResponder,作用:管理视图并且响应事件 功能: 1.分担APPdelegate的工作 2.实现模块独立,能提高复用性 创建UIViewC ...

  8. UI基础UIWindow、UIView

    UI基础UIWindow.UIView 在PC中,应用程序多是使用视窗的形式显示内容,手机应用也不例外,手机应用中要在屏幕上显示内容首先要创建一个窗口承载内容,iOS应用中使用UIWindow.UIV ...

  9. UI基础:UIView(window,frame,UIColor,CGPoint,alpha,CGRect等) 分类: iOS学习-UI 2015-06-30 20:01 119人阅读 评论(0) 收藏

    UIView 视图类,视图都是UIView或者UIView子类 UIWindow 窗口类,用于展示视图,视图一定要添加window才能显示 注意:一般来说,一个应用只有一个window 创建一个UIW ...

随机推荐

  1. IntelliJ IDEA 12 创建Web项目 教程 超详细版

    IntelliJ IDEA 12 新版本发布 第一时间去官网看了下  黑色的主题 很给力 大体使用了下  对于一开始就是用eclipse的童鞋们 估计很难从eclipse中走出来 当然 我也很艰难的走 ...

  2. PHPCMS v9 在windows2008系统 IIS7 下设置伪静态的方法

    安装环境:windows2008+IIS7.0+PHP5+MYSQL5 一.安装phpcms v9程序,设置伪静态.如图: 二.安装IIS7官方Url重写模块 1.先到IIS官方下载模块 下载地址:h ...

  3. JS之对象数组遍历?

    一.js实现遍历对象 <script> ","destroy":"97%"}; var props = ""; for ...

  4. 禁止ios默认拉动弹性行为

    document.ontouchmove = function(e) { e.preventDefault();} /** 禁止ios默认拉动弹性行为**///屏蔽ios下浏览器滚动缓冲效果

  5. MyEclipse 点击 部署 按钮 无效的解决办法

    问题描述 1 通常情况下,当我们点击MyEclipse任务栏上的部署按钮时,会弹出项目部署框,如下图:   2 但我们有时也会遇到点击部署按钮怎么也弹不出项目部署框的问题. END 解决方法一: 1 ...

  6. 装饰者模式 (decorator pattern)

    参考 : Head First 设计模式(中文版) 这篇只作为个人温习! 用意 : 动态地给一个对象添加|扩展一些行为.Decorator 强调用对象组合而非继承来实现扩展,这显得较为灵活. 角色: ...

  7. Altium Designer 画"差分线"

    如何在 Altium Designer 中快速进行差分对走线1:在原理图中让一对网络前缀相同,后缀分别为_N 和_P,并且加上差分队对指示.    让一对差分网络名称的前缀必须相同,后缀分别为_N 和 ...

  8. JavaScript 中的数字和日期类型

    本章节介绍如何掌握Javascript里的数字和日期类型 数字EDIT 在 JavaScript 里面,数字都是双精度浮点类型的 double-precision 64-bit binary form ...

  9. SQL-Customers Who Never Order

    Suppose that a website contains two tables, the Customers table and the Orders table. Write a SQL qu ...

  10. NOI2014题解

    起床困难综合症(BZOJ 3668) 送分题,直接从高位向低位贪心. 魔法森林(BZOJ 3669) 一个容易想到的办法就是枚举A的最大值,以B作为权值求最小生成树.暴力的话要T的.如果从小到大枚举A ...