您可以循環當前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
}
}
'CTLineGetOffsetForStringIndex'是一個函數,而不是一個方法。 – 2011-02-09 19:29:21