zoukankan      html  css  js  c++  java
  • 【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;

  • 相关阅读:
    A Simple Problem with Integers poj 3468 多树状数组解决区间修改问题。
    Fliptile 开关问题 poj 3279
    Face The Right Way 一道不错的尺取法和标记法题目。 poj 3276
    Aggressive cows 二分不仅仅是查找
    Cable master(二分题 注意精度)
    B. Pasha and String
    Intervals poj 1201 差分约束系统
    UITextField的快速基本使用代码块
    将UIImage转换成圆形图片image
    color转成image对象
  • 原文地址:https://www.cnblogs.com/shvier/p/5027662.html
Copyright © 2011-2022 走看看