iOS study UI - XinliWang/iOS GitHub Wiki

##UI ###1.UIWindow XCode6以后,新建项目会出现Main.storyboard,我们在做UI界面时就可以使用拖拽的方式来构建界面。
但是,我现在在学习的时候,使用编码的方式直接在代码里构建界面,虽然不能直观的看到界面直到run了之后。但是易于多人协作代码和管理。
在AppDelegate.h 中,有UIWindow这个属性。在AppDelegate.m 中,我们会在didFinishLaunchingWithOptions()中添加我们需要的代码。

//初始化一个UIWindow,带一个frame占满主屏幕
_window = [[UIWindow alloc] initWithFrame: [UIScreen mainScreen]bounds];
//背景显示为红色
_window.backgroundColor = [UIColor redColor]; 
//使得_window成为主window
[_window makeKeyAndVisible];

###2.UIView(下面所有都会继承UIView特性) 各版本手机屏幕大小各不相同,如果需要定义一个frame的位置,则需要通过CGRectMake(x,y,width,height) 来设置坐标(坐标是根据父视图的位置来设置)和面积。
3GS, 4/4s : 3.5inch, 320480
5/5c/5s : 4.0 inch, 320
568
6: 4.7 inch, 375667
6Plus: 505inch, 414
736
状态栏:height为 20 pixel
如果记不住各种屏幕尺寸也没关系,可以通过函数来打印

[[UIScreen mainScreen] bounds].size.width   //屏宽
[[UIScreen mainScreen] bounds].size.height   //屏高

####关于frame 和 bounds
frame 和 bounds 都是 CGRect 类型

struct CGRect{
    CGPoint origin;
    CGSize size;
};
struct CGPoint{
    CGFloat x;
    CGFloat y;
};
struct CGSize{
    CGFloat width;
    CGFloat height;
};

所以通过打印当前自定义的view的frame和bounds属性可知:
frame的各个值为CGRectMake(x,y,width,height)的各个值大小;
bounds的各个值为CGRectMake(0,0,width,height), 所以bounds又被称为边框大小,x、y永远为0 ,bounds 可以用来覆盖整个父视图superview ,还有在求screen的宽高时也只能使用bound。

各视图层级不同,覆盖顺序也不相同。 还有一种是自适应,autoresizingMask,可以设置根据superview大小的改变,subview也相对改变大小和位置

###3.UILabel

UILabel *label = [[UILabel alloc] init];
//文本
label.text = @"hello world";
//文本布局模式,居中
label.textAlignment = NSTextAlignmentCenter;
//文字颜色,可以定制颜色,推荐使用sip软件来采色
label.textColor = view1.backgroundColor = [UIColor colorWithRed:<#(CGFloat)#> green:<#(CGFloat)#> blue:<#(CGFloat)#> alpha:<#(CGFloat)#>];
//字体设置,大小
label.font = [UIFont systemFontOfSize:25]
//设置换行模式,按单词换行 
label.lineBreakMode = NSLineBreakByWordWrapping;
//设置显示的行数(0或-1可以不限制行数限制)
label.numberOfLines = 10;
//可以根据字符串大小计算label大小,使得label更贴合实际情况
CGSize size = [label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(355,10000) lineBreakMode:NSLineBreakByCharWrapping];
label.frame = CGRectMake(label.frame.origin.x,label.frame.origin.y,label.frame.size.width,size.height);

[self.view addSubview:label];

###4.UIImage

//获取图片路径,图片名称1.png
NSString *path = [[NSBundle mainBundle] resourcePath];
NSString *imagePath = [NSString stringWithFormat:@"%@/1.png",path];
/**
获取图片有两种方式:1.是每次去文件中读取加载,速度慢但是不会消耗缓存 
2.是把图片缓存在内存中,需要时直接从内存中读取,速度快,但是当程序结束时才能释放资源,所以内存消耗大
*/
UIImage *image1 = [[UIImage alloc] initWithContentsOfFile:imagePath];
UIImage *image2 = [UIImage imageNamed:@"1"];

//载体:image显示一定需要一个载体
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
imageView.frame = CGRectMake(10,100,355,image.size.height);
[self.view addSubview:imageView];
//内容模式
/**
 UIViewContentModeScaleToFill 拉伸充满整个载体(默认)
*/
imageView.contentMode = UIViewContentModeCenter;