将 NSColor 从 NSAttributedString 转换为 UIColor

Converting an NSColor to a UIColor from an NSAttributedString

我正在尝试检查属性字符串中特定单词的颜色。我可以访问该属性,但无法将此属性字典转换为 UIColor。

首先我列举了我的属性字符串,这个 returns,对于每个不同的属性,一个属性字典。然后我可以仔细观察每一个。

NSAttributedString * attributes = self.textView.attributedText;

[attributes enumerateAttributesInRange:NSMakeRange(0, attributes.length) options:0 usingBlock:^(NSDictionary<NSString *,id> * _Nonnull attrs, NSRange range, BOOL * _Nonnull stop) {


}];

当我 return attrs 字典时,我得到了这个(HKWMentionAttributeName 是我正在使用的子class):

{
    HKWMentionAttributeName = "<0x610000243450> (HKWMentionsAttribute) text: ABC name 1, id: uY5Vv8QzBxhPoB8jTxUBeBmTaeD3, no range";
    NSColor = "UIExtendedSRGBColorSpace 1 0 0 1";
    NSFont = "<UICTFont: 0x7fd388558ce0> font-family: \".SFUIText\"; font-weight: normal; font-style: normal; font-size: 19.00pt";
}

然后我使用 attrs[@"NSColor"]; 访问颜色,它被 returned 如下:

UIExtendedSRGBColorSpace 1 0 0 1

我一辈子都想不出如何将它变成 UIColor 甚至开始使用这个对象。

我知道 1 0 0 1 是红色、绿色、蓝色和 alpha,但我不知道如何访问它们以使用 colorWithRed 函数。

This link 似乎暗示我需要更改颜色 space 但它并没有给出比这更多的解释。

This link 让我觉得我不应该尝试导入 NSColor class 因为它是 OSX class

我已经尝试了所有常用的颜色:尝试加载为 CGColorCIColor、加载 CGColorGetComponents、加载为 NSString ,将其加载为 id 以查看这是否会更清楚地说明该问题。

我觉得这是我对 UIColorNSColor 对象的理解的问题,但我能找到的有助于在两者之间进行转换的信息很少。

@"NSColor",尽管巧合地共享 AppKit class 的名称,但它只是 NSForegroundColorAttributeName 常量的原始值。在 iOS 上,这被记录为 UIColor。因此,您应该能够获取 attrs[NSForegroundColorAttributeName],将其转换为 UIColor,然后使用它。