iOS

前言

	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、数字动态变化

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 跑马灯实现封装

8、弹幕

原文地址:https://www.cnblogs.com/QianChia/p/5747644.html