2011-11-02 1 views
1

Je dessine du texte dans un CGPath, afin de faire des tests de succès sur le texte, j'utilise CTFrameGetLineOrigins. Voici ce que dit la documentation:Comment déterminer l'origine d'un CGPath?

Chaque CGPoint est l'origine de la ligne correspondante dans le tableau de lignes renvoyé par CTFrameGetLines, par rapport à l'origine du chemin de l'image.

Comment trouver l'origine du chemin de la trame? Les exemples que j'ai trouvés sauvegardent tous l'origine du chemin lorsque le chemin est initialement créé. J'ai deux problèmes avec ceci:

  1. La création de mon chemin est assez éloignée de l'endroit où je fais le test de coup. Je devrais m'assurer que je passe autour d'un CGPoint en plus du CGPath. Laid, mais pas insurmontable.
  2. Quelle est l'origine d'une forme qui n'est pas rectangulaire? Quelle est l'origine d'un CGPath circulaire?

Répondre

0

Vous pouvez utiliser CGPathApply pour examiner le chemin complet:

typedef struct { 
    CGPoint origin; 
    BOOL found; 
} MySearchData; 

void MyApplierFunction (void* info, const CGPathElement* element) { 
    MySearchData* searchData = (MySearchData *) info; 
    if (! searchData->found) { 
    searchData->origin = element->points[0]; 
    searchData->found = YES; 
    } 
} 

CGPoint GetPathOrigin (CGPathRef path) { 
    MySearchData searchData = { CGPointZero, NO }; 
    CGPathApply(path, (void *) &searchData, &MyApplierFunction); 
    return searchData.origin; 
} 
+0

Il fonctionne certainement pour CGPaths rectangulaires. Cela fonctionnera-t-il également pour d'autres formes? Cela semble dépendre de l'obtention de l'élément de chemin en bas à gauche en premier. – kubi

+0

Je ne pense pas que vous puissiez supposer quoi que ce soit à propos du premier point par rapport à la forme originale, donc vous devrez peut-être parcourir tous les points pour trouvez le "coin" que vous cherchez. – Tony