CoreText笔记

链接:https://www.raywenderlich.com/4147/core-text-tutorial-for-ios-making-a-magazine-app点击打开链接

在重新看富文本相关的知识,根据上边的网址,总结一下心得,

Context:我的理解它像一个适配器,,因为我们输出的方式不同(可能知识在屏幕上输出,打印机打印,PDF等等),可能每种输出方式有区别,这种差别不可能由我们去考虑,而且也考虑不全,所以我们把我们的操作都写到Context上,让所有的输出设备(如打印机)去根据我们的Context中的参数去实现具体的操作。

使用CoreText步骤:

一:使用CTFrameDraw(frame, context);输出内容

1,创建属性字符串

2,根据属性字符串创建 CTFramesetterRef 对象(该对象包含有字符串信息,CTTypesetter is automatically created for you, a class that manages your fonts)

CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)self.attString);

3,创建路径Path(对于Path的理解我的理解是它存储我们的绘图路径信息,它本身并不表示任何的画图路径信息,可以把它理解为一个对象,对象内的属性存储了路径信息)

CGRect colRect = CGRectMake(0, 0 , 100,100);

CGMutablePathRef path = CGPathCreateMutable();
CGPathAddRect(path, NULL, colRect);

4,创建Frame()

CTFrameRef frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(textPos, 0), path, NULL);//CFRangeMake(textPos, 0)制定该Frame绘制的字符串区间,0代表由系统判断,这时分两种情况1,Frame过大,绘制的字符串内容太少这证明这个Frame是最后一个了,2,字符串太多,Frame放不下,这是涉及到下一个Frame从哪里开始绘制的问题,我们可以用CFRange frameRange = CTFrameGetVisibleStringRange(frame); 获得当前Frame所显示的字符串的在总的字符串中的区间,就可以获得下一个Frame从哪里开始绘制

5,此时Frame已经有了,Frame包含了我要在什么位置绘制,以及绘制什么样的内容,此时就可以调用 CTFrameDraw(frame, context); 进行绘制了






一、特殊的坐标变换(平移、缩放、旋转)

1. - void CGContextTranslateCTM ( CGContextRef c, CGFloat tx, CGFloat ty ):平移坐标系统。

该方法相当于把原来位于 (0, 0) 位置的坐标原点平移到 (tx, ty) 点。在平移后的坐标系统上绘制图形时,所有坐标点的 X 坐标都相当于增加了 tx,所有点的 Y 坐标都相当于增加了 ty。

2. - void CGContextScaleCTM ( CGContextRef c, CGFloat sx, CGFloat sy ):缩放坐标系统。

该方法控制坐标系统水平方向上缩放 sx,垂直方向上缩放 sy。在缩放后的坐标系统上绘制图形时,所有点的 X 坐标都相当于乘以 sx 因子,所有点的 Y 坐标都相当于乘以 sy 因子。

3. - void CGContextRotateCTM ( CGContextRef c, CGFloat angle ):旋转坐标系统。
该方法控制坐标系统旋转 angle 弧度。在缩放后的坐标系统上绘制图形时,所有坐标点的 X、Y 坐标都相当于旋转了 angle弧度之后的坐标


==============================================================================================

为了让开发者在进行坐标变换时无须计算多次坐标变换后的累加结果,Quartz 2D还提供了如下两个方法来保存、恢复绘图状态。

- void CGContextSaveGState ( CGContextRef c ):保存当前的绘图状态。

- void CGContextRestoreGState ( CGContextRef c ):恢复之前保存的绘图状态。

需要说明的是,CGContextSaveGState() 函数保存的绘图状态,不仅包括当前坐标系统的状态,也包括当前设置的填充风格、线条风格、阴影风格等各种绘图状态。但 CGContextSaveGState() 函数不会保存当前绘制的图形。


http://www.aichengxu.com/view/46588



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值