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
UIView
最新推荐文章于 2017-05-05 08:54:36 发布