Для первого:
int currentCharacterIndex = 12; // You define this.
CFArrayRef lines = CTFrameGetLines(frame);
int currentLine = 0;
for (CTLineRef line in lines) {
currentLine++;
CFRange range = CTLineGetStringRange(line);
if (currentCharacterIndex > range.location)
break;
}
// Current line is now the line that the currentCharacterIndex resides at
Для второго:
CFRange range = CTLineGetStringRange(line);
CFIndex length = range.length; // Number of characters
Не могу быть уверен, что это работает, потому что я их не проверял, но стоит попробовать.