4

長方形ではない形状にテキストをレンダリングしようとしています。次のコードは、長方形のパスを追加すると機能しますが、楕円形のパスを追加すると機能しません。最終的には、任意のパス (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);
}

どんな助けやアイデアも大歓迎です。私は困惑しています。

4

2 に答える 2

4

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

問題はドキュメントのバグでした。この関数は現在、非長方形のパスをサポートしていません。すぐに実装されることを願っていますが、まだ実装されていません。

于 2010-10-29T06:18:54.020 に答える
0

任意の種類の UIBeizerPath で描画できます。サンプル コードは次のとおりです: https://github.com/erica/iOS-5-Cookbook/tree/master/C10/19-Drawing%20onto%20Paths

于 2012-04-02T11:03:28.880 に答える