UIView | 青训营笔记

90 阅读4分钟

文章第一句话为“这是我参与「第四届青训营 」笔记创作活动的第5天

一、UIView功能

  1. 最基础的视图类,管理屏幕上一定区域的内容展示
  2. 作为各种视图类型的父类,提供基础的能力
  3. 进行外观、渲染和动画
  4. 响应区域内的事件
  5. 布局和管理子视图
  • 布局
    • 设置大小、位置(frame)
    • addSubView
  • 使用栈管理全部子视图
    • 位置重叠的展示最后入栈的视图
    • 可以随时调整位置
    • 可以插入到指定位置

二、UIView的布局

  • CGPoint:表示一个二维坐标系中的点,表示View的起始坐标位置
    •   struct CGPoint { CGFloat x; CGFloat y; };
  • CGSize: 表示一个矩形的宽度和高度,表示View的大小
    •   struct CGSize { CGFloat width; CGFloat height; };
  • CGRect: 确定了整个视图位置和大小
    •   struct CGRect { CGPoint origin; //偏移是相对父视图的 CGSize size; };
  • Frame:描述当前视图在父视图中的位置和大小
//Frame:描述当前视图在父视图中的位置和大小
@property(nonatomic) CGRect frame;
//bounds:描述当前视图在其自身坐标系统中的位置和大小
@property(nonatomic) CGRect bounds;
//center:描述当前视图中心点在父视图中的位置
@property(nonatomic)CGPoint center;

2、View的常用属性

 //形变属性(平移\缩放\旋转)  @property(nonatomic)CGAffineTransform  transform;
//YES:支持多触点 @property(nonatomic,getter=isMultipleTouchEnabled)BOOL multipleTouchEnabled; //default is NO
//YES:超出控件边框范围的内容都剪掉 @property(nonatomic)BOOL clipsToBounds;
//背景色 @property(nonatomic,copy)UIColor *backgroundColor;
//YES:不透明 NO:透明 @property(nonatomic,getter=isOpaque)BOOL  opaque;
//YES:隐藏  NO:显示 @property(nonatomic,getter=isHidden)BOOL  hidden;
//内容模式 @property(nonatomic) UIViewContentMode contentMode
 //default is UIViewContentModeScaleToFill

3、View设置方法

//创建一个视图,请求内存
UIView *view = [[UIview alloc] init];
//设置视图背景
view.backgroundColor = [UIColor redColor];
//设置大小、位置
view.frame=CGRectMake(0, 0, self.view.window.bounds.size.width, self.veiw.window.bounds.size.height);//全屏大小
//将新建的View加入到主视图中
[self.view addSubview: view];

三、UIView的生命周期

//当视图添加/移除子视图时调用
- (void)didAddSubview:(UIView *)subview;
- (void)willRemoveSubview:(UIView *)subview;

// 当视图即将加入父视图时 / 当视图即将从父视图移除时调用
- (void)willMoveToSuperview:(nullable UIView *)newSuperview;
// 当视图已经加入父视图时 / 当视图从父视图移除时调用
- (void)didMoveToSuperview;

// 当视图即将加入父视图时 / 当视图即将从父视图移除时调用
- (void)willMoveToWindow:(nullable UIWindow *)newWindow;
// 当视图已经加入父视图时 / 当视图从父视图移除时调用
- (void)didMoveToWindow;

四、UIView的方法

    • (instancetype)init;
    • (void)dealloc;
    • (void)removeFromSuperview;
    • (void)drawRect:(CGRect)rect;
    • (void)layoutSubviews;

1、图层操作

  • 新增和移除Subview
[Subview removeFromSuperview];     //将Subview从当前的UIView中移除 
[UIView addSubview:Subview];     //替UIView增加一个Subview
  • 在UIView中将Subview往前或是往后移动一个图层
[UIView bringSubviewToFront:Subview];       //将Subview往前移动一个图层(与它的前一个图层对调位置)//将Subview往前移动一个图层(与它的前一个图层对调位置)
[UIView sendSubviewToBack:Subview];      //将Subview往后移动一个图层(与它的后一个图层对调位置)
  • 在UIView中使用索引Index交换两的Subview彼此的图层层级
[UIView exchangeSubviewAtIndex:indexA withSubviewAtIndex:indexB];    //交换两个图层  
  • 使用Subview的变数名称取得它在UIView中的索引值(Index )
NSInteger index = [[UIView subviews] indexOfObject:Subview名称];       //取得Index  
  • 替Subview加上NSInteger 的标记(Tag)好让之后它们分辨彼此
[Subview setTag:NSInteger];       //加上标记
[UIView viewWithTag:NSInteger];  //通过标记得到view 返回值为UIView
  • 取得UIView中所有的Subview,呼叫此方法会传回一个 NSArray
[UIView subviews] ;        //取的UIView下的所有Subview 

五、视图分类

  • 控件:继承自UIController,能够响应用户高级事件,如UIButton、UISlider、UISwitch

  • 窗口:窗口是一个UIWindow对象。一个iOS应用只能有一个UIWindow对象,它是所有子视图的根容器。

  • 容器视图:包括UIScrollView、UIToolbar及其它们的子类。

  • 显示视图:用于显示信息,包括UIImageView、UILabel、UIProgressView和UIActivityIndicatorView等。

  • 文本视图和Web视图:提供能显示多行文本的视图,包括UITextView和UIWebView,其中UITextView也属于容器视图,UIWebView是能够加载HTML代码的视图

  • 导航视图:为用户提供从一个屏幕到另外一个屏幕的导航(跳转)视图,包括UITabBar和UINavigationBar。

  • 警告框和操作表:用于给用户提供一种反馈或者与用户进行交互。

image.png