当前位置: 首页 > news >正文

iOS - UILabel

前言

    NS_CLASS_AVAILABLE_IOS(2_0) @interface UILabel : UIView <NSCoding>
    @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 源码 QExtension

  • 具体讲解见 iOS - Label 数字动态变化

  • 效果

    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 源码 QExtension

  • 具体讲解见 iOS - 跑马灯、弹幕

  • 效果

    Label6Label7

    Label8Label9

    Label10Label11

    Label12Label13

    Label14Label15

    Label16Label17

    Label18

8、弹幕

  • 具体实现代码见 GitHub 源码 QExtension

  • 具体讲解见 iOS - 跑马灯、弹幕

  • 效果

    Label19Label20

    Label21Label22

    Label23Label24

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

相关文章:

  • html-table tbody加滚动条
  • vuex 学习笔记 01
  • Eclipse中web项目的默认发布路径改为外部Tomcat中webapp路径
  • 【NOIP】提高组2013 货车运输
  • AngularJS 用 Interceptors 来统一处理 HTTP 请求和响应
  • Ubuntu16.04 安装wine下的QQ
  • 1-2 ARM概况
  • 大数据美食——寻找地图上的美味
  • 使用python+hadoop-streaming编写hadoop处理程序
  • php ci框架整合银盛支付
  • SQL Server编程(06)触发器
  • 关于写东西
  • 1164 统计数字
  • 大神的Blog挂了,从Bing快照里复制过来的备份
  • linux内核值shmmax问题
  • 0x05 Python数据分析,Anaconda八斩刀
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • Electron入门介绍
  • input的行数自动增减
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • Java新版本的开发已正式进入轨道,版本号18.3
  • JS实现简单的MVC模式开发小游戏
  • k8s如何管理Pod
  • laravel with 查询列表限制条数
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • MySQL数据库运维之数据恢复
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • Unix命令
  • Vue 动态创建 component
  • Web设计流程优化:网页效果图设计新思路
  • yii2权限控制rbac之rule详细讲解
  • 机器学习 vs. 深度学习
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 坑!为什么View.startAnimation不起作用?
  • 你不可错过的前端面试题(一)
  • 盘点那些不知名却常用的 Git 操作
  • 深度学习中的信息论知识详解
  • 微信开源mars源码分析1—上层samples分析
  • - 转 Ext2.0 form使用实例
  • ​2021半年盘点,不想你错过的重磅新书
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • #前后端分离# 头条发布系统
  • (6)添加vue-cookie
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .net web项目 调用webService
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地定义和使用弱事件
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作