UIView总结
//UIView 是UIKit中大部分部件的直接或者间接父类
// <1>创建UIview 试图的对象
UIView *view1 = [[UIView alloc]initWithFrame:CGRectMake(30, 50, 200, 200)];
// <2>为UIView添加背景颜色
view1.backgroundColor = [UIColor redColor];
// <3>为UView添加tag
view1.tag = 1;
// <4>将UIView添加到窗口上
[self.window addSubview:view1];
// [结论1]将视图A添加到视图B上 那么试图A就是子视图 B就是父试图
UIView *view2 = [[UIView alloc]initWithFrame:CGRectMake(50, 60, 100, 200)];
view2.backgroundColor = [UIColor yellowColor];
view2.tag = 2;
[self.window addSubview:view2];
// [结论2]一个父视图可以添加多个子试图 后添加的子视图 会显示在上面多个子视图的fraom值如果有重复部分 那边多个子视图就是交叠的情况 所以不能通过视觉效果判断谁是父视图
// 子视图的父视图只有一个
UIView *superView1 = [view1 superview];
UIView *superView2 =[view2 superview];
if (superView1 == superView2) {
NSLog(@"同一个");
}else{
NSLog(@"不是同一个");
}
// <5>将一个子视图添加到另一个子视图之上
[self.window insertSubview:view3 aboveSubview:view1];
//<6>将一个子视图添加到另个子视图之下
[self.window insertSubview:view2 belowSubview:view1];
// <7>将一个子视图插入到某个索引处
// 父视图的工作原理和属组的工作原理相同 也就是第一个子视图的下标为0
[self.window insertSubview:view5 atIndex:1];
//<8>将某个子视图提到某个子视图之前
[self.window bringSubviewToFront:view4];
// <9>将某个子视图提到某个子视图之后
[self.window sendSubviewToBack:view4];
// <10>交换两个子视图在父视图的显示位置
// <11>获取父视图上得所有子视图
NSArray *subViews = [self.window subviews];
int index1 = [subViews indexOfObject:view4]; // 获取视图的索引
int index2 = [subViews indexOfObject:view2];
[self.window exchangeSubviewAtIndex:index1 withSubviewAtIndex:index2];
// <12>设置视图的透明度
// alpha [0n1]
view4.alpha = 0.5;
// <13>从父视图删除某个子视图
[view4 removeFromSuperview];
// [结论1]子视图的坐标原点的坐标是相对于父视图的坐标原点的偏移
// [结论2]所有视图的坐标原点都在左上角
NSLog(@"%@",NSStringFromCGPoint(view2.center)); //
// center获取中心点的坐标
// [结论3] 某个子视图的中心点坐标是相对于父视图原点的偏移位置
// [面试题]frame 与 bounds的区别
// frame 返回值类型CGRect 类型 frame 中有两个属性值 origin 和 size
// origin 是CGPoint类型 size是CGSize类型
NSLog(@"%@",NSStringFromCGRect(view2.frame));
NSLog(@"%@",NSStringFromCGRect(view2.bounds));
// [结论4]frame 设置视图的显示位置及大小 视图的坐标原点 坐标是相对于父视图坐标原点的偏移位置
// bounds 获取视图的坐标是相对于自身的坐标原点而言 参照物是自身 所以得到原点的坐标原点 (0 ,0);
}
// 停靠模式
//<1> 获取子视图
UIView *subView = [self.window viewWithTag:200];
// <2>开始子视图的停靠模式 视图的停靠模式 默认是关闭的
subView.autoresizesSubviews = YES;
// <3>设置停靠模式的样式
/*
UIViewAutoresizingNone = 0,
UIViewAutoresizingFlexibleLeftMargin = 1 << 0,
UIViewAutoresizingFlexibleWidth = 1 << 1,
UIViewAutoresizingFlexibleRightMargin = 1 << 2,
UIViewAutoresizingFlexibleTopMargin = 1 << 3,
UIViewAutoresizingFlexibleHeight = 1 << 4,
UIViewAutoresizingFlexibleBottomMargin = 1 << 5
*/
// 上面的停靠模式样式两两结合都会得到不同的动画效果
subView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleTopMargin;
// <4>获取父视图
UIView *superView = [self.window viewWithTag:100];
CGPoint point = superView.frame.origin;
CGSize size = superView.frame.size;
// <5>修改父视图的显示位置大小
point.x -= 5;
point.y -= 5;
size.width +=10;
size.height +=10;
// <6>对父视图从新赋值
superView.frame = CGRectMake(point.x, point.y, size.width, size.height);
}
// 有一些空间不具有添加背景图片的方法 (UILabel ,UIView)所以必须借助UIImageView添加背景图片
//<1>UIImageView不能与用户进行直接交互
UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
// <2>添加图片
imageView.image = [UIImage imageNamed:@"010.png"];
//<3>添加tag值
imageView.tag = 300;
// <4>将imageView添加到窗口上
[self.window addSubview:imageView];
// 动画
/*
1.动画持续的时间 时间以秒为单位
2.block语块 block动画主要执行代码就在这个语块内
3.block语块中动画效果执行结束以后 是否进行下一次动画 如果不进行下次动画 此处参数值 直接设为nil 如果进行下一次动画 那么此处的参数 ^(BOLL finished){}
*/
[UIView animateWithDuration:3 animations:^{
view1.frame = CGRectMake(220, 300, 100, 100);
imageView1.frame = CGRectMake(0, 0, 100, 100);
view2.frame = CGRectMake(220, 400, 80, 80);
imageView2.frame = CGRectMake(0, 0, 80, 80);
self.window.backgroundColor = [UIColor greenColor];
} completion:^(BOOL finished){
[UIView animateWithDuration:3 animations:^{
view1.frame = CGRectMake( 0, 30, 30, 30);
imageView1.frame = CGRectMake(0, 0, 30, 30);
imageView1.image = [UIImage imageNamed:@"014.png"];
view2.frame = CGRectMake(0, 100, 30, 30);
imageView2.frame = CGRectMake(0, 0, 30, 30);
imageView2.image = [UIImage imageNamed:@"013.Png"];
self.window.backgroundColor = [UIColor cyanColor];
} completion:nil];
}];
// <1>获取管理视图
UIView *backView = [self.window viewWithTag:100];
// <2>获取父视图的所有子视图
NSArray *subViewsArr = [backView subviews];
// <3>两个图片视图
UIView *view1 = [self.window viewWithTag:99];
UIView *view2 = [self.window viewWithTag:98];
//<4>获取子视图的索引值
int index1 = [subViewsArr indexOfObject:view1];
int index2 = [subViewsArr indexOfObject:view2];
//<5>交换两个子视图的位置
[backView exchangeSubviewAtIndex:index1 withSubviewAtIndex:index2];
//<6>开始UIView视图的动画效果
// 第一参数是为协议中得某个方法传递的内容 目前不需要调用协议中得方法 所以此处是无效值
// 第二个参数是上下文
[UIView beginAnimations:@"hello" context:nil];
//<7>设置动画效果的持续时间
[UIView setAnimationDuration:1];
//<8>设置动画的路线
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
//<9>判断点击的是那个按钮
UIButton *btn = (UIButton *)sender;
/*
UIViewAnimationTransitionFlipFromLeft,
UIViewAnimationTransitionFlipFromRight,
UIViewAnimationTransitionCurlUp,
UIViewAnimationTransitionCurlDown,
*/
if (btn.tag == 200) {
// 使用父视图管理上面两个视图的动画效果
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:backView cache:YES];
}
if (btn.tag == 300) {
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:backView cache:YES];
}
if (btn.tag == 400) {
[UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:backView cache:YES];
}
if (btn.tag == 500) {
[UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:backView cache:YES];
}
//<10>关闭动画
[UIView commitAnimations];
}
-(void)createUIIImagerView
{
// <1>创建UIImageView视图
// 设置图片的大小和窗口相同
UIImageView *imageView = [[UIImageView alloc]initWithFrame:[[UIScreen mainScreen] bounds]];
// imageView.image = [UIImage imageNamed:@"cat_drink0000.jpg"];
//[面试题]imageNamed:添加图片的弊端
/*
imageNamed:添加图片信息 会将图片信息直接存放在活跃缓存取 由于活跃内存的大小是有限的 所以如果工程中存在大量的图片或者图片的像素比较高要将这些图片的UI显示在UI上可以一定要使用下面的方法;
// 该方法向UI上添加图片编译器会直接取当前工程中查找 然后添加到UI上 不会存放在活跃内存中
*/
//<2>根据路径取查找图片
// [NSBundle mainBundle] 获取当前路径
// pathForResource:第一参数添加资源的名称 (资源的名称不能添加后缀)
// 第二个参数添加资源的类型 (类型不带有.)
NSString *path = [[NSBundle mainBundle]pathForResource:@"cat_drink0000" ofType:@"jpg"];
//<3>将路径转换成UIImage
UIImage *image = [UIImage imageWithContentsOfFile:path];
//<4>将UIImage添加到UIImageView上
imageView.image = image;
[self.window addSubview:imageView];
// <5>在UIImageView上添加一组图片
// 定义个数字来存放一组图片
NSMutableArray *imagesArr = [[NSMutableArray alloc]init];
for (int i = 1; i < 81; i ++) {
NSString *imagePath = [[NSBundle mainBundle]pathForResource:[NSString stringWithFormat:@"cat_drink00%.2d",i] ofType:@"jpg"];
UIImage *imageNew = [UIImage imageWithContentsOfFile:imagePath];
// 将图片都放到数组里面
[imagesArr addObject:imageNew];
}
// <6>为imageView添加动画效果
// 将一组图片添加到UIimageView上 参与动画
[imageView setAnimationImages:imagesArr];
// <7>设置动画的持续时间
[imageView setAnimationDuration:3];
//<8>设置动画的重复次数
// 如果让动画无限次循环下去 下面的参数位置可以写0 或者 负数-1
[imageView setAnimationRepeatCount:-1];
// <9>开始动画
[imageView startAnimating];
//<9>点击UIImageView停止动画
// 【重点】如果对UIImageView进行操作 必须开启用户的交换权限
imageView.userInteractionEnabled = YES;
// <10>图片视图视图的点击事件 必须借助与手势
// 轻击手势
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapAction:)];
// <12>设置轻击屏幕的次数
tap.numberOfTapsRequired = 1;
// <13>设置轻击屏幕的手指根数
tap.numberOfTouchesRequired = 2;
// <14>将手势添加到UIImageView上
[imageView addGestureRecognizer:tap];
}
-(void)tapAction:(UITapGestureRecognizer *)tap
{
//<1>获取手势点击的视图
UIImageView *imageView = (UIImageView *)tap.view;
static BOOL isStart = YES;
if (isStart) {
//<2>停止动画
[imageView stopAnimating];
isStart = NO;
}else{
[imageView startAnimating];
isStart = YES;
}
}