2010-07-23 63 views
2

我正在開發一個應用程序,其中使用Core Text進行佈局。我用CTFrameSetter來繪製文本。我在文本中插入了一個空白字符'\ ufffc'。現在我想要確定這個空白字符的位置,即它的x,y座標。我無法找到任何功能來確定任何特定角色的位置。確定包含特定字符的CTLine

我試着用CTLineGetOffsetForStringIndex(CTLineRef line, CFIndex charIndex, CGFloat* secondaryOffset);找到位置,但是我不能完全理解這個方法的工作原理。

任何人都可以提供一些關於這個問題的指針嗎?

+0

'CTLineGetOffsetForStringIndex'是一個函數,而不是一個方法。 – 2011-02-09 19:29:21

回答

0

您可以循環當前CTFrameRef的所有CTLines,併爲每個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 
     } 
    } 
+0

你如何檢查'CTRun'內容? – testing 2017-08-28 11:00:54