将 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
我已经尝试了所有常用的颜色:尝试加载为 CGColor
、CIColor
、加载 CGColorGetComponents
、加载为 NSString
,将其加载为 id
以查看这是否会更清楚地说明该问题。
我觉得这是我对 UIColor
和 NSColor
对象的理解的问题,但我能找到的有助于在两者之间进行转换的信息很少。
@"NSColor"
,尽管巧合地共享 AppKit class 的名称,但它只是 NSForegroundColorAttributeName
常量的原始值。在 iOS 上,这被记录为 UIColor
。因此,您应该能够获取 attrs[NSForegroundColorAttributeName]
,将其转换为 UIColor
,然后使用它。
我正在尝试检查属性字符串中特定单词的颜色。我可以访问该属性,但无法将此属性字典转换为 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
我已经尝试了所有常用的颜色:尝试加载为 CGColor
、CIColor
、加载 CGColorGetComponents
、加载为 NSString
,将其加载为 id
以查看这是否会更清楚地说明该问题。
我觉得这是我对 UIColor
和 NSColor
对象的理解的问题,但我能找到的有助于在两者之间进行转换的信息很少。
@"NSColor"
,尽管巧合地共享 AppKit class 的名称,但它只是 NSForegroundColorAttributeName
常量的原始值。在 iOS 上,这被记录为 UIColor
。因此,您应该能够获取 attrs[NSForegroundColorAttributeName]
,将其转换为 UIColor
,然后使用它。