Основной текст: визуализация в нечетной форме - PullRequest
4 голосов
/ 28 сентября 2010

Я пытаюсь отобразить текст в форме, которая не является прямоугольником. Следующий код работает, когда я добавляю прямоугольный путь, но не когда я добавляю эллиптический путь. В конечном счете, я хотел бы нарисовать любой путь (L-образную форму и т. Д.), Кому-нибудь повезло с этим?

-(void)drawRect:(CGRect)rect {
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetTextMatrix(context, CGAffineTransformIdentity);

    CGMutablePathRef path = CGPathCreateMutable();
    float w = 200.0;
    float h = 300.0;
    CGRect bounds = CGRectMake(10.0, 10.0, w, h);

    // I draw using only one of the following lines
    CGPathAddRect(path, NULL, bounds); // THIS LINE WILL WORK
    //CGPathAddEllipseInRect(path, NULL, bounds); // THIS LINE WILL CRASH IT


    // Initialize an attributed string.
    CFStringRef string = CFSTR("Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.");
    CFMutableAttributedStringRef attrString = CFAttributedStringCreateMutable(kCFAllocatorDefault, 0);
    CFAttributedStringReplaceString (attrString, CFRangeMake(0, 0), string);

    // Create the framesetter with the attributed string.
    CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString(attrString); 
    CFRelease(attrString);

    // Create the frame and draw it into the graphics context
    CTFrameRef frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, 0), path, NULL);

    // Flip the text
    CGAffineTransform flip = CGAffineTransformMake(1.0, 0.0, 0.0, -1.0, 0, self.frame.size.height);
    CGContextConcatCTM(context, flip);

    CTFrameDraw(frame, context);
    CFRelease(framesetter);
    CFRelease(frame);
}

Любая помощь или идеи будут с благодарностью. Я в тупике.

Ответы [ 2 ]

4 голосов
/ 29 октября 2010

http://lists.apple.com/archives/quartz-dev/2010/Mar/msg00049.html

Проблема заключалась в ошибке документации.Функция не поддерживает непрямоугольный путь в настоящее время.Я надеюсь, что это будет осуществлено в ближайшее время, но это еще не все.

0 голосов
/ 02 апреля 2012

Вы можете нарисовать на любом виде UIBeizerPath, пример кода здесь: https://github.com/erica/iOS-5-Cookbook/tree/master/C10/19-Drawing%20onto%20Paths

...