UIView常用属性的注意点:
UIView常用属性的注意点:
@property(nonatomic) CGRect frame;
// frame 属性注意点:
// 1> frame 表示: 使用控件父容器的坐标系统来描述控件的位置和大小。
// 2> frame 使用的是点坐标系
// 3.1> 修改了控件的 frame 之后, 控件会自动重新显示(但是不调用 drawRect:方法);
// 3.2> 如果希望修改了控件的 frame, 重新显示控件的时候调用drawRect:方法, 那么需要设置控件的contentMode属性值为UIViewContentModeRedraw
// 4> 当修改了控件的 transform属性后, 不要再读取(或修改)frame; 如果要修改控件的位置和大小, 请使用 center 和 bounds 属性
@property(nonatomic) CGRect bounds;
/ 1> bounds 表示: 使用控件自身的坐标系统来描述控件的位置和大小。(主要是为了让当前控件的子控件方便布局, 当前控件的子控件以这个坐标系为准来进行布局)
// 1.1> 简而言之: bounds.x 和 bounds.y 决定了UIView的subView的原点坐标。
// 2> bounds 使用的是点坐标系
// 3> 通过 bounds 修改大小, 控件会表现出相对于中心点的大小变化
// 4> bounds 默认的 x、y 值是(0, 0), 这个值是可以修改的, 修改了这个值不会影响控件本身的的显示, 而是影响该控件内部子控件的显示(因为改变了当前控件自身的坐标系, 所以该控件的所有子控件的相对位置就发生了变化)
// 5> bounds 的 size 是和 frame 的 size 相关联的, 修改了一个会影响另外一个
@property(nonatomic) CGPoint center;
// 1> center 属性也是用点坐标来描述的
// 2> center 一般指的是当前控件的中心点(在父容器坐标系统中的中心点)
// 3> 修改 center 属性也会影响到 frame 属性
// 4.1> 当一个控件还没有添加到任何父控件中的时候, 此时控件的center就是相对于控件自身左上角的偏移。
// 4.2> 当把一个控件添加到父容器中后, 此时控件的center就变成了相对于父控件的左上角的距离
@property(nullable, nonatomic,readonly) UIView *superview;//父控件
@property(nonatomic,readonly,copy) NSArray<__kindof UIView *> *subviews;//子控件集合数组
@property(nonatomic)NSInteger tag;//tag值,也可以叫识别标识
// 文本框的 text 属性
@property(nullable, nonatomic,copy) NSString *text;//text属性
// 总结:
// 通过控件的frame可以修改控件的【位置(x, y)】 和 【大小(width, height)】
// 通过控件的center只能修改控件的【位置(x, y)】
// 通过控件的bounds只能修改控件的【大小(width, height)】
注意:
遇到一个类中有一个属性是”结构体”类型时,那么不可以直接通过类的对象
介绍控件常见的方法
- (void)removeFromSuperview; 移除
- (void)addSubview:(UIView *)view; 添加
- (nullable __kindof UIView *)viewWithTag:(NSInteger)tag; 用tag值来找控件 //nullable __kindof 表示返回值不能为空,后面跟UIView *,表示返回值必须为一个UIView *