一. 使用Xcode创建一个文件
file -> new -> Project -> iOS Application -> Empty Application
2.为了手动分配内存, 需要将该项更改为NO.
3. 在AppDelegate.m中, 定义属性, 因为属性是全局性的, 可以该文件中的任意方法中使用, 如果只在某方法中定义变量, 那么该变量为局部变量, 只能在本方法内使用.
4. iPhone的各个型号的屏幕尺寸:
/********************** 当前iPhone的屏幕尺寸 ********************/
//4, 4s(3.5寸屏幕): 320 * 480 px(像素)
//5, 5c, 5s(4寸屏幕): 320 * 568 px
//6, 6s(4.7寸屏幕): 375 * 667 px
//6plus, 6s plus(5.5寸屏幕): 414 * 736 px
//px (像素) 是相对单位, pt是绝对单位
/*
4s之前: 1px = 1pt;
4s ~ 6s: 1px = 2pt;
6plus, 6splus: 1px = 3pt;
*/
5.
#warning 注意: 通常一个应用程序只有一个window
//创建背景颜色.
self.window.backgroundColor = [UIColor orangeColor];
6.
创建一个UIView对象:
UIView *blueView = [[UIView alloc] initWithFrame:CGRectMake(280, 480, 90, 100)];
/*
frame代表框架, 设置该视图的位置和大小.
第一个参数: (280) 表示和原点水平方向的距离
第二个参数: (480) 表示和原点竖直方向的距离
第三个参数: (90) 表示该视图的宽
第四个参数: (100) 表示该视图的高
CGRect是一个结构体, 结构体中包括CGOrigin和CGSize. CGPoint也是一个结构体, 包括blueView.frame.origin.x, (即和原点的水平方向距离)和frame.origin.y(和原点竖直方向的距离). CGSize也是一个结构体, 包括frame.size.width(该视图的宽)和frame.size.height(该视图的高).
7.
self.secondView = [[UIView alloc]initWithFrame:CGRectMake(100, 200, 200, 200)];
center.x = frame.origin.x + frame.size.width / 2
center.y = frame.origin.y + frame.size.height / 2
#warning Center影响view的位置 (也就是frame.origin, 对view尺寸(frame.size) 没有影响)
secondView.center = CGPointMake(100, 100);
center表示该视图的中心位置, 改变center, 即改变该视图的位置
8.
self.secondView.backgroundColor = [UIColor blackColor];
[window addSubview:self.secondView];
改变视图的颜色用该视图对象调用 backgroundColor 方法, 具体颜色是UIColor类中的类方法.
将该视图添加到视图中 用父视图调用addSubview: 实现
9.bounds: 改变当前视图的坐标原点位置和宽高
理解是: 因为视图的位置只和父视图有关, 子视图设定的x 和 y 是相对于父视图的原点而言的. 改变当前视图的坐标原点目的是为了改变它的子视图的位置. 如果没设定bounds前, 其子视图是根据父视图的左上角原点进行放置的, 那么当把父视图用bounds更改原点位置后, 其实就是将其子视图移动了相应的x 和 y.
另外需要注意的是: 第一个参数 100 是将父视图的原点水平向左移动100 ; 第二个参数 100 是将原点竖直向上移动100
一般最后两个参数不作更改, 只设置前两个参数, 所以后两个参数如下代码所示.
secondView.bounds = CGRectMake(100, 100, secondView.frame.size.width,
secondView.frame.size.height);
#warning 注意: bounds对自身显示没有影响, 影响的是子视图的位置. bounds是将当前视图自身坐标系原点移动 (如果x, y为正数, 则向外移动. 反之向内移动).
secondView.bounds = CGRectMake(-50, -50, secondView.frame.size.width, secondView.frame.size.height);
10.
#warning 特别注意: frame的坐标相对于父视图而言
11.
#warning 将子视图插入到父视图的子视图数组中指定的位置.
[self.secondView insertSubview:threeView atIndex:0];
#pragma 将子视图添加到父视图(secondView)上, 并且插入到当前父视图的某一个子视图(firstview)上边. (后两个视图都是添加到第一个视图上得, 只不过改变他们的层级关系)
[视图3(父视图) insertSubview: 视图1 aboveSubview: 视图2]
//将视图1 添加到视图2 上面(如果有重叠, 视图2被覆盖) 视图1和视图2的父视图都是视图3
[secondView insertSubview:threeView aboveSubview:firstView];
13.
#pragma 将子视图添加到父视图(secondView)上, 并且插入到当前父视图的某一个子视图(firstview)下边. (后两个视图都是添加到第一个视图上得, 只不过改变他们的层级关系)
[视图3(父视图) insertSubview: 视图1 belowSubview: 视图2]
//将视图1 添加到视图2 上面(如果有重叠, 视图1被覆盖) 视图1和视图2的父视图都是视图3
[self.secondView insertSubview:threeView belowSubview:firstView];
14.
//把指定视图移到父视图的最上面 (bringSubviewToFront)
//由父类调用 bringSubviewToFront方法
[self.secondView bringSubviewToFront:firstView];
//把指定视图移到父视图的最下面 (sendSubviewToBack)
[self.secondView sendSubviewToBack:firstView];
//交换两个指定下标的子视图(在指定父视图上改变, 子视图移动, 子视图的子视图也一起移动)
//(exchangeSubviewAtIndex:下标1 withSubviewAtIndex:下标2)
//父视图中的子视图排列是一个数组, 改变子视图位置, 通过下标
[self.secondView exchangeSubviewAtIndex:0 withSubviewAtIndex:1];
//删除父视图中的某个子视图 (removeFromSuperview)
//[threeView removeFromSuperview];
#warning 注意: 改变子视图层级的方法, 只针对当前一个父视图.
15.
//控制当前视图是否隐藏 属性名: hidden (默认为NO)
//如果当前视图上面有子视图, 子视图和当前视图一起隐藏. (子视图的属性值没有变, 只是父视图对子视图产生影响)
threeView.hidden = YES;
16.
//控制当前视图的不透明度(取值范围: 0 ~ 1, 默认为1, 1为完全不透明)
//secondView.alpha = 0.5;
firstView.alpha = 0.5;
//获取当前视图的父视图 (一个视图除了window以外一定存在父视图, 可以没有子视图)
NSLog(@"%@", threeView.superview);
//获取当前视图的所有子视图 (返回数组, 视图通过数组管理子视图, 先添加的子视图, 在数组的前面, 显示在最下面, 以此类推)
//NSLog(@"%@", secondView.subviews);
for (UIView *view in self.secondView.subviews) {
NSLog(@"%@", view);
}
#pragma mark Tag值: 给一个视图添加标识(相当于身份证号, 唯一), 默认值为0, 通常通过设置tag值可以起到意想不到的效果;
threeView.tag = 100;
#pragma mark 通过tag值找到当前视图的指定子视图, 方法[superView:viewWithTag: ]
//通过tag值, 改变视图的颜色
[self changeThreeViewColor];
//通过tag值访问视图( 由父视图调用viewWithTag: ,需要把父视图设置成属性, window是属性)
-(void)changeThreeViewColor
{
[self.secondView viewWithTag:100].backgroundColor = [UIColor purpleColor];
}
(其他的属性..)
//设置定时器
@property(nonatomic, retain) NSTimer *timer;
//0.5 = 5s selector: 方法名(每5s调用该方法) repeats:是否重复
self.timer = [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(changeThreeViewColor) userInfo:nil repeats:YES];
//将定义的所有属性都释放一下
[_redView release];
[_threeView release];
[_firstView release];
//初始化方法, dealloc, release里使用_属性, 不使用self.属性
[_secondView release];
//是window成为当前应用程序的主窗口, 并且可见 (很重要), 否则所有的视图都不会在窗口显示出来
[self.window makeKeyAndVisible];