UIView

UIView
简介

iOS中的视图组件,所有的控件都需要显示在视图上
创建一个视图

//在坐标为(10,10)的位置创建一个宽为100高为100的视图
CGRect  viewRect = CGRectMake(10, 10, 100, 100);
UIView* myView = [[UIView alloc] initWithFrame:viewRect];

视图的初始化

//便利初始化方法
- (instancetype)initWithFrame:(CGRect)aRect

配置视图的外观

//视图的背景颜色
@property(nonatomic, copy) UIColor *backgroundColor

//是否隐藏,默认为NO
@property(nonatomic, getter=isHidden) BOOL hidden

//透明度,0.0-1.0的数值,0为全透明,1为不透明
@property(nonatomic) CGFloat alpha

//是否透明,默认为YES
@property(nonatomic, getter=isOpaque) BOOL opaque

//视图控件的颜色
@property(nonatomic, retain) UIColor *tintColor

//视图的色彩模式
@property(nonatomic) UIViewTintAdjustmentMode tintAdjustmentMode
枚举值:
UIViewTintAdjustmentModeAutomatic,      //自动的
UIViewTintAdjustmentModeNormal,         //正常的
UIViewTintAdjustmentModeDimmed,         //暗淡的

//决定了子视图的显示范围。具体的说,就是当取值为YES时,剪裁超出父视图范围的子视图部分;当取值为NO时,不剪裁子视图。默认值为NO。
@property(nonatomic) BOOL clipsToBounds

//决定在视图重画之前是否先清理视图以前的内容,缺省值为YES
//如果你把这个属性设为NO,那么你要保证能在 drawRect:方法中正确的绘画。如果你的代码
//已经做了大量优化,那么设为NO可以提高性能,尤其是在滚动时可能只需要重新绘画视图的一部分
@property(nonatomic) BOOL clearsContextBeforeDrawing

//模具视图
@property(nonatomic, retain) UIView *maskView

//类方法,返回类用来创建这一个本类的layer实例对象
+ (Class)layerClass

返回值:一个用来创建视图layer的类

//用于视图渲染的核心动画层
@property(nonatomic, readonly, retain) CALayer *layer

CALayer 为层对象,详情参见CALayer文档

配置相关的行为事件

//是否可以与用户交互。默认是YES
@property(nonatomic, getter=isUserInteractionEnabled) BOOL userInteractionEnabled

//是否支持多点触控.默认是NO
@property(nonatomic, getter=isMultipleTouchEnabled) BOOL multipleTouchEnabled

//决定当前视图是否是处理触摸事件的唯一对象,默认为NO
@property(nonatomic, getter=isExclusiveTouch) BOOL exclusiveTouch

按钮边界的配置

//当前视图的边界,包括大小和原点,这里是在父视图的坐标系下
@property(nonatomic) CGRect frame

//当前视图的边界,包括大小和原点,这里是在系统坐标系下
@property(nonatomic) CGRect bounds

//当前视图的中心,并指定是在父视图的坐标系下
@property(nonatomic) CGPoint center

CGPoint 为坐标结构体,包含x和y两个值

//视图的仿射变换
@property(nonatomic) CGAffineTransform transform

CGAffineTransform结构体,有六个值,分别是:
CGFloat a, b, c, d;
CGFloat tx, ty;

视图层次

//获取俯视图,只读属性
@property(nonatomic, readonly) UIView *superview

//当前视图的所有子视图,只读属性
@property(nonatomic, readonly, copy) NSArray *subviews

//当前视图上的UIWindow对象,只读属性
@property(nonatomic, readonly) UIWindow *window

//向当前视图上添加子视图
- (void)addSubview:(UIView *)view

参数:
view:View或者View子类对象

示例:
[view addSubview:button];

//把这个View放到最前面
- (void)bringSubviewToFront:(UIView *)view

//把这个View移动到最后面
- (void)sendSubviewToBack:(UIView *)view

//从父视图移除
- (void)removeFromSuperview

//在索引位置插入一个视图
- (void)insertSubview:(UIView *)view
              atIndex:(NSInteger)index

参数:
view:要放置的视图
index:索引位置,最底层是0

示例:
[view insertSubview:button atIndex:1];

//在某个视图上插入一个视图
- (void)insertSubview:(UIView *)view
         aboveSubview:(UIView *)siblingSubview

参数:
view:要放置的视图
siblingSubview:某个视图

//在某个视图下插入一个视图
- (void)insertSubview:(UIView *)view
         belowSubview:(UIView *)siblingSubview

参数:
view:要放置的视图
siblingSubview:某个视图

示例:
[view insertSubview:button belowSubview:view1];

//用索引值交换两个视图
- (void)exchangeSubviewAtIndex:(NSInteger)index1
            withSubviewAtIndex:(NSInteger)index2

参数:
index1:视图索引值
index2:另一个视图索引值

//判定一个视图是否在其父视图的视图层中
- (BOOL)isDescendantOfView:(UIView *)view

调整大小行为

//决定当当前视图的父视图大小发生变化时,当前视图该怎么调整自己的size
@property(nonatomic) UIViewAutoresizing autoresizingMask

UIViewAutoresizing枚举值:
UIViewAutoresizingNone              //视图将不进行自动尺寸调整。
UIViewAutoresizingFlexibleHeight    //视图的高度将和父视图的高度一起成比例变化。否则,视图的高度将保持不变
UIViewAutoresizingFlexibleWidth     //视图的宽度将和父视图的宽度一起成比例变化。否则,视图的宽度将保持不变
UIViewAutoresizingFlexibleLeftMargin//视图的左边界将随着父视图宽度的变化而按比例进行调整。否则,视图和其父视图的左边界的相对位
置将保持不变。
UIViewAutoresizingFlexibleRightMargin//视图的右边界将随着父视图宽度的变化而按比例进行调整。否则,视图和其父视图的右边界的相对位
置将保持不变。
UIViewAutoresizingFlexibleBottomMargin//视图的底边界将随着父视图高度的变化而按比例进行调整。否则,视图和其父视图的底边界的相对位
置将保持不变。
UIViewAutoresizingFlexibleTopMargin//视图的上边界将随着父视图高度的变化而按比例进行调整。否则,视图和其父视图的上边界的相对位
置将保持不变。

//这个属性是决定当视图大小边界发生改变时,其子视图是否也跟着自动调整大小,默认为YES
@property(nonatomic) BOOL autoresizesSubviews

//决定当视图边界变时呈现视图内容的方式
@property(nonatomic) UIViewContentMode contentMode

UIViewContentMode枚举值:
UIViewContentModeScaleToFill                //填充
UIViewContentModeScaleAspectFit             //缩放填充
UIViewContentModeRedraw                     //重绘边界
UIViewContentModeCenter                     //保持相同的大小,居中
UIViewContentModeTop                        //
UIViewContentModeBottom,
UIViewContentModeLeft,
UIViewContentModeRight,
UIViewContentModeTopLeft,
UIViewContentModeTopRight,
UIViewContentModeBottomLeft,
UIViewContentModeBottomRight,

返回最符合其子视图的大小。返回最佳尺寸,默认返回self.frame.size
- (CGSize)sizeThatFits:(CGSize)size

//应用最佳尺寸
- (void)sizeToFit

视图布局

//对子视图布局
- (void)layoutSubviews

//标记视图需要重新布局,会调用layoutSubviews
- (void)setNeedsLayout

//当调用了setNeedsLayout并不会马上调用layoutSubviews,这时候调用该方法,可以强制发生重新布局。
- (void)layoutIfNeeded

//返回view是否是约束布局模式
+ (BOOL)requiresConstraintBasedLayout

//返回一个BOOL,判断自动布局是否可为转换约束布局
- (BOOL)translatesAutoresizingMaskIntoConstraints

//设置在约束布局系统中是否把自动布局转换为约束布局
- (void)setTranslatesAutoresizingMaskIntoConstraints:(BOOL)flag

管理视图的约束

//返回view的约束数组
- (NSArray *)constraints

//添加约束
- (void)addConstraint:(NSLayoutConstraint *)constraint

参数:
constraint:约束对象

NSLayoutConstraint 为约束条件,详情请参见NSLayoutConstraint文档

//添加一组约束
- (void)addConstraints:(NSArray *)constraints

//移除某个约束
- (void)removeConstraint:(NSLayoutConstraint *)constraint

//移除一组约束
- (void)removeConstraints:(NSArray *)constraints

测量约束布局

//返回最合适的尺寸
- (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize

//满足约束视图布局的大小
- (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize
        withHorizontalFittingPriority:(UILayoutPriority)horizontalFittingPriority
              verticalFittingPriority:(UILayoutPriority)verticalFittingPriority

//返回view的自然尺寸
- (CGSize)intrinsicContentSize

//使内容尺寸无效化
- (void)invalidateIntrinsicContentSize

//返回缩小的视图布局的轴线
-(UILayoutPriority)contentCompressionResistancePriorityForAxis:(UILayoutConstraintAxis)axis

参数:
axis:布局约束
枚举值:
UILayoutConstraintAxisHorizontal    //水平
UILayoutConstraintAxisVertical      //垂直
返回值:小数

//设置缩小的视图布局的轴线
- (void)setContentCompressionResistancePriority:(UILayoutPriority)priority
                                        forAxis:(UILayoutConstraintAxis)axis

//返回放大的视图布局的轴线
- (UILayoutPriority)contentHuggingPriorityForAxis:(UILayoutConstraintAxis)axis

//设置放大的视图布局的轴线
- (void)setContentHuggingPriority:(UILayoutPriority)priority
                          forAxis:(UILayoutConstraintAxis)axis

校准约束布局

//返回视图矩形对于指定视图框架
- (CGRect)alignmentRectForFrame:(CGRect)frame

//返回框架对于指定视图矩形
- (CGRect)frameForAlignmentRect:(CGRect)alignmentRect

//返回自定义视图框架
- (UIEdgeInsets)alignmentRectInsets

//如果超出约束范围,自动生成基线限制,以满足视图需求
- (UIView *)viewForBaselineLayout

触发约束布局

//返回约束布局是否需要更新,YES为是
- (BOOL)needsUpdateConstraints

//设置需要更新约束布局
- (void)setNeedsUpdateConstraints

//更新约束布局
- (void)updateConstraints

//更新约束布局及其子布局
- (void)updateConstraintsIfNeeded

调试约束布局

//返回影响视图布局限制的轴线
- (NSArray *)constraintsAffectingLayoutForAxis:(UILayoutConstraintAxis)axis

//返回视图布局约束是否影响指定视图,主要用于调试约束布局,结合exerciseAmbiguityInLayout。
- (BOOL)hasAmbiguousLayout

//随机改变不同效值布局视图,主要用于调试基于约束布局的视图
- (void)exerciseAmbiguityInLayout

配置的内容边距

//布局边界,距离父视图的上下左右的距离
@property(nonatomic) UIEdgeInsets layoutMargins

//这个属性默认是NO。如果把它设为YES,layoutMargins会根据屏幕中相关View的布局而改变
@property(nonatomic) BOOL preservesSuperviewLayoutMargins

//在我们改变View的layoutMargins这个属性时,会触发这个方法。我们在自己的View里面可以重写这个方法来捕获layoutMargins的变化。在大多数情况下,我们可以在这个方法里触发drawing和layout的Update
- (void)layoutMarginsDidChange

绘制和更新视图

//在view中绘制一个矩形
- (void)drawRect:(CGRect)rect

//使view重绘
- (void)setNeedsDisplay

//指定矩形重绘
- (void)setNeedsDisplayInRect:(CGRect)invalidRect

//应用到当前视图的比例Scale
@property(nonatomic) CGFloat contentScaleFactor

//视图颜色属性发生变化时,由系统调用
- (void)tintColorDidChange

格式化内容

//返回view的打印对象
- (UIViewPrintFormatter *)viewPrintFormatter

//使用某个区域来打印
- (void)drawRect:(CGRect)area
forViewPrintFormatter:(UIViewPrintFormatter *)formatter

管理手势

//添加手势识别器
- (void)addGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer

参数:
gestureRecognizer:手势识别器对象,详情参见UIGestureRecognizer文档

//删除手势识别器
- (void)removeGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer

//访问手势集合
@property(nonatomic, copy) NSArray *gestureRecognizers

//通过返回值决定是否识别此手势
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer

保存和恢复状态

//该标示符决定该视图是否支持恢复状态,其实也只是个标示符而已
@property(nonatomic, copy) NSString *restorationIdentifier

//保存视图状态相关信息
- (void)encodeRestorableStateWithCoder:(NSCoder *)coder

//恢复和保持视图状态相关信息
- (void)decodeRestorableStateWithCoder:(NSCoder *)coder

捕捉视图快照

//返回一个基于当前视图的内容快照视图。
- (UIView *)snapshotViewAfterScreenUpdates:(BOOL)afterUpdates

//返回一个基于当前视图的特定内容的快照视图,拉伸插图。
- (UIView *)resizableSnapshotViewFromRect:(CGRect)rect
                       afterScreenUpdates:(BOOL)afterUpdates
                            withCapInsets:(UIEdgeInsets)capInsets

//利用View层次结构并将其绘制到当前的上下文中
- (BOOL)drawViewHierarchyInRect:(CGRect)rect
             afterScreenUpdates:(BOOL)afterUpdates

在运行时确定View

//当前视图的标签
@property(nonatomic) NSInteger tag

//返回指定tag的view
- (UIView *)viewWithTag:(NSInteger)tag

视图坐标系统之间的转换

//把本地视图(调用者)下的point(第一参数)转换为指定view(第二参数)的point(返回值)
- (CGPoint)convertPoint:(CGPoint)point
                 toView:(UIView *)view

//把指定view(第二参数)下的point(第一参数)转化为本地视图(调用者)的point(返回值)
- (CGPoint)convertPoint:(CGPoint)point
               fromView:(UIView *)view

//道理同上
- (CGRect)convertRect:(CGRect)rect
               toView:(UIView *)view

//道理同上
- (CGRect)convertRect:(CGRect)rect
             fromView:(UIView *)view

视图中的点击

//此方法可实现点击穿透、点击下层视图功能
- (UIView *)hitTest:(CGPoint)point
          withEvent:(UIEvent *)event

//这个函数的用处是判断当前的点击或者触摸事件的点是否在当前的view中
- (BOOL)pointInside:(CGPoint)point
          withEvent:(UIEvent *)event

结束视图编辑

//当前视图结束编辑
- (BOOL)endEditing:(BOOL)force

视图相关的变化

//告诉视图添加子视图
- (void)didAddSubview:(UIView *)subview

//即将移除子视图
- (void)willRemoveSubview:(UIView *)subview

//即将从父视图移除
- (void)willMoveToSuperview:(UIView *)newSuperview

//已经移除,父视图改变
- (void)didMoveToSuperview

//窗口对象即将改变
- (void)willMoveToWindow:(UIWindow *)newWindow

//已经移除窗体对象
- (void)didMoveToWindow


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值