CoreText实现图文混排

  1. 第一步,引入CoreText.framework框架。
  2. //CoreText  跨平台
  3. 以lable为例
  4.  
  5. NSDictionary *attributes = @{
  6.          NSFontAttributeName: [UIFont systemFontOfSize:14],
  7.          NSForegroundColorAttributeName: [UIColor blackColor],
  8.     };
  9. NSMutableAttributedString *attrtext = [[NSMutableAttributedString alloc] initWithString:text attributes:attributes];

10.//设置文本属性

  1. [attrtext addAttribute:NSUnderlineStyleAttributeName
  2. value:@2
  3. range:NSMakeRange(0, 3)];

15.//Foundation  ---> CoreFoundation

  1. NSString *s = @"tt";
  2. CFStringRef s2 = (__bridge CFStringRef)s;

18.//1.通过NSMutableAttributedString 文本属性对象  构造--->CTFramesetterRef

  1. CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)attrtext);

20.//2.构造CGPath

  1. CGMutablePathRef path = CGPathCreateMutable();

22.//    CGRectInset(<#CGRect rect#>, <#CGFloat dx#>, <#CGFloat dy#>)

  1. CGPathAddRect(path, NULL, self.bounds);

24.//3.通过CTFramesetterRef和CGPath 构造出一个CTFrameRef

  1. CTFrameRef frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, 0), path, NULL);

26.//4.取得绘制的上下文

  1. CGContextRef ctx = UIGraphicsGetCurrentContext();
  2. //坐标系统向下平移当前视图的高度
  3. CGContextTranslateCTM(ctx, 0, CGRectGetHeight(self.bounds));
  4. //缩放倍数为-1,使用坐标指向反方向
  5. CGContextScaleCTM(ctx, 1, -1.0);

32.//5.绘制frame

  1. CTFrameDraw(frame, ctx);
  2. //取得frmae中所有的行
  3. CFArrayRef lines = CTFrameGetLines(frame);
  4. //绘制一行

38.//    CTLineDraw(<#CTLineRef line#>, <#CGContextRef context#>)

  1. CTLineRef line;
  2. CFArrayRef runs = CTLineGetGlyphRuns(line);

42.//    CTRunDraw(<#CTRunRef run#>, <#CGContextRef context#>, <#CFRange range#>)

45.常用开源框架

46.FTCoreText

47.DTCoreText

转载于:https://www.cnblogs.com/SilverWinter/p/SilverWinter_CoreText.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值