如何制作属性文本数组

时间:2016-08-05 01:17:32

标签: swift

我需要一组属性文本。我需要根据元素在阵列中的位置来改变每个元素的颜色(这可以通过HSV实现,因为色调值与位置相关)。数组因用户输入而异,我不知道如何编写它以便自动更改颜色。我将用户的输入拆分为数组,那么如何将每个单词转换为属性文本?我完全不知道如何做到这一点,所以提前感谢你的帮助。

2 个答案:

答案 0 :(得分:1)

您可以使用enumeratemap更简洁地执行此操作:

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看起来像是:

enter image description here

答案 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)
  }
}