完成丰富的布局离不开文本String 下面学习 学习CTStringAttributes
配置富文本的key
key | value | 注意事项 |
---|---|---|
kCTFontAttributeName | CTFontRef | 配置富文本的字体默认是 Helvetica 12 |
kCTForegroundColorFromContextAttributeName | CFBooleanRef | Default is false ,设置为true kCTForegroundColorAttributeName 颜色不起作用 用的context的 setFillColor 而kCTUnderlineStyleAttributeName 颜色用的是context 的strokeColor |
kCTKernAttributeName | CFNumberRef | 字符之间的间隔 默认是 0.0 |
kCTLigatureAttributeName | CFNumberRef | 默认值是1 ,用法不清楚 |
kCTForegroundColorAttributeName | CGColorRef | 默认是black 。设置字体颜色 |
kCTBackgroundColorAttributeName | CGColorRef | 默认透明,背景颜色 |
kCTParagraphStyleAttributeName | CTParagraphStyleRef | 默认不设置该属性。可以设置例如line 对对齐,写的方向,tab规则等。 |
kCTStrokeWidthAttributeName | CFNumberRef | 线宽。默认0.0 |
kCTStrokeColorAttributeName | CGColorRef | 线的颜色。默认是 foreground颜色。没啥变化,有时间再研究 |
kCTUnderlineStyleAttributeName | CFNumberRef | 下划线 类型有 CTUnderlineStyle |
kCTSuperscriptAttributeName | CFNumberRef | 默认是0.上标还是下标。 要 the specified font。具体是啥字体不知道。 -1 下标 1 上标。暂时设置没效果。 |
kCTUnderlineColorAttributeName | CGColorRef | 默认是foreground 颜色 ,下划线颜色. |
kCTVerticalFormsAttributeName | CFBooleanRef | value false horizontal value true vertical |
kCTHorizontalInVerticalFormsAttributeName | CFNumberRef | 默认是0. value 是1 to 4 只有设置 kCTVerticalFormsAttributeName才起作用.目前不知道杂用。没效果 |
kCTGlyphInfoAttributeName | CTGlyphInfoRef | 改value 不知道杂用,暂时过 |
kCTCharacterShapeAttributeName | CFNumberRef | 9.0 以后才能用 ,暂时value 值不知道咋用 |
kCTLanguageAttributeName | CFStringRef | 具体value值有哪些。暂时不管。 |
kCTRunDelegateAttributeName | CTRunDelegateRef | 可以用来图文混拍的东西。替代的每一个cgglyph |
kCTBaselineClassAttributeName | CFStringRef | value 有 kCTBaselineClassRoman, kCTBaselineClassIdeographicCentered, kCTBaselineClassIdeographicLow, kCTBaselineClassIdeographicHigh, kCTBaselineClassHanging, kCTBaselineClassMath,暂时不知道杂用 |
kCTBaselineInfoAttributeName | CFDictionaryRef | key 是 value 有 kCTBaselineClassRoman, kCTBaselineClassIdeographicCentered, kCTBaselineClassIdeographicLow, kCTBaselineClassIdeographicHigh, kCTBaselineClassHanging, kCTBaselineClassMath,暂时不知道杂用,不会用 |
kCTBaselineReferenceInfoAttributeName | CFDictionaryRef | key 是 value 有 kCTBaselineClassRoman, kCTBaselineClassIdeographicCentered, kCTBaselineClassIdeographicLow, kCTBaselineClassIdeographicHigh, kCTBaselineClassHanging, kCTBaselineClassMath,暂时不知道杂用,不会用 |
kCTWritingDirectionAttributeName | CFArray | 数组中是 number 。暂时不会用 |
kCTRubyAnnotationAttributeName | CTRubyAnnotation | 暂时不会用 |
|
|
结果截图
这个类就是 attString 配置类。
下面就是上面难点和不太清楚的地方攻关
|
|
效果
同时设置CGContextRef 颜色 和 kCTUnderlineStyleAttributeName 属性值,而其动作用的是CGContextRef颜色。
|
|
|
|
|
|
效果图:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
效果如下:
难点攻关
kCTForegroundColorFromContextAttributeName 这个设置为yes 这个下划线的颜色就和context setStroke 颜色一样了。
|
|
纠正-(void)setstring:(NSMutableAttributedString )beginStr appendString:(CFStringRef )key value:(id)value string:(NSString )string 这个方法的实现 ,以前的方法把原有属性都给替换掉了。这个是增加属性。而不是替换 结果
从图中可以看出 如果 kCTForegroundColorFromContextAttributeName 设置为true 那么 下划线颜色 和 context 设置的strokeColor 颜色一样 而文本颜色和 context的fillColor一样
要是该属性设置为 false 那么结果如图
kCTVerticalFormsAttributeName
设置为true 字体单个垂直书写
未解决问题汇总
kCTLigatureAttributeName
kCTSuperscriptAttributeName 这个是special font 才有的,目前不知道special font 有哪些。
kCTHorizontalInVerticalFormsAttributeName 设置不起作用
kCTCharacterShapeAttributeName 这个没弄
kCTLanguageAttributeName
kCTBaselineReferenceInfoAttributeName
kCTBaselineInfoAttributeName
kCTBaselineClassAttributeName
以上三个 kCTBaselineReferenceInfoAttributeName 和 kCTBaselineClassAttributeName 属性同时使用有效果, kCTBaselineReferenceInfoAttributeName 对应的key是包含 kCTBaselineClass 的值, value是 number
kCTWritingDirectionAttributeName 书写方向问题。不是很了解。暂时不关注
kCTRubyAnnotationAttributeName 这个类似给文字注入拼音。