UIView是表示的就是屏幕上的一个矩形区域,基本我们了解到的基础控件都是UIView的子类,比如UIlabel,UIsearchBar,UIimage等。
UIview的作用
负责内部区域的内容渲染。
负责内部区域的触摸事件。
管理本身的所有子视图。
处理基本的动画。
UIView的初始化
UIView *view =[ [UIView alloc] init];
UIView *view =[ [ UIView alloc ] initWithFrame:CGRectMake(x,y,weight,height);
UIview的常用基本属性:
@property(nonatomic) CGRect frame; //UIview的位置(以父视图的左上角为原点和长宽)
@property(nonatomic) CGRect bounds; //(和frame一样来表示位置,但是以自身的坐标系为标准,不影响当前视图的位置,会影响子视图的位置)
@property(nonatomic) CGPoint center; //视图的中心点
@property(nonatomic) NSInteger tag; //控件标记,父控件可以通过tag寻找子控件
@property(nonatomic,getter=isHidden) BOOL hidden; //是否隐藏,默认是no;
@property(nonatomic,getter=isUserInteractionEnabled) BOOL userInteractionEnabled; // 是否可以和用户进行交互,默认为YES
@property(nonatomic) BOOL clipsToBounds; // 子视图超出父视图范围是否裁剪子视图,默认是NO
@property(nullable, nonatomic,readonly) UIView *superview;// 当前视图的父视图
@property(nullable, nonatomic,copy) UIColor *backgroundColor //设置视图的背景颜色
@property(nonatomic) CGFloat alpha;//透明度范围(0,1),0为完全透明,不显示
UIView的常用方法
// 添加子视图
- (void)addSubview:(UIView *)view;
// 从父视图中移除
- (void)removeFromSuperview;
// 将一个视图的层次设置成最上面
- (void)bringSubviewToFront:(UIView *)view;
例如 :
[self.view addSubview:view];
[self.view addSubview:view1];
[self.view bringSubviewToFront:(view)];
可以将view 拉到view上面显示
// 将一个视图的层次设置成最下面
- (void)sendSubviewToBack:(UIView *)view;
// 插入指定视图的上面
- (void)insertSubview:(UIView *)view belowSubview:(UIView *)siblingSubview;
// 插入指定视图的下面
- (void)insertSubview:(UIView *)view aboveSubview:(UIView *)siblingSubview;
// 通过指定的标记值获取视图
- (nullable __kindof UIView *)viewWithTag:(NSInteger)tag;
需要自己给tag赋值,因为每个tag默认为0,否则会返回当前view。
frame和bounds的区别:
frame是每个view必备的属性,代表的是当前视图
的位置和大小,没有设置他,当前视图
是看不到的。位置需要有参照物才能确定,数学中我们用坐标系来确定坐标系中的某个点的位置,iOS中有它特有的坐标系。对于每个view的frame会以它的父视图建立坐标系来判断自己的位置。
右
为X正方向,往下
是Y正方向父视图的坐标系
为标准来确定当前视图的位置
左上角
就是子视图
的坐标原点
当前视图
的左上角
为基准的进行大小的修改
bounds是每个view的必要属性,一般bounds不设置,它同样代表来view的大小和位置,每个视图都有自己的坐标系,且这个坐标系默认以自身的左上角
为坐标原点,所有子视图以这个坐标系的原点
为基准点。
当改变bounds的大小时,视图的center不会改变,相当于一种以中心点为基准的一种缩放。
当我们更改bounds的位置是,修改的是这个视图自己的坐标系,即当前视图不会改变,改变的是子视图的位置,因为子视图以父视图的坐标系为准。
比如默认(0,0) 改为(0,50);
修改后父视图的左上角不再是原点,而是从(0,0) 变为(0,50);