【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;

posted @ 2015-12-07 22:11  Shvier  阅读(187)  评论(0编辑  收藏  举报