博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS - UILabel
阅读量:6115 次
发布时间:2019-06-21

本文共 10345 字,大约阅读时间需要 34 分钟。

前言

NS_CLASS_AVAILABLE_IOS(2_0) @interface UILabel : UIView 
@available(iOS 2.0, *) public class UILabel : UIView, NSCoding
  • 实际上 label 就是一个可以显示文字的视图控件。

1、Label 的创建

  • Objective-C

    // 实例化 label 对象    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10, 40, 100, 25)];    // 将 label 加到 window 上显示出来    [self.view addSubview:label];
  • Swift

    // 实例化 label 对象    let label:UILabel = UILabel(frame: CGRectMake(10, 40, 100, 25))    // 将 label 加到 window 上显示出来    self.view.addSubview(label)

2、Label 的设置

  • Objective-C

    // 背景颜色    label.backgroundColor = [UIColor redColor];    // label 文字    label.text = @"LabelLabelLabelLabelLabelLabelLabelLabelLabelLabel";    // label 变属性文字    label.attributedText = mutableAttributedString;    // 设置字体        // 系统样式        label.font = [UIFont systemFontOfSize:30];        // 加粗        label.font = [UIFont boldSystemFontOfSize:30];        // 倾斜        label.font = [UIFont italicSystemFontOfSize:30];        // 设置为指定字体类型的文字        label.font = [UIFont fontWithName:@"Zapfino" size:15];    // 获取系统字体库中的所有字体名称    NSArray *fontNameArray = [UIFont familyNames];    // 文字颜色    label.textColor = [UIColor blackColor];    // 文字对齐方式    label.textAlignment = NSTextAlignmentCenter;    // 文字阴影    /*        shadowColor:阴影颜色,shadowOffset:阴影偏移量    */    label.shadowColor = [UIColor greenColor];    label.shadowOffset = CGSizeMake(5, 5);    // 文字换行方式    /*        // 以单词为单位换行(最后一行显示不完以单词截断剩下的内容不显示也不会省略(没有...))        NSLineBreakByWordWrapping = 0,     // Wrap at word boundaries, default        // 以字符为单位换行(最后一行显示不完以字符截断剩下的内容不显示也不会省略(没有...))        NSLineBreakByCharWrapping,         // Wrap at character boundaries        // 以单词为单位换行(最后一行显示不完以字符截断剩下的内容不显示也不会省略(没有...))        NSLineBreakByClipping,             // Simply clip        // 以单词换行,最后一行以字符截断,最后一行显示不完则省略最后一行的开头,以”...”显示        NSLineBreakByTruncatingHead,       // Truncate at head of line: "...wxyz"        // 以单词换行,最后一行以字符截断,最后一行显示不完则省略最后一行的中间,以”...”显示        NSLineBreakByTruncatingTail,       // Truncate at tail of line: "abcd..."        // 以单词换行,最后一行以字符截断,最后一行显示不完则省略最后一行的最后,以”...”显示        NSLineBreakByTruncatingMiddle      // Truncate middle of line:  "ab...yz"    */    label.lineBreakMode = NSLineBreakByWordWrapping;    // 文字行数    /*        设置文字行数,0: 默认,行数不限    */    label.numberOfLines = 0;    // 文字自动调整    label.adjustsFontSizeToFitWidth = YES;    // 文字自适应 frame    /*        frame 自适配文字,宽度不变,必须要在添加了显示文字之后设置    */    [label sizeToFit];    // 设置 label 每一行文字的最大宽度    /*         在自动计算 label 高度时,为了保证计算出来的数值 跟 真正显示出来的效果 一致,若自动换行必须设置    */    label.preferredMaxLayoutWidth = [UIScreen mainScreen].bounds.size.width - 20;
  • Swift

    // 背景颜色    label.backgroundColor = UIColor.redColor()    // label 文字    label.text = "LabelLabelLabelLabelLabelLabelLabelLabelLabelLabel"    // label 变属性文字    label.attributedText = mutableAttributedString    // 设置字体        // 系统样式        label.font = UIFont.systemFontOfSize(30)        // 设置字体  加粗        label.font = UIFont.boldSystemFontOfSize(30)        // 设置字体  倾斜        label.font = UIFont.italicSystemFontOfSize(30)        // 设置为指定字体类型的文字        label.font = UIFont(name: "Zapfino", size: 15)    // 获取系统字体库中的所有字体名称    let fontNameArray:NSArray = UIFont.familyNames()    // 文字颜色    label.textColor = UIColor.blackColor()    // 文字对齐方式    label.textAlignment = NSTextAlignment.Center    // 文字阴影    /*        shadowColor:阴影颜色,shadowOffset:阴影偏移量    */    label.shadowColor = UIColor.greenColor()    label.shadowOffset = CGSizeMake(5, 5)    // 文字换行方式    /*        // 以单词为单位换行(最后一行显示不完以单词截断剩下的内容不显示也不会省略(没有...))        case ByWordWrapping        // 以字符为单位换行(最后一行显示不完以字符截断剩下的内容不显示也不会省略(没有...))        case ByCharWrapping        // 以单词为单位换行(最后一行显示不完以字符截断剩下的内容不显示也不会省略(没有...))        case ByClipping        // 以单词换行,最后一行以字符截断,最后一行显示不完则省略最后一行的开头,以”...”显示        case ByTruncatingHead        // 以单词换行,最后一行以字符截断,最后一行显示不完则省略最后一行的中间,以”...”显示        case ByTruncatingTail        // 以单词换行,最后一行以字符截断,最后一行显示不完则省略最后一行的最后,以”...”显示        case ByTruncatingMiddle    */    label.lineBreakMode = .ByWordWrapping    // 文字行数    /*        设置文字行数,0: 默认,行数不限    */    label.numberOfLines = 0    // 文字自动调整    label.adjustsFontSizeToFitWidth = true    // 文字自适应 frame    /*        frame 自适配文字,宽度不变,必须要在添加了显示文字之后设置    */    label.sizeToFit()    // 设置 label 每一行文字的最大宽度    /*         在自动计算 label 高度时,为了保证计算出来的数值 跟 真正显示出来的效果 一致,若自动换行必须设置    */    label.preferredMaxLayoutWidth = UIScreen.mainScreen().bounds.size.width - 20

3、可变属性 Label 的创建

  • Objective-C

    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10, 50, 100, 30)];    label.backgroundColor = [UIColor grayColor];    [self.view addSubview:label];    NSString *str1 = @"NSMutable";    NSString *str2 = @"Attributed";    NSString *str3 = @"String";    // 设置 range 的大小    NSRange range1 = NSMakeRange(0, str1.length);    NSRange range2 = NSMakeRange(str1.length, str2.length);    NSRange range3 = NSMakeRange(str1.length + str2.length, str3.length);    // 实例化可变属性的字符串对象    NSMutableAttributedString *str = [[NSMutableAttributedString alloc]                               initWithString:[NSString stringWithFormat:@"%@%@%@", str1, str2, str3]];    // 设置文字的颜色和文字的大小    [str addAttributes:@{NSForegroundColorAttributeName:[UIColor blueColor],                                     NSFontAttributeName:[UIFont boldSystemFontOfSize:15]}                  range:range1];    [str addAttributes:@{NSForegroundColorAttributeName:[UIColor brownColor],                                     NSFontAttributeName:[UIFont systemFontOfSize:40]}                  range:range2];    [str addAttributes:@{NSForegroundColorAttributeName:[UIColor greenColor],                                     NSFontAttributeName:[UIFont italicSystemFontOfSize:25]}                  range:range3];    // 向 label 中添加文字    label.attributedText = str;    // frame 自适配文字,必须放在最后边,否则会不显示任何内容    [label sizeToFit];
  • Swift

    let label:UILabel = UILabel(frame: CGRectMake(10, 50, 100, 30))    label.backgroundColor = UIColor.grayColor()    self.view.addSubview(label)    let str1:NSString = "NSMutable"    let str2:NSString = "Attributed"    let str3:NSString = "String"    // 设置 range 的大小    let range1:NSRange = NSMakeRange(0, str1.length)    let range2:NSRange = NSMakeRange(str1.length, str2.length)    let range3:NSRange = NSMakeRange(str1.length + str2.length, str3.length)    // 实例化可变属性的字符串对象    let str:NSMutableAttributedString = NSMutableAttributedString(string:                                                            String(format: "%@%@%@", str1, str2, str3))    // 设置文字的颜色和文字的大小    str.addAttributes([NSForegroundColorAttributeName:UIColor.blueColor(),                                   NSFontAttributeName:UIFont.boldSystemFontOfSize(15)],                 range: range1)    str.addAttributes([NSForegroundColorAttributeName:UIColor.brownColor(),                                   NSFontAttributeName:UIFont.systemFontOfSize(40)],                 range: range2)    str.addAttributes([NSForegroundColorAttributeName:UIColor.greenColor(),                                   NSFontAttributeName:UIFont.italicSystemFontOfSize(25)],                 range: range3)    // 向 label 中添加文字    label.attributedText = str    // frame 自适配文字,必须放在最后边,否则会不显示任何内容    label.sizeToFit()

4、Storyboard 中设置

  • 在 Storyboard 场景中设置

    • Label 设置

      Label1

      Text                          |  文字类型和显示的文字

      --------------------------------|---------------------

      Color | 文字颜色
      Font | 文字字体
      Alignment | 文字对齐方式
      Lines | 行数
      Behavior |
      -- Enable |
      -- Highlighted |
      |
      Baseline |
      Line Breaks | 断行方式
      |
      Autoshrink |
      -- Tighten Letter Spacing |
      |
      Highlighted | 高亮颜色
      Shadow | 阴影颜色
      Shadow Offset | 阴影偏移量

5、HUD

  • 其他说法:指示器、遮盖、蒙板

  • UILabel 半透明 HUD 的做法:
    • 背景色设置为半透明颜色,文字颜色透明度不变。

      • 1> Storyboard 中设置背景半透明颜色

        UILabel2

      • 2> 纯代码中设置背景半透明颜色

        • Objective-C

          // 设置背景颜色为半透明    self.labelHUD.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5];
  • 显示 HUD

    • Objective-C

      // 设置显示的提示文字    self.labelHUD.text = @"数据加载完毕";    // 显示 HUD    self.labelHUD.alpha = 1.0;
  • 隐藏 HUD

    • Objective-C

      • 直接隐藏

        // 隐藏 HUD    self.labelHUD.alpha = 0.0;
      • 逐渐隐藏

        // 在 1 秒中内隐藏    [UIView animateWithDuration:1 animations:^{        self.labelHUD.alpha = 0.0;    }];

6、数字动态变化

  • 具体实现代码见 GitHub 源码

  • 具体讲解见

  • 效果

    Label3

    Label4

    Label5

7、跑马灯

7.1 简单实现

  • Objective-C

    UIView *backView = [[UIView alloc] initWithFrame:CGRectMake(10, 30, [[UIScreen mainScreen] bounds].size.width - 20, 50)];    backView.backgroundColor = [UIColor grayColor];    [self.view addSubview:backView];    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 10, 120, 30)];    label.backgroundColor = [UIColor yellowColor];    label.textColor = [UIColor greenColor];    label.text = @"Label Marquee";    [backView addSubview:label];    // 子视图的范围不允许超过父视图的范围    backView.clipsToBounds = YES;    // 开始动画播放        // 设置 label 的起始位置        CGRect frame = label.frame;        frame.origin.x = backView.frame.size.width;        label.frame = frame;        // 开始简单动画        [UIView beginAnimations:nil context:nil];        // 设置动画时间(开始播放动画)        [UIView setAnimationDuration:5];        // 匀速        [UIView setAnimationCurve:UIViewAnimationCurveLinear];        // 无限重复        [UIView setAnimationRepeatCount:CGFLOAT_MAX];        // 设置 label 的结束位置        frame.origin.x = -frame.size.width;        label.frame = frame;        // 结束动画        [UIView commitAnimations];    // 一次播放动画结束
  • Swift

    let backView:UIView = UIView(frame: CGRectMake(10, 30, UIScreen.mainScreen().bounds.size.width - 20, 50))    backView.backgroundColor = UIColor.grayColor()    self.view.addSubview(backView)    let label:UILabel = UILabel(frame: CGRectMake(0, 10, 120, 30))    label.textColor = UIColor.greenColor()    label.text = "Label Marquee"    backView.addSubview(label)    // 子视图的范围不允许超过父视图的范围    backView.clipsToBounds = true    // 开始动画播放        // 设置 label 的起始位置        var frame:CGRect = label.frame        frame.origin.x = backView.frame.size.width        label.frame = frame        // 开始简单动画        UIView.beginAnimations(nil, context: nil)        // 设置动画时间(开始播放动画)        UIView.setAnimationDuration(5)        // 匀速        UIView.setAnimationCurve(UIViewAnimationCurve.Linear)        // 无限重复        UIView.setAnimationRepeatCount(9999999)        // 设置 label 的结束位置        frame.origin.x = -frame.size.width        label.frame = frame        // 结束动画        UIView.commitAnimations()    // 一次播放动画结束

7.2 跑马灯实现封装

  • 具体实现代码见 GitHub 源码

  • 具体讲解见

  • 效果

    Label6Label7

    Label8Label9

    Label10Label11

    Label12Label13

    Label14Label15

    Label16Label17

    Label18

8、弹幕

  • 具体实现代码见 GitHub 源码

  • 具体讲解见

  • 效果

    Label19Label20

    Label21Label22

    Label23Label24

转载于:https://www.cnblogs.com/QianChia/p/5747644.html

你可能感兴趣的文章
centos64i386下apache 403没有权限访问。
查看>>
vb sendmessage 详解1
查看>>
jquery用法大全
查看>>
Groonga 3.0.8 发布,全文搜索引擎
查看>>
PC-BSD 9.2 发布,基于 FreeBSD 9.2
查看>>
网卡驱动程序之框架(一)
查看>>
css斜线
查看>>
Windows phone 8 学习笔记(3) 通信
查看>>
重新想象 Windows 8 Store Apps (18) - 绘图: Shape, Path, Stroke, Brush
查看>>
Revit API找到风管穿过的墙(当前文档和链接文档)
查看>>
Scroll Depth – 衡量页面滚动的 Google 分析插件
查看>>
Windows 8.1 应用再出发 - 视图状态的更新
查看>>
自己制作交叉编译工具链
查看>>
Qt Style Sheet实践(四):行文本编辑框QLineEdit及自动补全
查看>>
[物理学与PDEs]第3章习题1 只有一个非零分量的磁场
查看>>
深入浅出NodeJS——数据通信,NET模块运行机制
查看>>
onInterceptTouchEvent和onTouchEvent调用时序
查看>>
android防止内存溢出浅析
查看>>
4.3.3版本之引擎bug
查看>>
SQL Server表分区详解
查看>>