·您现在的位置: 江北区云翼计算机软件开发服务部 >> 文章中心 >> 网站建设 >> app软件开发 >> IOS开发 >> IOS开发UI基础UIView

IOS开发UI基础UIView

作者:佚名      IOS开发编辑:admin      更新时间:2022-07-23

主要介绍下UIView得基本概念和一些属性的介绍至于属性的用户后面会由详细的介绍

-、UIView基本概念

1.什么是控件?

屏幕上所有的UI元素都叫做控件 (也有很多书中叫做视图 组件) 比如 按钮(UIButton) 文本(UILabel)都是控件

控件的共同属性有哪些?

尺寸

位置

背景色

...........

苹果将控件的共同属性都抽取到父类UIView中 所有的控件最终都继承自UIView中 UIBUtton UIView都继承自UIView

 

父控件、子控件

每个控件都是个容器 能够容纳其他控件

内部小控件是大控件的子控件

大控件是内部小控件的父控件

每一个控制器(UIViewController) 内部都有个默认的UIView属性控制器中管理的其他所有控件都是这个view的直接或间接子控件

@PRoperty(nonatomic,retain)UIView* view; 

 

2.UIView的常见属性   @property(nonatomic,readonly) UIView *superview;    ➢ 获得⾃自⼰己的⽗父控件对象  

@property(nonatomic,readonly,copy) NSArray *subviews; ➢ 获得⾃自⼰己的所有⼦子控件对象

 

@property(nonatomic) NSInteger tag; ➢ 控件的ID(标识),⽗父控件可以通过tag来找到对应的⼦子控件

 

@property(nonatomic) CGAffineTransform transform;➢ 控件的形变属性(可以设置旋转⾓角度、⽐比例缩放、平移等属性)

 

- (void)addSubview:(UIView *)view; ➢ 添加⼀一个⼦子控件view

- (void)removeFromSuperview;  ➢ 从⽗父控件中移除


- (UIView *)viewWithTag:(NSInteger)tag;  ➢ 根据⼀一个tag标识找出对应的控件(⼀一般都是⼦子控件)

介绍以下三个属性之前 首先我们要了解以下UIKit坐标系:

在UIKit中 坐标系的原点(0,0)在左上角 X值向右正向延伸 Y值向下正向延伸

@property(nonatomic) CGRect frame;➢ 控件矩形框在⽗父控件中的位置和尺⼨寸(以⽗父控件的左上⾓角为坐标原点)   @property(nonatomic) CGRect bounds;➢ 控件矩形框的位置和尺⼨寸(以⾃自⼰己左上⾓角为坐标原点,所以bounds的x、y⼀一般为0)   @property(nonatomic) CGPoint center;➢ 控件中点的位置(以⽗父控件的左上⾓角为坐标原点)   UIView属性设置示例 1.alpha :设置视图的透明度 默认为1  
1 self.view.alpha = 0 //完全透明
2 
3 self.view.alpha = 1; //不透明

2.clipsToBounds 默认是NO 设置为YEW时 超出当前视图的尺寸的内容和子视图不会显示

self.view.clipsToBounds = YES; //超出view的尺寸的内容和子视图不会显示

 3.hidden 默认是NO 当设置为YES时 视图就看不见了

1 self.view.hidden=YES ;// 隐藏当前视图 

4.userInteractionEnabled 默认为YES 如果设置为NO View就不能和用户交互了 即不能响应事件

self.view.userInteractionEnabled = NO; //不能和用户交互 不能响应事件

 5.tag 默认为0 用来标记控件的

self.view.tag = 10 ; //为view这个视图做一个标记为10  默认所有控件的标记为0

 6.exclusiveTouch  默认为NO

exclusiveTouch 的意义在于: 如果当前设置了exclusiveTouch的UIView是整个触摸事件的第一响应者 那么到你所有的手指离开屏幕前其他的UIView是无法接受到整个事件周期内所有的触摸事件

7.CGRect frame

>表示控件的位置和尺寸 以父控件的左上角为坐标原点(0,0)

>修改这个属性 可以调整控件的位置和尺寸

8.CGPoint center

>表示控件的中点 以父控件的左上角为坐标原点

>修改这个属性 可以调整控件的位置

9.CGRect bounds

>表示控件的位置和尺寸 以自己的左上角为坐标原点 位置一般是(0,0)

>修改这个属性 只能调整控件的尺寸

10.CGAffineTransform transform

>表示控件的形变状态  旋转角度 缩放比例

>创建CGAffineTransform 的函数

CGAffineTransformMakeScale(CGFloat scaleX,CGFloat scaleY);//创建一个x,y方向的缩放比例分别为scaleX 、scaleY的形变值

CGAffineTransformMakeRotation(CGFloat angle);//创建一个旋转角度为angle的形变值

CGAffineTransformScale(CGAffineTransform t, CGFloat sx, CGFloat sy);//在形变值t的基础上,再进行缩放,x、y方向的缩放比例分别为sx、sy,然后返回一个新的形变值

 CGAffineTransformRotate(CGAffineTransform t, CGFloat angle);//在形变值t的基础上,再进行旋转,旋转角度为angle,然后返回一个新的形变值

 11.superview

返回当前视图的父视图

12.window 返回当前视图的窗口

获取根视图的superview 和 window 时 需要注意 在viewdidload中是获取不到的 viewdidload只是视图加载完成时调用,这个时候并没有添加到窗口中 因此需要在viewDidAppear方法中才能够获取到 那时候视图才被添加到窗口中

举例:

- (void)viewDidLoad {
    [super viewDidLoad];
    NSLog(@"viewDidLoad-------%@",self.view.superview); //没有值
    NSLog(@"viewDidLoad--------%@",self.view.window);//没有值
}


- (void)viewDidAppear:(BOOL)animated
{
    NSLog(@"viewDidAppear ----- %@",self.view.superview); //有值
    NSLog(@"viewDidAppear -----%@",self.view.window);//有值
}

 

13.autoresizesSubviews 默认为YES 表示当父控件的尺寸发生改变时 子控件也会随着改变

14.autoresizingMask 默认为UIViewAutoresizingNone 不会自动伸缩

15.contentMode 设置内容模式

UIViewContentModeScaleToFill  不按照原宽高比例(长和宽不等比例增长)以任意比例填充。这样视图不会有空白,且内容可以全部显示。
UIViewContentModeaspectToFill  按照原长宽比例填充,不完全显示全部内容。这样内容可能溢出,但整个视图不会留有空白。
UIViewContentModeAspectToFit   按照原长宽比例(长和宽等比例增长),完全显示全部内容。这样容易照成左右或者上下留有空白。

16.backgroundColor 背景颜色
self.view.backgroundColor = [UIColor redColor];  // 设置背景颜色为红色

UIView常用添加子视图的方法

  • addSubview  添加一个控件到一个控件里面
  • bringSubviewToFront 将一个控件移到前面
  • sendSubviewToBack 将一个控件移到后面
  • removeFromSuperview 把控件移除
  • insertSubview:atIndex 插入视图并指定索引
  • insertSubview:aboveSubview;插入视图到某一个视图之上
  • insertSubview:belowSubview ;插入视图到某个视图之下
  • exchangeSubviewAtIndex:withSubviewAtIndex:
  以上属性的用法 读者可以自己逐一尝试 ,不用记住 暂时了解下即可  后面我会对每一个属性的用法 利用一些小案例对他们进行深入的讲解