对 SKLabelNode 文本的某些部分应用不同的颜色
Applying different colors to certain parts of SKLabelNode's text
我非常确定不能使用 NSMutableAttributedString
和 NSAttributedString
。我试过的是:
NSMutableAttributedString * newString = [[NSMutableAttributedString alloc] initWithString:@"firstsecondthird"];
[newString addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(0,5)];
[newString addAttribute:NSForegroundColorAttributeName value:[UIColor greenColor] range:NSMakeRange(5,6)];
[newString addAttribute:NSForegroundColorAttributeName value:[UIColor blueColor] range:NSMakeRange(11,5)];
labelNode.text = [newString string];
这不起作用,文本仍然是原来的颜色。有什么办法可以用 SKLabelNode
做到这一点吗?使用多个 SKLabelNodes
是解决方案,但我不能说它很优雅(或性能)。
SKLabelNode
不支持 NSAttributedString
或 NSMutableAttributedString
。当您使用 labelNode.text = [newString string]
时,您只是获取了属性字符串的文本部分,而忽略了您在前几行中所做的所有更改。
我在 GitHub 上发现了一些您可能感兴趣的内容。它在 Swift 但代码很短,应该很容易理解。
自 iOS11 起,SKLabelNode 支持 NSAttributedStrings,因此不再需要 ASAttributedLabelNode。您的代码如下所示:
NSMutableAttributedString * newString = [[NSMutableAttributedString alloc] initWithString:@"firstsecondthird"];
[newString addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(0,5)];
[newString addAttribute:NSForegroundColorAttributeName value:[UIColor greenColor] range:NSMakeRange(5,6)];
[newString addAttribute:NSForegroundColorAttributeName value:[UIColor blueColor] range:NSMakeRange(11,5)];
labelNode.attributedText = newString;
在Swift 4:
let newString = NSMutableAttributedString(string: "firstsecondthird")
newString.addAttribute(NSAttributedStringKey.foregroundColor, value: UIColor.red, range: NSMakeRange(0,5))
newString.addAttribute(NSAttributedStringKey.foregroundColor, value: UIColor.green, range: NSMakeRange(5,6))
newString.addAttribute(NSAttributedStringKey.foregroundColor, value: UIColor.blue, range: NSMakeRange(11,5))
labelNode.attributedText = newString
我非常确定不能使用 NSMutableAttributedString
和 NSAttributedString
。我试过的是:
NSMutableAttributedString * newString = [[NSMutableAttributedString alloc] initWithString:@"firstsecondthird"];
[newString addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(0,5)];
[newString addAttribute:NSForegroundColorAttributeName value:[UIColor greenColor] range:NSMakeRange(5,6)];
[newString addAttribute:NSForegroundColorAttributeName value:[UIColor blueColor] range:NSMakeRange(11,5)];
labelNode.text = [newString string];
这不起作用,文本仍然是原来的颜色。有什么办法可以用 SKLabelNode
做到这一点吗?使用多个 SKLabelNodes
是解决方案,但我不能说它很优雅(或性能)。
SKLabelNode
不支持 NSAttributedString
或 NSMutableAttributedString
。当您使用 labelNode.text = [newString string]
时,您只是获取了属性字符串的文本部分,而忽略了您在前几行中所做的所有更改。
我在 GitHub 上发现了一些您可能感兴趣的内容。它在 Swift 但代码很短,应该很容易理解。
自 iOS11 起,SKLabelNode 支持 NSAttributedStrings,因此不再需要 ASAttributedLabelNode。您的代码如下所示:
NSMutableAttributedString * newString = [[NSMutableAttributedString alloc] initWithString:@"firstsecondthird"];
[newString addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(0,5)];
[newString addAttribute:NSForegroundColorAttributeName value:[UIColor greenColor] range:NSMakeRange(5,6)];
[newString addAttribute:NSForegroundColorAttributeName value:[UIColor blueColor] range:NSMakeRange(11,5)];
labelNode.attributedText = newString;
在Swift 4:
let newString = NSMutableAttributedString(string: "firstsecondthird")
newString.addAttribute(NSAttributedStringKey.foregroundColor, value: UIColor.red, range: NSMakeRange(0,5))
newString.addAttribute(NSAttributedStringKey.foregroundColor, value: UIColor.green, range: NSMakeRange(5,6))
newString.addAttribute(NSAttributedStringKey.foregroundColor, value: UIColor.blue, range: NSMakeRange(11,5))
labelNode.attributedText = newString