-
Notifications
You must be signed in to change notification settings - Fork 232
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
下载的CoreTextDemo中定制文字颜色无效问题 #24
Comments
我用C语言那套可以换用OC的变不了 |
走的是json文件里的颜色样式,当然config里的textColor不起作用了。。。
在parser类里解析的时候将"red"字符转换为[UIColor redColor],否则的话是默认的灰色。 见
|
@tangqiaoboy, 确实是必须通过Coretext下,才能变换颜色,我还找了好久原因;
但是,为什么只有通过CoreText下,才能成功呢???? |
因为CTFrameParser.m里面忽略了attribute信息。其实源码都在,可以自己分析实现原理的。
lucy <notifications@github.com>于2017年8月11日 周五下午2:28写道:
@tangqiaoboy <https://github.com/tangqiaoboy>,
确实是必须通过Coretext下,才能变换颜色,我还找了好久原因;
@younghaopro <https://github.com/younghaopro>
NSDictionary *attributes = [LXCTFrameSeting attributesWithConfig:config];
NSMutableAttributedString *attrbuteString = [[NSMutableAttributedString alloc] initWithString:content attributes:attributes];
[attrbuteString addAttribute:**(__bridge id)kCTForegroundColorAttributeName** value:[UIColor redColor] range:NSMakeRange(0, 7)];
LXCTTextData *data = [LXCTFrameSeting frameSettingWithAttributedContent:attrbuteString config:config];
但是,为什么只有通过CoreText下,才能成功呢????
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#24 (comment)>,
or mute the thread
<https://github.com/notifications/unsubscribe-auth/AAsvqVpawPNCj8V3qXLXjY7-wt4evnR9ks5sW_SPgaJpZM4KSNdF>
.
--
Tang Qiao
|
如果忽略了attribute信息,但是NSBackgroundColorAttributeName起作用,为什么NSForegroundColorAttributeName不起作用? |
@tangqiaoboy 为什么不直接解释明白呢,毕竟按照书中的代码来测试,必然会出现这样的问题。 |
我验证了一下: 另外交换顺序,即先执行NSForegroundColorAttributeName再执行kCTForegroundColorAttributeName,还是显示kCTForegroundColorAttributeName的结果。 但是在唐大神的书里,为什么里外用的两种,不知道大神是如何避免这个问题的。我和楼上网友遇到的是一样的问题。 至于内部原因,我还没弄明白。我搞清楚了,会发出来。 @younghaopro @lucyios |
这应该是coretext内部的一些规则细节。这个demo是告诉大家如果做出一个排版引擎
huaweiluo <notifications@github.com>于2018年9月9日 周日上午9:59写道:
我验证了一下:
[attributedString addAttribute:((__bridge
id)kCTForegroundColorAttributeName) value:[UIColor blueColor]
range:NSMakeRange(0, 40)];
[attributedString addAttribute:NSForegroundColorAttributeName
value:[UIColor yellowColor] range:NSMakeRange(0, 40)];
如果设置了kCTForegroundColorAttributeName,那么再设置NSForegroundColorAttributeName就不起作用。
所以前后要一致。这个问题同样存在于:TTTAttibuteLabel的使用上。
请参考:
http://gilnuy.github.io/2016/04/19/kCTForegroundColorAttributeName%E5%92%8CNSForegroundColorAttributeName/
至于内部原因,我还没弄明白。我搞清楚了,会发出来。
如果哪位大神了解,请指教。
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#24 (comment)>,
or mute the thread
<https://github.com/notifications/unsubscribe-auth/AAsvqf_OZhRlFXSe7iSseJDAsKXtJ7PLks5uZHYGgaJpZM4KSNdF>
.
--
Tang Qiao
|
@tangqiaoboy 您的《ios开发进阶》、《ios面试之道》我都购买了。所谓三人行必有我师,收获还是不少的,谢谢分享!谢谢回复!coretext内部规则,我后续抽空再研究吧。 |
大神您好,最近在拜读您的 《基于 CoreText 的排版引擎:基础》,然后https://raw.githubusercontent.com/tangqiaoboy/iOS-Pro/master/DemoProjects/CoreText.zip 下载的CoreTextDemo里面,我测试的时候发现,通过range修改富文本的颜色无效,但是设置富文本的字体大小有效果!麻烦您能测试看一下吗?
测试步骤如下:
(void)viewDidLoad
{
[super viewDidLoad];
CTFrameParserConfig *config = [[CTFrameParserConfig alloc] init];
config.width = self.ctView.width;
config.textColor = [UIColor blackColor];
NSString *content =
@" 对于上面的例子,我们给 CTFrameParser 增加了一个将 NSString 转 "
" 换为 CoreTextData 的方法。"
" 但这样的实现方式有很多局限性,因为整个内容虽然可以定制字体 "
" 大小,颜色,行高等信息,但是却不能支持定制内容中的某一部分。"
" 例如,如果我们只想让内容的前三个字显示成红色,而其它文字显 "
" 示成黑色,那么就办不到了。"
"\n\n"
" 解决的办法很简单,我们让
CTFrameParser
支持接受 ""NSAttributeString 作为参数,然后在 NSAttributeString 中设置好 "
" 我们想要的信息。";
NSDictionary *attr = [CTFrameParser attributesWithConfig:config];
NSMutableAttributedString *attributedString =
[[NSMutableAttributedString alloc] initWithString:content
attributes:attr];
[attributedString addAttribute:NSForegroundColorAttributeName
value:[UIColor redColor]
range:NSMakeRange(0, 7)];
CoreTextData *data = [CTFrameParser parseAttributedContent:attributedString
config:config];
self.ctView.data = data;
self.ctView.height = data.height;
self.ctView.backgroundColor = [UIColor yellowColor];
}
The text was updated successfully, but these errors were encountered: