2012-04-02 6 views
4

Bitte wie können wir Pfad von bestimmten arabischen Französisch Brief bekommen? Ich habe gerade herausgefunden, dass CTFontCreatePathForGlyph CGPathRef gefällt, aber es wird die Gliederung von Text sein.CGPathRef von string

Ich brauche diesen realen Textpfad eine Textzeichenanimation zeigt ..

jede Hilfe bitte

+0

Warum willst du Pfad zu String konvertieren ?? U kann die Aufgabe direkt auf dem zurückgegebenen Pfad animieren :) – DivineDesert

+0

ich werde nicht konvertieren suchen, um den Pfad einer bestimmten Zeichenfolge mein Objekt zu bekommen, ist eine Anwendung für meine Projekt Schule wie Brief Schule oder ich writeword –

+0

zu erklären, suchen in dieser App http://letterschool.com/ Ich möchte das gleiche denken, wie sie es tun, um den Brief zu schreiben "Entschuldigung für mein Bett Englisch" –

Antwort

10

Sie nicht ur Weg überhaupt in NSString umgewandelt werden müssen.

Sie können den Pfad für Text wie folgt erstellen:

CTFontRef font = CTFontCreateWithName(CFSTR("Helvetica-Bold"), 72.0f, NULL); 
NSDictionary *attrs = [NSDictionary dictionaryWithObjectsAndKeys: 
         (id)font, kCTFontAttributeName, 
         nil]; 
NSAttributedString *attrString = [[NSAttributedString alloc] initWithString:@"Hello World!" 
                   attributes:attrs]; 
CTLineRef line = CTLineCreateWithAttributedString((CFAttributedStringRef)attrString); 
CFArrayRef runArray = CTLineGetGlyphRuns(line); 

// for each RUN 
for (CFIndex runIndex = 0; runIndex < CFArrayGetCount(runArray); runIndex++) 
{ 
    // Get FONT for this run 
    CTRunRef run = (CTRunRef)CFArrayGetValueAtIndex(runArray, runIndex); 
    CTFontRef runFont = CFDictionaryGetValue(CTRunGetAttributes(run), kCTFontAttributeName); 

    // for each GLYPH in run 
    for (CFIndex runGlyphIndex = 0; runGlyphIndex < CTRunGetGlyphCount(run); runGlyphIndex++) 
    { 
     // get Glyph & Glyph-data 
     CFRange thisGlyphRange = CFRangeMake(runGlyphIndex, 1); 
     CGGlyph glyph; 
     CGPoint position; 
     CTRunGetGlyphs(run, thisGlyphRange, &glyph); 
     CTRunGetPositions(run, thisGlyphRange, &position); 

     // Get PATH of outline 
     { 
      CGPathRef letter = CTFontCreatePathForGlyph(runFont, glyph, NULL); 
      CGAffineTransform t = CGAffineTransformMakeTranslation(position.x, position.y); 
      CGPathAddPath(letters, &t, letter); 
      CGPathRelease(letter); 
     } 
    } 
} 
CFRelease(line); 

Dies ist, wie Sie einen Pfad erstellen, für Codebeispiel bitte this link beziehen. Dieser Code ist ein Teil dieses Beispielprojekts. Hoffe, das hilft dir

+0

Danke :), aber mit dieser Methode werden wir den Umriss Pfad. –

+0

Ya ich weiß .. Aber das ist die Art, wie Sie Ihre Arbeit erledigen können. Natürlich müssen Sie den Code ändern, um Ihre Anforderungen zu erfüllen. – DivineDesert

+0

wie ich es ändern kann, um das richtige Ergebnis zu erhalten, zum Beispiel Buchstabe A mit deiner Methode besteht aus 12 Zeilen, aber in Wirklichkeit sind 3 Zeilen Entschuldigung für mein schlechtes Englisch –