CTFrame 相当于布局控制文件。控制文本的整体绘制。
我们从三个方面来看这个类
- frame 访问函数
- frame values
- frame types
1. frame 访问函数
|
|
|
|
|
|
|
|
|
|
|
|
测试代码
|
|
结果
|
|
从上面结果看 frame 没有设置 att 属性。那怎么设置属性值呢?请看 CTFramesetterRef
2 frame values
下面是frame att 属性的key 通过 这些key 可以控制 frame 的绘制布局
kCTFrameProgressionAttributeName | 文字绘制方向,有三个值, kCTFrameProgressionTopToBottom水平绘制 从上到下, kCTFrameProgressionRightToLeft 垂直绘制,从右到左, kCTFrameProgressionLeftToRight 垂直绘制,从左到右 |
---|---|
kCTFramePathFillRuleAttributeName | 在path路径的绘制规则。有两种 kCTFramePathFillEvenOdd 根据 CGContextEOFillPath 规则绘制 kCTFramePathFillWindingNumber 充满整个path 默认是kCTFramePathFillEvenOdd |
kCTFramePathWidthAttributeName | 这个属性暂时不知道干嘛用的,使用起来无效 (已解决) |
kCTFrameClippingPathsAttributeName | 这个value 是array ,array 中必须包含 字典 ,字典的key值是kCTFramePathClippingPathAttributeName ,value是path,可选key kCTFramePathFillRuleAttributeName 可以配置path路径的填充方式 |
kCTFramePathClippingPathAttributeName | 这个value是path |
kCTFrameProgressionAttributeName
|
|
效果
kCTFrameProgressionRightToLeft
|
|
效果
默认是kCTFrameProgressionTopToBottom
kCTFramePathFillRuleAttributeName
我认为这个主要是填充path 规则的 kCTFramePathFillEvenOdd 这种方式进行理解
什么是 CGContextEOFillPath 规则 //使用奇偶规则填充当前路径
修改路径代码如下:使一个大的矩形套一个小的矩形
|
|
结果显示
kCTFrameClippingPathsAttributeName 和 kCTFramePathClippingPathAttributeName
|
|
剪切上面的路径 。与 kCTFramePathFillRuleAttributeName 暂时看不出变化来,应该是这个里面的路径全部clip。可能与path 重叠有关系,目前没做具体研究。 (已验证,见最后模块)
3 frame types
CFTypeID CTFrameGetTypeID( void )
返回一个CFTypeID
综合CFFrame.h api ,可以看出该类能获取到frame的信息是 CTLIne 和CTLine 的起点。
见图
上图不包含剪切的路径。
已解决问题
kCTFramePathWidthAttributeName 这个属性如果是修饰 CTframeRef 的话相当于边距
|
|
结果:
kCTFramePathWidthAttributeName 要是修饰clip 路径的话 相当于边距加大
|
|
效果如下:
kCTFramePathFillRuleAttributeName 这个 kCTFramePathFillEvenOdd 规则的话 是根据规则进行排版的。
代码:
|
|
效果图:
将上面的
|
|
效果图:
很明显 是所有的路径都被剪切掉了