确定包含特定字符的CTLine

发布于 2024-09-11 06:26:31 字数 291 浏览 3 评论 0原文

我正在开发一个应用程序,其中使用核心文本进行布局。我已经使用 CTFrameSetter 来绘制文本。我在文本中插入了一个空白字符“\ufffc”。现在我想要的是确定这个空白字符的位置,即它的 x,y 坐标。我无法找到任何函数来确定任何特定字符的位置。

我尝试使用 CTLineGetOffsetForStringIndex( CTLineRef line, CFIndex charIndex, CGFloat* secondaryOffset ); 来查找位置,但我无法完全理解此方法的工作原理。

有人可以就这个问题给我一些指示吗?

I am developing an Application in which I am using Core Text for layout purpose. I have used CTFrameSetter to draw the text.I have inserted a blank character '\ufffc' in my text. Now what i want is to determine the position of this blank character i.e. its x, y coordinates. I have not been able to find any function to determine the position of any specific character.

I tried using CTLineGetOffsetForStringIndex( CTLineRef line, CFIndex charIndex, CGFloat* secondaryOffset ); for finding the position, but I couldn't fully understand the working of this method.

Can anyone provide me some pointers on this issue?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

绝情姑娘 2024-09-18 06:26:31

您可以循环当前 CTFrameRef 的所有 CTLine,并且对于每个 ctline,获取 CTRun 并检查该 CTRun 是否是您的。简单的代码

 NSArray *lines = (NSArray*)CTFrameGetLines(workFrame);
 NSInteger count = [lines count];
 CGPoint *origins = (CGPoint*)malloc(count * sizeof(CGPoint));
 CTFrameGetLineOrigins(workFrame, CFRangeMake(0, count), origins); 

 for (int i = 0; i < lines.count; i++) {
      CTLineRef line = (CTLineRef)[lines objectAtIndex:i];
      CFRange cfRange = CTLineGetStringRange(line);//the string-range

       NSArray * runArray = (NSArray *)CTLineGetGlyphRuns(line);

        int runIndex = 0;
        for (id runObj in runArray) {
          CTRunRef run = (CTRunRef)runObj;          
          CFRange runRange = CTRunGetStringRange(run);
          CGFloat xOffset = CTLineGetOffsetForStringIndex(line, runRange.location + runRange.length, NULL);
          //checks if the crrun's text is your space
        }
   }

you can loop all the CTLines of the current CTFrameRef, and for each ctline, get the CTRun and check if that CTRun is yours. simple code

 NSArray *lines = (NSArray*)CTFrameGetLines(workFrame);
 NSInteger count = [lines count];
 CGPoint *origins = (CGPoint*)malloc(count * sizeof(CGPoint));
 CTFrameGetLineOrigins(workFrame, CFRangeMake(0, count), origins); 

 for (int i = 0; i < lines.count; i++) {
      CTLineRef line = (CTLineRef)[lines objectAtIndex:i];
      CFRange cfRange = CTLineGetStringRange(line);//the string-range

       NSArray * runArray = (NSArray *)CTLineGetGlyphRuns(line);

        int runIndex = 0;
        for (id runObj in runArray) {
          CTRunRef run = (CTRunRef)runObj;          
          CFRange runRange = CTRunGetStringRange(run);
          CGFloat xOffset = CTLineGetOffsetForStringIndex(line, runRange.location + runRange.length, NULL);
          //checks if the crrun's text is your space
        }
   }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文