iOS开发之UILabel

UILabel是iOS开发一个基本控件。主要用来显示文本信息。

一、UILabel未作自适应

   代码:

    self.noAdapLbl = [[UILabel alloc] init];
    _noAdapLbl.frame = CGRectMake(20, 36, 280, 200);// 为UILabel设置高度
    _noAdapLbl.backgroundColor = [UIColor orangeColor];// UILabel加上背景颜色,方便调试观看

    _noAdapLbl.font = [UIFont systemFontOfSize:15];
    _noAdapLbl.text = @" 明月几时有,把酒问青天。不知天上宫阙,今夕是何年?我欲乘风归去,又恐琼楼玉宇,高处不胜寒。起舞弄清影,何似在人间!转朱阁,低绮户,照无眠。不应有恨,何事长向别时圆?人有悲欢离合,月有阴晴圆缺,此事古难全。但愿人长久,千里共婵娟 。";
    _noAdapLbl.numberOfLines = 0;// 文本行数,为0时没有最大行数限制

    [self.view addSubview:_noAdapLbl];

   显示效果:

   

   分析:这里设置了UILabel的numberOfLines属性,所以文本可以显示多行。但从显示效果看UILabel设置的高度比实际文本信息高。So,请看下一条。


二、UILabel高度自适应

   代码:

    self.adapLbl = [[UILabel alloc] init];
    _adapLbl.backgroundColor = [UIColor yellowColor];// UILabel加上背景颜色,方便调试观看
    
    _adapLbl.font = [UIFont systemFontOfSize:15];
    _adapLbl.text = @" 明月几时有,把酒问青天。不知天上宫阙,今夕是何年?我欲乘风归去,又恐琼楼玉宇,高处不胜寒。起舞弄清影,何似在人间!转朱阁,低绮户,照无眠。不应有恨,何事长向别时圆?人有悲欢离合,月有阴晴圆缺,此事古难全。但愿人长久,千里共婵娟 。";
    _adapLbl.numberOfLines = 0;// 文本行数,为0时没有最大行数限制
   

   // 自适应高度

    CGFloat height = [_adapLbl sizeThatFits:CGSizeMake(280, MAXFLOAT)].height;
    _adapLbl.frame = CGRectMake(20, 36, 280, height);// 为UILabel设置高度
    
    [self.view addSubview:_adapLbl];

   显示效果:

  

  

   分析:主要用了- (CGSize)sizeThatFits:(CGSize)size;方法

   三、UILabel加上行间距

   代码:

    self.spacpLbl = [[UILabel alloc] init];
    _spacpLbl.backgroundColor = [UIColor yellowColor];// UILabel加上背景颜色,方便调试观看
    
    _spacpLbl.font = [UIFont systemFontOfSize:15];
    _spacpLbl.text = @" 明月几时有,把酒问青天。不知天上宫阙,今夕是何年?我欲乘风归去,又恐琼楼玉宇,高处不胜寒。起舞弄清影,何似在人间!转朱阁,低绮户,照无眠。不应有恨,何事长向别时圆?人有悲欢离合,月有阴晴圆缺,此事古难全。但愿人长久,千里共婵娟 。";
    _spacpLbl.numberOfLines = 0;// 文本行数,为0时没有最大行数限制
    
    // 行间距
    NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:_spacpLbl.text];
    NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
    paragraphStyle.lineSpacing = 20;// 行间距为20
    [attributedString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, _spacpLbl.text.length)];
    _spacpLbl.attributedText = attributedString;
    
    // 自适应高度
    CGFloat height = [_spacpLbl sizeThatFits:CGSizeMake(280, MAXFLOAT)].height;
    _spacpLbl.frame = CGRectMake(20, 36, 280, height);// 为UILabel设置高度
    
    [self.view addSubview:_spacpLbl];

   显示效果:


   分析:看代码吧

   四、UILabel下划线

   代码:

    self.underLineLbl = [[UILabel alloc] init];
    _underLineLbl.frame = CGRectMake(20, 36, 280, 30);
    _underLineLbl.backgroundColor = [UIColor cyanColor];// UILabel加上背景颜色,方便调试观看
    
    _underLineLbl.text = @"爱上生活";
    
    // 下划线
    NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:_underLineLbl.text];
    [attributedString addAttribute:NSUnderlineStyleAttributeName value:[NSNumber numberWithInteger:NSUnderlineStyleSingle] range:NSMakeRange(0, _underLineLbl.text.length)];
    _underLineLbl.attributedText = attributedString;
    
    [self.view addSubview:_underLineLbl];

   显示效果:

   分析:主要用到NSMutableAttributedString这个类

   五、UILabel宽度自适应

   代码:

    self.widthLbl = [[UILabel alloc] init];
    _widthLbl.backgroundColor = [UIColor lightGrayColor];// UILabel加上背景颜色,方便调试观看
    
    _widthLbl.text = @"爱上生活";
    
    // 自适应宽度
    CGFloat width = [_widthLbl sizeThatFits:CGSizeMake(MAXFLOAT, 30)].width;
    _widthLbl.frame = CGRectMake(20, 36, width, 30);// 为UILabel设置高度
    
    [self.view addSubview:_widthLbl];

   显示效果:

分析:同UILabel的宽度自适应

六、UILabel添加点击事件

   代码:

    lbl.userInteractionEnabled=YES;
    UITapGestureRecognizer *labelTapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(labelTouchUpInside:)];
    [lbl addGestureRecognizer:labelTapGestureRecognizer];

-(void)labelTouchUpInside:(UITapGestureRecognizer *)recognizer{
    UILabel *label=(UILabel*)recognizer.view;
    NSLog(@"%@被点击了",label.text);
}

七、同一UILabel 字体不同颜色

 首先继承一个label,要想在一个label中实现各种不同颜色的字,就是重绘。

  代码:

//设置颜色属性和字体属性
- (NSAttributedString *)illuminatedString:(NSString*)text 
                               font:(UIFont *)AtFont{

    int len = [textlength];
    //创建一个可变的属性字符串
    NSMutableAttributedString*mutaString = [[[NSMutableAttributedString alloc]initWithString:text] autorelease];
    //改变字符串 从1位 长度为1这一段的前景色,即字的颜色。

    [mutaStringaddAttribute:(NSString*)(kCTForegroundColorAttributeName)
                   value:(id)self.stringColor.CGColor
                   range:NSMakeRange(0, len)];



    if (self.keywordColor !=nil)
    {
       for (NSValue *value inlist) 
       {
        //   NSValue*value = [list objectAtIndex:i];
           NSRangekeyRange = [value rangeValue];
          [mutaString addAttribute:(NSString*)(kCTForegroundColorAttributeName)
                                           value:(id)self.keywordColor.CGColor
                                            range:keyRange];
       }
    }



    //设置部分字段的字体大小与其他的不同


   //设置是否使用连字属性,这里设置为0,表示不使用连字属性。标准的英文连字有FI,FL.默认值为1,既是使用标准连字。也就是当搜索到f时候,会把fl当成一个文字。
    int nNumType = 0;
//    float fNum = 3.0;
    CFNumberRef cfNum =CFNumberCreate(NULL, kCFNumberIntType,&nNumType);
//    CFNumberRef cfNum2 =CFNumberCreate(NULL, kCFNumberFloatType,&fNum);
    [mutaStringaddAttribute:(NSString *)kCTLigatureAttributeName
                   value:(id)cfNum
                   range:NSMakeRange(0, len)];
    //空心字
//    [mutaStringaddAttribute:(NSString *)kCTStrokeWidthAttributeNamevalue:(id)cfNum2 range:NSMakeRange(0, len)];


    CTFontRef ctFont2 =CTFontCreateWithName((CFStringRef)AtFont.fontName, 
                                      AtFont.pointSize,
                                      NULL);
    [mutaStringaddAttribute:(NSString*)(kCTFontAttributeName) 
                   value:(id)ctFont2 
                   range:NSMakeRange(0, len)];
 //  CFRelease(ctFont);
    CFRelease(ctFont2);
    return [[mutaString copy]autorelease];
}


//重绘Text
- (void)drawRect:(CGRect)rect 
{
   //获取当前label的上下文以便于之后的绘画,这个是一个离屏。
CGContextRef context = UIGraphicsGetCurrentContext();
   //压栈,压入图形状态栈中.每个图形上下文维护一个图形状态栈,并不是所有的当前绘画环境的图形状态的元素都被保存。图形状态中不考虑当前路径,所以不保存
   //保存现在得上下文图形状态。不管后续对context上绘制什么都不会影响真正得屏幕。
CGContextSaveGState(context);
    //x,y轴方向移动
CGContextTranslateCTM(context, 0.0, 0.0);

   //缩放x,y轴方向缩放,-1.0为反向1.0倍,坐标系转换,沿x轴翻转180度
// CGContextScaleCTM(context, 1, 100); 

NSArray *fontArray = [UIFont familyNames];
NSString *fontName;
if ([fontArray count]) {
fontName = [fontArray objectAtIndex:0];
}
   //创建一个文本行对象,此对象包含一个字符
CTLineRef line =CTLineCreateWithAttributedString((CFAttributedStringRef) 
                                              [selfilluminatedString:self.text font:self.font]); //[UIFontfontWithName:fontName size:60]
    //设置文字绘画的起点坐标。
CGContextSetTextPosition(context, 0.0, 0.0);
    //在离屏上绘制line
CTLineDraw(line, context);
   //将离屏上得内容覆盖到屏幕。此处得做法很像windows绘制中的双缓冲。
CGContextRestoreGState(context); 
CFRelease(line);
//CGContextRef myContext = UIGraphicsGetCurrentContext();
//CGContextSaveGState(myContext);
//[self MyColoredPatternPainting:myContextrect:self.bounds];
//CGContextRestoreGState(myContext);
}

总结:看似简单永远蕴含很多。UILabel控件值得我们掌握。

  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值