UI note1
Xcode创建的UI工程,有一对AppDelegate.h和AppDelegate.m是一个代理的实现。
.m⾥里的很多⽅方法,都是通过实现<UIApplicationDelegate>代理而
生成的⽅法。
.h⾥里只有⼀个属性
@property (strong, nonatomic) UIWindow *window;//这个属性是ARC下
的声明,用了strong,strong相当于retain
@property (retain, nonatomic) UIWindow *window;// 这个属性是MRC
下的声明,用了retain。
2、UIWindow(形象化如画板)
window
相当于⼀个画板,要想展现自⼰想要的图像或者图形,需要把画的东西画在window这个画板上。
window继承于UIView,在UI中,所有的能看得到的东西,都是继承于UIView。就是MVC中的V 就是视图
在iOS中,通常用UIWindow来表⽰示窗口,每个app都要把要展现的东西都写在UIWindow上。
通常,(iPhone)⼀个App只创建一个UIWindow对象。iPad有分屏功能
创建UIWindow对象
解释:
1、initWithFrame:[[UIScreen mainScreen] bounds],初始化window,使这个window跟屏幕⼀样⼤⼩。
2、backgroundColor,设置背景色
3、makeKeyAndVisible,把window设置成可显⽰的。
4、UIView(视图)
任何在屏幕上显示的图形,都是矩形,只是都做了处理。因为,所有在iOS⾥能看到的,都是UIView或UIView的子类。
// 创建window对象,初始化时设置window的位置和⼤⼩与屏幕相同。
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// 给window设置背景颜色
self.window.backgroundColor = [UIColor whiteColor];
// 把window设置为可显示
[self.window makeKeyAndVisible];
创建UIView
1、CGRectMake,是⼀个返回值为结构体的CGRect,有4个参数的⽅法,用来确定我们所创建的视图的位置和⼤⼩。
2、CGRect是一个结构体,有两个成员变量: CGPoint CGSize
这两个成员变量都是结构体,每个成员变量⾥都分别有两个成员变量,都是CGFloat类型的。 x y width height
3、CGPoint的两个成员变量是用来确定我们创建视图的位置。(x, y)
4、CGSize的两个成员变量是⽤来确定我们的创建的视图的⼤⼩,一个为宽,一个为高。width height
5、起始位置:从屏幕的最左上⾓为(0,0)点,往下为正Y轴,右为正X轴。
6、addSubview 把我们创建的视图,添加到window中,这样,才能使我们的视图可见。
frame
frame其实也是一个结构体,是结构体CGRect的一个变量
// 创建View
// 1.创建对象
UIView *view = [[UIView alloc]initWithFrame:CGRectMake(100, 122, 100, 100)];
// 2.设置view属性(颜⾊就是属性之⼀)
// 设置背景颜⾊
view.backgroundColor = [UIColor yellowColor];
// 3.添加视图
// view的父视图是window
// window 的子视图是view
// 添加视图时,系统对视图进⾏retain。我们把这个retain叫做持有。(window持有)
[self.window addSubview:view];
// 4.释放
[view1 release];
view1 = nil;
// frame ,其实就是⼀个结构体,有两个成员变量,均为结构体,两个成员变量里分别有两个成员变量, 都是CGFloatt类型的。
// 根据⽗视图来的。
UIView *view4 = [[UIView alloc]init];
view4.frame = CGRectMake(220, 20, 100, 50);
view4.backgroundColor = [UIColor greenColor];
[self.window addSubview:view4];
[view4 release];
view4 = nil;
bounds
在每添加一个view的时候,每个view分别以自⼰的起点为(0,0)点,创建一个坐标系
这个bounds就是一个结构体,⽤来确定view的新坐标。
frame与bounds的区别:
frame与bounds都是结构体,都是⽤来确定位置和⼤小的;
frame的位置是从屏幕的最左上⾓开始算的;
bounds是从新添加的view的最左上角的点开始算。