Установка межстрочного интервала в CTFrame - PullRequest
1 голос
/ 26 января 2012

Я работаю в своего рода генераторе QR-кода, это приложение для Mac.Я знаю, как рисовать текст, но я не знаю, как установить межстрочный интервал.

Мой код:

// Prepare font
    CTFontRef font = CTFontCreateWithName(CFSTR("LucidaSansUnicode"), 16, NULL);

    // Create Path
    CGMutablePathRef gpath = CGPathCreateMutable();
    CGPathAddRect(gpath, NULL, CGRectMake(10, 0, pixelsWidth, pixelsHigh));

    CGContextSetTextDrawingMode (newcontext, kCGTextFill); 
    CGContextSetGrayFillColor(newcontext, 0.0, 1.0);

    // Create an attributed string
    CFStringRef keys[] = { kCTFontAttributeName };
    CFTypeRef values[] = { font };
    CFDictionaryRef attr = CFDictionaryCreate(NULL, (const void **)&keys, (const void **)&values,
                                              sizeof(keys) / sizeof(keys[0]), &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
    CFAttributedStringRef attrString = CFAttributedStringCreate(NULL, stringCode, attr);
    CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)attrString);

    CTFrameRef theFrame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, CFAttributedStringGetLength(attrString)), gpath, NULL); 

    // Draw the string
    CTFrameDraw(theFrame, newcontext);

Я искал, но ничего не нашел.Может быть, я должен использовать CTLine?

Обновление:

Хорошо, я нашел это, но это не решает мою проблему, я хочу меньше 0,0 точки межстрочного интервала.

CTTextAlignment paragraphAlignment = kCTLeftTextAlignment;

    CGFloat maxLine = 0.0;

    CTParagraphStyleSetting setting[2] = {
        {kCTParagraphStyleSpecifierAlignment, sizeof(CTTextAlignment), &paragraphAlignment},
        {kCTParagraphStyleSpecifierLineSpacingAdjustment, sizeof(CGFloat), &maxLine}
    };

    CTParagraphStyleRef paragraphStyle = CTParagraphStyleCreate(setting, 2);

1 Ответ

1 голос
/ 27 февраля 2012

Попробуйте использовать kCTParagraphStyleSpecifierLineHeightMultiple вместо kCTParagraphStyleSpecifierLineSpacingAdjustment. Это сработало для меня. Обратите внимание, что межстрочный интервал 1,0 равен 1,2 * yourLineHeight.

...