【Objective-C学习记录】第六天
今天学习了UI部分的内容,有点多,好好整理下。
首先是UIWindow。
直接实例化UIView:UIView *view = [[UIView alloc] init];
然后对其进行大小设置:view.frame = CGRectMake(10,30,355,627);学过HTML或者界面方面的都了解这个Rect,顾名思义就是一个矩形Rect(x,y,width,height)。x表示矩形的横坐标,y表示矩形的纵坐标,width表示矩形的宽,height表示矩形的高,有了这四个参数,我们就能在iPhone上确定一块窗口了。我们在生活中坐标轴一般是左下角开始,向右x轴递增,向上y轴递增,而计算机屏幕是从左上角开始计算的,即向右x轴递增,向下y轴递增。在这里这块矩形的大小,在iPhone6上距离屏幕边缘四周10px,至于y轴方向为什么偏移30px,是因为iOS的通知栏占了20px,并且通知栏的优先级非常高。
现在我们在模拟器上还是看不到任何东西,是因为我们只实例化了这个窗口,还没有设置它的颜色:view.backgroundColor = [UIColor yellowColor];
最后将这个窗口添加为整个窗体的子类即可:[self.view addSubView:view];
接下来是一些需要记忆的属性/参数:
frame
view.frame.origin.x - view距离屏幕x的偏移,上图为10px
view.frame.origin.y - view距离屏幕y的偏移,上图为30px
view.frame.size.width - view的宽
view.frame.size.height - view的高
bounds
(view.bounds.origin.x, view.bounds.origin.y, view.bounds.size.width, view.bounds.size.height)
bounds表示view边框的大小,其x和y始终为0,width、height与frame的相等,在某种程度上frame可以代替bounds使用。
center
(view.center.x,view.center.y) - 屏幕中心点
获取屏幕分辨率UIScreen:
[[UIScreen mainScreen]bounds].size.width
[[UIScreen mainScreen]bounds].size.height
窗体也有子父的概念,子视图会被嵌套在父视图中,类似于HTML里的<div><div></div></div>,其中一个子视图的父视图只能有一个,子视图可以有多个。视图的层级关系具体总结为:1.在同一个父视图中时,先加入的view会被覆盖在下面;2.子视图根据父视图进行遮挡,如果父视图层级低于其他同级视图,那么该父视图的子视图也会被遮挡。
首先是给一个视图指定它的父视图:UIView *superView = view.superView;
或者通过另一种方式为父视图添加它的子视图:[superView addSubView:view2];[superView addSubView:view3];
接着我们可以对该父视图进行遍历,这里使用枚举遍历:
NSArray *subViewsArray = superView.subViews;
for(UIView *view in subViewsArray)
//TODO
另外可以给视图设置标签,这样我们就可以通过标签来查找这个视图,这个tag跟Unity里的tag有点类似:view.tag = 1;根据tag获取视图:UIView *view = [superView viewWithTag:1];
交换视图。
规则:1.交换两个层的视图时,必须填写正确的层数;2.交换两个层后,对应的子视图的数组下标也会改变。
[superView exchangeSubViewAtIndex:0 withSubViewAtIndex:1];如果层级不存在,交换是无效的。
插入视图到指定的层:
[superView insertSubView:view belowSubview:view2];
将一个视图放入最高层/最底层
[superView bringSubViewToFront:view];
[superView sendSubViewToBack:view];
接下来是自适应的内容:
首先要设置准许视图自适应:view.autoresizesSubViews = YES;
接着就可以设置自适应的方式:view.autoresizingMask = UIViewAutoresizingFlexibleWidth;这里有几个选项:UIViewAutoresizingFlexibleHeight不一一列举,简单来说就是左右上下宽高的自适应。
其次是UILabel。
label与view类似,首先实例化:UILabel *label = [[UILabel alloc] init];
设置大小:label.fram = CGRectMake(10,100,350,300);
设置颜色:label.backgroundColor = [UIColor blueColor];
设置内容:label.text = @"Hello iOS";
布局模式:label.textAlignment = NSTextAlignmentCenter;
文字颜色(两种方式):1.label.textColor = [UIColor greenColor];其中有一个特殊的clearColor表示透明色
2.label.textColor = [UIColor colorWithRed:0.1 green:0.8 blue:0.2 alpha:1];即通过RPGA来设置颜色
字体设置:label.font = [UIFont systemFontOfSize:25];25是字体大小
label.font = [UIFont boldSystemFontOfSize:25];
label.font = [UIFont italicsSystemFontOfSize:25];
并且可以查看系统内所有的字体:
for(NSString *name in [UIFont familyNames])
NSLog(@"%@",name);
label.font = [UIFont fontWithName: @"Apple Color Emoji" size:25];
字体阴影:label.shadowColor = [UIColor redColor];
label.shadowOffset = CGSizeMake(5,5);
换行模式:label.lineBreakMode = NSLineBreakByCharWrapping;根据字符换行
label.numberOfLines = 10;设置显示的行数
根据字符串大小计算label大小:
CGSize size = [label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(355,1000) lineBreakMode]:NSLineBreakByCharWrapping];
最后是UIImage。
这里使用读取本地图片的方式加载图片。
首先需要设置图片的路径,因为图片放在了本工程的目录下,所以我们需要先获取这个工程的路径:NSString *path = [[NSBundle mainBundle] resourcePath];
然后设置图片路径:NSString *imagePath = [NSString stringWithFormat:@"%@/bg.png",path];
根据路径读取图片:UIImage *image = [[UIImage alloc] initWithContentsOfFile:imagePath];
在读取了图片后还不能显示,需要通过一个载体来加载图片,所以需要实例化一个图片对象:UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
最后设置一下大小,同时也能设置背景色:imageView.frame = CGRectMake(10,100,300,300);
imageView.backgroundColor = [UIColor yellowColor];
内容格式:imageView.contentMode = UIViewContentModeScaleToFill;//拉伸充满整个载体
imageView.contentMode = UIViewContentModeScaleAspectFill;//拉伸不改变比例,充满较长的一边
imageView.contentMode = UIViewContentModeScaleAspectFit;//拉伸不改变比例,充满较短的一边
播放序列帧动画:
帧动画是2D游戏里常见的一种游戏动画形式,原理就是我们小时候看到过的翻页动画,通过不断的替换显示的图片,造成视觉上的动态效果。首先准备好一组帧动画的图片,张数为count,命名为"png$.png"导入到工程目录下。
接着用一个数组来存储这些图片:NSMutableArray *imageArray = [[NSMutableArray alloc] init];
for(int i = 1;i <= count;i++)
{
UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"png%d.png",i]];
[imageArray addObject:image];
}
然后通过一个图片载体来播放:UIImageView *imageView = [[UIImageView alloc] init];
设置大小:imageView.frame = CGRectMake(10,10,300,300);
添加到父视图中:[self.view addSubView:imageView];
同样可以设置背景颜色:imageView.backgroundColor = [UIColor yelloColor];
接下来是比较重要的设置:1.指定要播放的序列动画图片:imageView.animationImages = imageArray;
2.设置播放的时间长度:imageView.animationDuration = 3;
3.设置播放的次数:imageView.animationRepeatCount = 5;