//在IOS中,使用UIWindow类来表示窗口,通常一个程序只创建一个UIWindow
//1.创建window
// //创建一个window,并铺满全屏
_window=[[UIWindow alloc]initWithFrame:[[UIScreen mainScreen]bounds]];
//2.导入屏幕
//背景颜色
[_window setBackgroundColor:[UIColor blueColor]];
//自定义颜色
// [_window setBackgroundColor:[UIColor colorWithHue:28/255 saturation:173/255 brightness:253/255 alpha:1]];
//创建一个视图控制器
Kuangjia *kuangjia=[[Kuangjia alloc]init];
//设置window的根视图
[_window setRootViewController:kuangjia];
//绘制window(使window显示)
[_window makeKeyAndVisible];
//
//
// //创建UIView
// //创建视图
//#warning 创建空件第一步,申请内存空间并初始化
// UIView *view=[[UIView alloc]init];
//#warning 第二步,设置坐标大小
// [view setFrame:CGRectMake(0, 0, 200, 200)];
//
//#warning 第三步.设置空间属性
// view.backgroundColor=[UIColor redColor];
//
//// //更改视图位置为视图中心
//// [view setCenter:self.window.center];
//// [view setCenter:CGPointMake([UIScreen mainScreen].bounds.size.width/2, [UIScreen mainScreen].bounds.size.height/2)];
//#warning 第四步,添加子视图
// //将视图添加到window上进行显示
// [self.window addSubview:view];
//
//#warning 第五步,释放视图对象
// [view release];//MRC需释放
//
// //获取父视图
// NSLog(@"%@",view.superview);
// //获取所有子视图subviews
// NSLog(@"%@",self.window.subviews);
// //tag,相当于给视图做一个标记,可以通过父视图调用viewWithTag方法获取到视图的对象
UIView *newView=[self.window viewWithTag:1];
[newView setBackgroundColor:[UIColor magentaColor]];
//通过tag值更改颜色
UIView *view1=[[UIView alloc ]initWithFrame:CGRectMake(10, 10, 100, 100)];
view1.backgroundColor=[UIColor greenColor];
[self.window addSubview:view1];
[view1 release];
UIView *view2=[[UIView alloc]initWithFrame:CGRectMake(40, 40, 100, 100)];
[view2 setBackgroundColor:[UIColor yellowColor]];
[self.window addSubview:view2];
[view2 release];
UIView *view3=[[UIView alloc]initWithFrame:CGRectMake(70, 70, 100, 100)];
[view3 setBackgroundColor:[UIColor whiteColor]];
//在指定的位置处插入子视图(放在view1和view2间,放在第二个)
// [self.window insertSubview:view3 atIndex:2];
//在指定视图的上面添加子视图(view3放在view2的上面)
//[self.window insertSubview:view3 aboveSubview:view2];
//在指定视图的下面添加子视图(3放在2的下面)
// [self.window insertSubview:view3 belowSubview:view2];
//把指定的子视图移到最前面(坐标不变)
//[self.window bringSubviewToFront:view1];
//把指定的子视图移到最后面(坐标不变)
//[self.window sendSubviewToBack:view2];
//交换两个指定索引位置的子视图(坐标不变)
//[self.window exchangeSubviewAtIndex:1 withSubviewAtIndex:2];
//从父视图中移除某个视图
//[view2 removeFromSuperview];
//当一个视图被创建以后会根据父视图坐标系确定自己的位置大小,同时会生成一套以自己左上角为原点坐标
//bounds就是该视图在自己这套坐标系中的位置以及大小
//bounds只会影响自身子视图的位置
//frame坐标,根据父视图位置计算
// UIView *view7=[[UIView alloc]initWithFrame:CGRectMake(0, 0, 200, 200)];
// [view2 setBounds:CGRectMake(20, 20, 200, 200)];
// for (UIView *v in self.window.subviews){
// NSLog(@"VVVV=:%@",v);
// }
// [view7 setBackgroundColor:[UIColor orangeColor]];
// [view2 addSubview:view7];
//
//
// view的frame和bounds之区别(位置和大小)
一、首先列一下公认的资料:
先看到下面的代码你肯定就明白了一些:
-(CGRect)frame{
return CGRectMake(self.frame.origin.x,self.frame.origin.y,self.frame.size.width,self.frame.size.height);
}
-(CGRect)bounds{
return CGRectMake(0,0,self.frame.size.width,self.frame.size.height);
}
很明显,bounds的原点是(0,0)点(就是view本身的坐标系统,默认永远都是0,0点,除非认为setbounds),而frame的原点却是任意的(相对于父视图中的坐标位置)。
再来看张图就明白了,
frame: 该view在父view坐标系统中的位置和大小。(参照点是,父亲的坐标系统)
bounds:该view在本地坐标系统中的位置和大小。(参照点是,本地坐标系统,就相当于ViewB自己的坐标系统,以0,0点为起点)
center:该view的中心点在父view坐标系统中的位置和大小。(参照电是,父亲的坐标系统)
我个人认为,bounds稍微有点费解,稍不留神,想的多了,就会绕进去。每个view都有一个本地坐标系统。这个坐标系统作用比较重要,比如触 摸的回调函数中的UITouch里面的>坐标值都是参照这个本地坐标系统的坐标。当然bounds这个属性也是参照这个本地坐标系统来的。其实本地 坐标系统的关键就是要知道的它的原点(0,0)在什么位置(这个位置又是相对于上层的view的本地坐标系统而言的,当然最上面的一层view就是 window它的本地坐标系统原点就是屏幕的左上角了)。通过修改view的bounds属性可以修改本地坐标系统的原点位置。
所以,我个人认为,bounds影响到子view的位置和大小。
二、demo演示:
(log输出日志表明,每个新的view默认的bounds其实都是(0,0)