• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 如何将以下有关 CGContext 的代码转换为 Swift3

[复制链接]
菜鸟教程小白 发表于 2022-12-13 00:19:21 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

就像标题一样,我有一些 Objective-c 代码,如何在 Swift3 中使用它们

CGContextSaveGState(context);
CGContextSetTextMatrix(context, CGAffineTransformIdentity);
CGContextTranslateCTM(context, 0, size.height);
CGContextScaleCTM(context, 1.0, -1.0);

CGMutablePathRef path = CGPathCreateMutable();
CGPathAddRect(path, NULL, CGRectMake(0, 0, size.width, size.height));
NSMutableAttributedString *attri = [[NSMutableAttributedString alloc]initWithString:_text];
[attri addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:10] range:NSMakeRange(0, _text.length)];

CTFramesetterRef ctFramesetting = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)attri);
CTFrameRef ctFrame = CTFramesetterCreateFrame(ctFramesetting, CFRangeMake(0, attri.length), path, NULL);
CTFrameDraw(ctFrame, context);

CFRelease(path);
CFRelease(ctFramesetting);
CFRelease(ctFrame);



Best Answer-推荐答案


这是一个干净的 Swift 3 版本:

context.saveGState()
context.textMatrix = CGAffineTransform.identity
context.translateBy(x: 0, y: size.height)
context.scaleBy(x: 1.0, y: -1.0)

let path = CGMutablePath()
let rect = CGRect(x: 0.0, y: 0.0, width: size.width, height: size.height)
path.addRect(rect, transform: .identity)

let attrString = NSMutableAttributedString(string: _text as String)
attrString.addAttribute(NSFontAttributeName,
                        value: UIFont.systemFont(ofSize: 10.0),
                        range: NSRange(location: 0, 
                                       length: _text.length))

let ctFramesetting = CTFramesetterCreateWithAttributedString(attrString)
let ctFrame = CTFramesetterCreateFrame(ctFramesetting, 
                                       CFRangeMake(0, attrString.length), 
                                       path, 
                                       nil)
CTFrameDraw(ctFrame, context)

我建议您不要使用转换器

为什么? 使用转换器,您将

  • 可能在需要常量的地方使用变量
  • 桥接/转换值
  • 显式解包选项
  • 打破 Swift 风格(这取决于你实际使用的风格,但仍然如此)
  • 打破语言惯例

这意味着您将获得需要重构的不稳定/脏代码

关于ios - 如何将以下有关 CGContext 的代码转换为 Swift3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43025984/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap