一.UIView管理视图的方法
//
加一个视图到一个视图里面
addSubview:
addSubview:
//
将一个视图移到前面
bringSubviewToFront:
// 将一个视图推送到背后
sendSubviewToBack:
// 把视图移除
removeFromSuperview
// 插入视图 并指定索引
insertSubview:atIndex:
// 插入视图在某个视图之上
insertSubview:aboveSubview:
// 插入视图在某个视图之下
insertSubview:belowSubview:
// 交换两个位置索引的视图
exchangeSubviewAtIndex:withSubviewAtIndex:
bringSubviewToFront:
// 将一个视图推送到背后
sendSubviewToBack:
// 把视图移除
removeFromSuperview
// 插入视图 并指定索引
insertSubview:atIndex:
// 插入视图在某个视图之上
insertSubview:aboveSubview:
// 插入视图在某个视图之下
insertSubview:belowSubview:
// 交换两个位置索引的视图
exchangeSubviewAtIndex:withSubviewAtIndex:
视图回调:(具体什么时候出发没搞明白呢)
//
当加入视图完成后调用
-( void )didAddSubview:(UIView *)subview
// 当视图移动完成后调用
-( void )didMoveToSuperview
// 当视图移动到新的 WINDOW 后调用
-( void )didMoveToWindow
// 在删除视图之后调用
-( void )willRemoveSubview:(UIView *)subview
// 当移动视图之前调用
-( void )didMoveToSuperview:(UIView *)subview
// 当视图移动到 WINDOW 之前调用
-( void )didMoveToWindow
-( void )didAddSubview:(UIView *)subview
// 当视图移动完成后调用
-( void )didMoveToSuperview
// 当视图移动到新的 WINDOW 后调用
-( void )didMoveToWindow
// 在删除视图之后调用
-( void )willRemoveSubview:(UIView *)subview
// 当移动视图之前调用
-( void )didMoveToSuperview:(UIView *)subview
// 当视图移动到 WINDOW 之前调用
-( void )didMoveToWindow
二.结构体的定义
CGRect 结构体的定义(以后自定义结构体就这样就行)
struct CGRect {
CGPoint origin;
CGSize size;
};
typedef struct CGRect CGRect;
CGPoint origin;
CGSize size;
};
typedef struct CGRect CGRect;
三.坐标之间的转化
//将String转成CGPoint 如 @”{3.0,2.5}” {x,y}
CGPoint CGPointFromString (
NSString *string
);
//将String转成CGRect @”{{3,2},{4,5}}” {{x,y},{w, h}}
CGRect CGRectFromString (
NSString *string
);
//将String转成CGSize @”{3.0,2.5}” {w, h}
CGSize CGSizeFromString (
NSString *string
);
//CGPoint转成NSString
NSString * NSStringFromCGPoint (
CGPoint point
);
//CGRect转成NSString
NSString * NSStringFromCGRect (
CGRect rect
);
//CGSize转成NSString
NSString * NSStringFromCGSize (
CGSize size
);
//对一个CGRect进行修改 以这个的中心来修改 正数表示更小(缩小) 负数表示更大(放大)
CGRect CGRectInset (
CGRect rect,
CGFloat dx,
CGFloat dy
);
//判断两个矩形是否相交
bool CGRectIntersectsRect (
CGRect rect1,
CGRect rect2
);
CGPoint CGPointFromString (
NSString *string
);
//将String转成CGRect @”{{3,2},{4,5}}” {{x,y},{w, h}}
CGRect CGRectFromString (
NSString *string
);
//将String转成CGSize @”{3.0,2.5}” {w, h}
CGSize CGSizeFromString (
NSString *string
);
//CGPoint转成NSString
NSString * NSStringFromCGPoint (
CGPoint point
);
//CGRect转成NSString
NSString * NSStringFromCGRect (
CGRect rect
);
//CGSize转成NSString
NSString * NSStringFromCGSize (
CGSize size
);
//对一个CGRect进行修改 以这个的中心来修改 正数表示更小(缩小) 负数表示更大(放大)
CGRect CGRectInset (
CGRect rect,
CGFloat dx,
CGFloat dy
);
//判断两个矩形是否相交
bool CGRectIntersectsRect (
CGRect rect1,
CGRect rect2
);
四.属性
1.//如果子视图超出父视图范围是否裁剪子视图 默认是NO
aview.clipsToBounds = YES;(父视图的属性)
2.userInteractionEnabled 是否可以进行用户交互
/*
如果可一个用户交互那么这个视图 可以接收点击,子视图也可以接收点击事件
谁在在上方谁想接受点击 最上方的会拦截
如果设置为NO 子视图和父视图都不能接受点击事件,那么这个点击就会向下层传递知道能被接受事件的控件接收 如果最后没有控件接受这个事件 事件将会被抛弃
UILabel UIIImageView userInteractionEnabled默认是NO,不可以和用户进行交互
如果button 粘贴到UILabel 和UIIImageView上 button是不能被点击
如果想要能点击button 就要把UILabel 和 UIIImageView 的userInteractionEnabled改为YES
*/
3.//获取所有子视图的数组
NSArray * subViews = redView.subviews;
/*
如果可一个用户交互那么这个视图 可以接收点击,子视图也可以接收点击事件
谁在在上方谁想接受点击 最上方的会拦截
如果设置为NO 子视图和父视图都不能接受点击事件,那么这个点击就会向下层传递知道能被接受事件的控件接收 如果最后没有控件接受这个事件 事件将会被抛弃
UILabel UIIImageView userInteractionEnabled默认是NO,不可以和用户进行交互
如果button 粘贴到UILabel 和UIIImageView上 button是不能被点击
如果想要能点击button 就要把UILabel 和 UIIImageView 的userInteractionEnabled改为YES
*/
3.//获取所有子视图的数组
NSArray * subViews = redView.subviews;
4.
获取子视图的父视图
UIView
* superView = blueView.superview;
5.判断一个视图是否是另外一个视图的子视图
[button isDescendantOfView:redView];
在指定的索引位置插入一个子视图(这个函数也会把子视图粘贴到父视图上)
如果指定的索引超出了 父视图对应的索引值 那么就会把这个子视图插在最上层
索引0 对应的就是最底
[
self
.view insertSubview:label4 atIndex:10];
6.
父视图 把指定的两个视图进行交换
[
self
.view exchangeSubviewAtIndex:0 withSubviewAtIndex:2];
7.
view.transform
1.CGAffineTransformMakeRotation 设置视图的旋转角度(这个角度相对最原始的位置)
imagebutton.transform = CGAffineTransformMakeRotation(M_PI/4);
2.CGAffineTransformRotate函数相对于当前imagebutton.transform 旋转的角度
imagebutton.transform = CGAffineTransformRotate(imagebutton.transform, M_PI/4);
CGAffineTransformMakeScale可以实现 放大 缩小 上下翻转 左右翻转
都是相对最原始的状态进行变换
CGAffineTransformMakeScale(x, y);
x 控制x 方向的大小 1 原始大小 >1 x方向放大 <1 缩小
y 控制 y方向 大小 1 原始大小 >1 y纵向放大 < 1缩小
x 是负数 表示相对于原始的位置 左右翻转 翻转180度
x 是正数 原始的位置
y 负数 相对于原始的位置 上下翻转
y 正数 就是最原始的位置
imagebutton.transform = CGAffineTransformMakeScale(-2, 2);
五.UIView的方法
UIView
*s_view = [
self
.
view
viewWithTag
:
3
];
//
父亲视图,通过
tag
来找到对应的子视图,不一定是直接视图,子视图的子视图也是可以找到的
,
就是从某个节点,遍历以下的所有节点,不一定是直接节点。
drawRect 初始化方法走完之后走的方法:
drawRect:方法的一个简单实现,即在视图边界描画一个10像素宽的红色
边界。由于UIKit 描画操作的实现也是基于Quartz,所以您可以像下面这样混合使用不同的描画调用来得到期望的结果。
- (void)drawRect:(CGRect)rect {
CGContextRef context =
UIGraphicsGetCurrentContext();
CGRect myFrame = self.bounds;
CGContextSetLineWidth(context, 10);
[[UIColor redColor] set];
UIRectFrame(myFrame);
}
处理触摸事件的视图通常需要实现下面的所有方法
touchesBegan:withEvent:
touchesMoved:withEvent:
touchesEnded:withEvent:
touchesCancelled:withEvent:
激活多点触摸事件:
multipleTouchEnabled 属性声明设置为YES。
您可以通过改变视图的
userInteractionEnabled 属性值来控制视图是否可以对事件进行处理。
还可以使用UIApplication 对象的
beginIgnoringInteractionEvents 和
endIgnoringInteractionEvents 方法
UIKit 会通过UIView 的
hitTest:withEvent:和
pointInside:withEvent:方法
来确定触摸事件是否发生在指定的视图上。
gitHub地址:https://github.com/yaoqiGetHub/YQUIViewDemo