您的位置:首页 > 产品设计 > UI/UE

iOS开发之UILabel

2015-09-20 16:09 435 查看
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控件值得我们掌握。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: