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

  • 相关阅读:
    架构设计
    第七章
    第六章
    第五章
    第四章
    第三章
    第二章
    第一章
    链表中环
    实现链表中的部分翻转
  • 原文地址:https://www.cnblogs.com/shvier/p/5027662.html
Copyright © 2020-2023  润新知