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. 转:初学者,手工注入测试方法小节 (出处:: 51Testing软件测试网--jie)

    1.加入单引号 ’提交,  结果:如果出现错误提示,则该网站可能就存在注入漏洞.    2.数字型判断是否有注入; 语句:and 1=1 ;and 1=2 (经典).' and '1'=1(字符型)  ...

  2. iphone微信长按二维码识别不了

    在安卓版的微信长按二维码可以识别(前提是你的微信版本到支持此功能),但是到了苹果版的微信就识别不了,经个人测试发现是缩放的问题: 1.设置了初始缩放设置为1,最大缩放值要>=1,不支持缩放.-- ...

  3. python requests 基础学习

    首先,Python 标准库中的 urllib2 模块提供了你所需要的大多数 HTTP 功能,但是它的 API 不友好.它是为另一个时代.另一个互联网所创建的.它需要巨量的工作,甚至包括各种方法覆盖,来 ...

  4. PHP 过滤二维数组和三维数组

    <?php $arr = [ [1,3,5,7,9], [2,4,6,8,0] ]; $arr2 = [ 'list' => [ [1,3,5,7], [2,4,6,8], [3,2,9, ...

  5. htmlspecialchars()函数

    htmlspecialchars() 函数把一些预定义的字符转换为 HTML 实体. 预定义的字符是: & (和号) 成为 & " (双引号) 成为 " ' (单引 ...

  6. 自己动手开发编译器(五)miniSharp语言的词法分析器

    稍微说明一点,整型常量和上面的标识符的词法,在调用lex.DefineToken时都多传了一个参数.这个参数是可选的描述信息,如果不传会直接使用正则表达式的字符串形式.而标识符的正则表达式有4万多个字 ...

  7. strnclmp和strlen函数的用法

    一.strncmp 函数 函数原型: 1.函数原型:int strncmp (const char *s1, const char *s2, size_t  n) 2.头文件: <string. ...

  8. Toast——提醒方式

    Toast是Android系统提供的一种非常好的提醒方式,在程序中可以使用它将一些短小的信息通知给用户,这些信息会在一段时间后自动消失,并且不会占用任何屏幕空间,我们现在就尝试一下如何在活动中使用To ...

  9. led驱动程序设计

    LED的驱动程序很简单,按照张字符型设备驱动设计方法顺下来即可实现,这里主要讲几个注意事项. 一.在linux系统中,操作硬件不能够使用物理地址,一定要用虚拟地址.将物理地址转化为虚拟地址的函数如下: ...

  10. [Tips]ASP.NET MVC 发布到服务器后Model中属性相关的Attribute失效

    Asp.net MVC4 开发的项目,发布到真实环境环境后Model中的一个属性设置的了Attribute,但是这些Attribute都失效. 经过对比和坚持代码发现控制长度的Attribute使用错 ...