好的,这是我的问题。我有一组相当大的UIButtons,它们将UIImage设置为背景。现在我想在这些按钮中添加标签。但我目前正在实施的设计使用“花式”标签,标签的背景颜色是半透明的,并在文本周围折叠。
我的第一个想法是使用UIWebview来实现这一点并且它可以正常工作,但添加大量UIWebview需要很长时间才能显示标签。
下一个解决方案是使用UILabel,性能会更好。但对于我的生活,我无法弄清楚,如何使视觉风格与设计相匹配。
所以基本上我想让UILabel表现得像一个HTML元素,显示CSS规则:inline;风格定义。
这是否可以使用UILabel的内置参数?如果没有,我可能会使用UIWebView解决方案,但使用UILabel当然会更加轻松。
这是一个截图,应该可以解释一下
Top是默认UILabel的行为方式,而底部是我希望它采取行动的方式。
答案 0 :(得分:1)
你还没有完全描述你的文字所具有的风格,但听起来你想要一种“发光”效果。这可以使用QuartzCore在标签上进行阴影效果。请注意,单个阴影通常不会这样做,因此这里有一个带有四个标签和四个阴影的示例:
for (int i = 0; i < 4; i++) {
UILabel * label = [[UILabel alloc] initWithFrame:CGRectMake(20, 20, 280, 30)];
[label setBackgroundColor:[UIColor clearColor]];
[label setTextColor:[UIColor colorWithRed:1 green:1 blue:1 alpha:1]];
[label setText:@"This is some glowing text"];
[[label layer] setShadowColor:[[UIColor colorWithRed:1 green:1 blue:1 alpha:1] CGColor]];
CGSize shadowOff = CGSizeMake(0, 0);
if (i == 0) shadowOff = CGSizeMake(3, 3);
else if (i == 1) shadowOff = CGSizeMake(3, -3);
else if (i == 2) shadowOff = CGSizeMake(-3, -3);
else if (i == 3) shadowOff = CGSizeMake(-3, 3);
[[label layer] setShadowOffset:shadowOff];
[[label layer] setShadowOpacity:0.5];
[[label layer] setShadowRadius:3];
[[label layer] setMasksToBounds:NO];
[self.view addSubview:[label autorelease]];
}
显然,可以针对不同级别的“发光”修改阴影不透明度,半径等。
答案 1 :(得分:0)
据我所知,你需要弄清楚两件事:
要在UILabel中使用的文本的渲染大小。这可以用-[NSString sizeWithFont:]
来计算。还有很多其他相关的方法。参见NSString UIKit Additions Reference。
你需要的第二件事是你的UILabel的背景颜色应该在文本周围完美地折叠。为此,您需要将可伸缩图像设置为UILabel的背景。见-[UIImage stretchableImageWithLeftCapWidth:topCapHeight:]
。有关可伸展图像如何工作的示例,请参阅http://idevrecipes.com/2010/12/08/stretchable-images-and-buttons/。
答案 2 :(得分:0)
我设法找到几乎按预期工作的解决方案。它不会在所有单行周围折叠,但它会折叠文本周围的框,这对我来说已经足够了。
这是为我提供技巧的最终代码:
UILabel *buttonTitle = [[UILabel alloc] initWithFrame:CGRectMake(4, 4, 176, 120)];
buttonTitle.text = @"Button text";
buttonTitle.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.65];
buttonTitle.textColor = [UIColor whiteColor];
buttonTitle.textAlignment = UITextAlignmentLeft;
buttonTitle.numberOfLines = 0;
buttonTitle.lineBreakMode = UILineBreakModeWordWrap;
buttonTitle.adjustsFontSizeToFitWidth = NO;
[buttonTitle sizeToFit];