iOS coretext框架第四章 CTFramesetter类 和 CTFrame类

此篇结合第一章中的例子查看示意。

coretext绘图流程:先创建一个framesetter——>创建path——>创建frame(携带framesetter和path等信息)——>生成上下文context——>CTFrameDraw绘制frame——>释放

一、CTFramesetter

用于生成frame,包含以下方法:


CFTypeID CTFramesetterGetTypeID( void );

// 创建framesetter(通过typesetter 和 通过字符串)
CTFramesetterRef CTFramesetterCreateWithTypesetter( CTTypesetterRef typesetter );
CTFramesetterRef CTFramesetterCreateWithAttributedString( CFAttributedStringRef string );

/* 创建frame
四个参数:
framesetter:生成frame的工厂
range:设置多大就显示多少字符。设置为0时,完整显示。
path:
frameAttributes:额外控制frame的属性字典。
*/
CTFrameRef CTFramesetterCreateFrame(CTFramesetterRef framesetter, CFRange stringRange, CGPathRef path, CFDictionaryRef _Nullable frameAttributes );

// 获取framesetter的typesetter
CTTypesetterRef CTFramesetterGetTypesetter( CTFramesetterRef framesetter );

/* 获取展示一串文字需要多大的空间
四个参数:
framesetter : 生成frame的工厂
stringRange : 设置多大就计算多少个字符的空间
frameAttributes : frame的属性
constraints :在多宽多高的空间里显示这些文字
fitRange :
*/
CGSize CTFramesetterSuggestFrameSizeWithConstraints( CTFramesetterRef framesetter, CFRange stringRange,CFDictionaryRef _Nullable frameAttributes,CGSize constraints,CFRange * _Nullable fitRange );

二、CTFrame类

包含以下方法:

CFTypeID CTFrameGetTypeID( void );

CFRange CTFrameGetStringRange( CTFrameRef frame );

// 获取真正在frame适应的字符的range
CFRange CTFrameGetVisibleStringRange( CTFrameRef frame );

// 获取用于创建frame的path
CGPathRef CTFrameGetPath( CTFrameRef frame );

// 获取用于创建frame的所有属性
CFDictionaryRef _Nullable CTFrameGetFrameAttributes( CTFrameRef frame );

// 获取组成frame的所有line
CFArrayRef CTFrameGetLines( CTFrameRef frame );

// 获得每一行的origin数组
void CTFrameGetLineOrigins( CTFrameRef frame, CFRange range, CGPoint origins[_Nonnull] );

// 此方法就是将CTFrame绘制到上下文
void CTFrameDraw( CTFrameRef frame, CGContextRef context );

 

设置frame的属性

const CFStringRef kCTFrameProgressionAttributeName;
typedef CF_ENUM(uint32_t, CTFrameProgression) {
    kCTFrameProgressionTopToBottom  = 0,
    kCTFrameProgressionRightToLeft  = 1,
    kCTFrameProgressionLeftToRight  = 2
};


const CFStringRef kCTFramePathFillRuleAttributeName;
typedef CF_ENUM(uint32_t, CTFramePathFillRule) {
    kCTFramePathFillEvenOdd         = 0,
    kCTFramePathFillWindingNumber   = 1
};


const CFStringRef kCTFramePathWidthAttributeName;

const CFStringRef kCTFrameClippingPathsAttributeName;

const CFStringRef kCTFramePathClippingPathAttributeName;

 

-- NORMAL --

-- NORMAL --
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值