我需要一组属性文本。我需要根据元素在阵列中的位置来改变每个元素的颜色(这可以通过HSV实现,因为色调值与位置相关)。数组因用户输入而异,我不知道如何编写它以便自动更改颜色。我将用户的输入拆分为数组,那么如何将每个单词转换为属性文本?我完全不知道如何做到这一点,所以提前感谢你的帮助。
答案 0 :(得分:1)
您可以使用enumerate
和map
更简洁地执行此操作:
let strings = ["The", "Cat", "In", "The", "Hat"]
let attribStrings = strings.enumerate().map { index, element in
return NSAttributedString(string: element, attributes: [NSForegroundColorAttributeName:UIColor(hue: CGFloat(index)/CGFloat(strings.count), saturation: 0.5, brightness: 0.5, alpha: 1.0)])
}
您正在将数组中的每个原始元素映射到NSAttributedString
,文本颜色为UIColor(hue: CGFloat(index)/CGFloat(strings.count), saturation: 0.5, brightness: 0.5, alpha: 1.0)
。你应该根据自己的喜好调整饱和度和亮度。
输出到UILabel
看起来像是:
答案 1 :(得分:0)
您可以使用NSForegroundColorAttributeName更改NSAttributedString的颜色。我在下面列出了一个创建的样本 64种不同的颜色。
func colorUsingHSV( index : Int, total : Int) -> UIColor
{
return UIColor(hue: CGFloat((CGFloat(index)/CGFloat(total))), saturation: 1.0, brightness: 1.0, alpha: 1.0)
}
func generateAttributeText()
{
var attrStrings = [NSAttributedString]()
for i in 1...64
{
let attrString: NSMutableAttributedString = NSMutableAttributedString(string: "Text")
attrString.addAttribute(NSForegroundColorAttributeName, value: colorUsingHSV(i,total: 64), range: NSMakeRange(0, attrString.length))
attrStrings.append(attrString)
}
}