2016-08-05 54 views
-1

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

+0

这将帮助,如果你能更具体。也许提供一些你已经尝试过的代码。 – Zaz

回答

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)]) 
} 

您的阵列中的每个原始元素与UIColor(hue: CGFloat(index)/CGFloat(strings.count), saturation: 0.5, brightness: 0.5, alpha: 1.0)文本颜色映射到NSAttributedString。您应该根据自己的喜好调整饱和度和亮度。

输出到UILabel会是什么样子:

enter image description here

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) 
    } 
} 
相关问题