2010-07-07 4 views
4

J'ai un UILabel avec un texte, par exemple l'étiquette peut avoir plusieurs lignes, différentes tailles de police, etc.trouver l'emplacement des caractères spécifiques à UILabel sur iPhone

Question « de Bonjour tout le monde »: Comment puis-je trouver les coordonnées de toutes les lettres "d" dans cet UILabel.

première étape logique est de trouver la position de ces caractères dans la chaîne (UILabel.text), mais comment puis-je traduis cela en coordonnées quand il est en fait tiré sur l'écran

L'idée est de trouver les coordonnées et dessiner quelque chose de personnalisé sur ce personnage (essentiellement pour le couvrir avec une image personnalisée)

+0

Cette [autre réponse] (http://stackoverflow.com/questions/3077109/how-to-check-if-uilabel-is-truncated/3077143#3077143) fournit une partie de ce que vous probablement besoin. – progrmr

Répondre

3

Les outils de base pour mesurer le texte sur l'iPhone sont en UIStringDrawing.h mais aucun d'entre eux ne fait ce dont vous avez besoin. Vous devrez fondamentalement parcourir à travers les sous-chaînes un caractère à la fois mesurant chacun. Quand une ligne s'enroule (le résultat est plus grand), divisez-la après le dernier caractère qui n'a pas été enveloppé et ajoutez la hauteur de la ligne à votre coordonnée y.

- (CGSize)sizeWithFont:(UIFont *)font forWidth:(CGFloat)width lineBreakMode:(UILineBreakMode)lineBreakMode; 
+0

* soupir * ça va être un peu de boulot, mais je suppose que c'est le meilleur pari. Merci pour la réponse! – Nick

1

Les méthodes ont changé depuis la sortie d'iOS 7.0. Essayez cette

- (CGFloat)charactersOffsetBeforeDayPartOfLabel { 
    NSRange range = [[self stringFromDate:self.currentDate] rangeOfString:[NSString stringWithFormat:@"%i",[self dayFromDate:self.currentDate]]]; 
    NSString *chars = [[self stringFromDate:self.currentDate] substringToIndex:range.location]; 
    NSMutableArray *arrayOfChars = [[NSMutableArray alloc]init]; 
    [chars enumerateSubstringsInRange:NSMakeRange(0, [chars length]) options:(NSStringEnumerationByComposedCharacterSequences) usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) { 
     [arrayOfChars addObject:substring]; 
    }]; 
    CGFloat charsOffsetTotal = 0; 
    for (NSString *i in arrayOfChars){ 
     NSDictionary *attributes = @{NSFontAttributeName: [UIFont fontWithName:@"Helvetica Neue" size:16.0f]}; 
     charsOffsetTotal += [i sizeWithAttributes:attributes].width; 
    } 
    return charsOffsetTotal; 
} 
+0

Pourquoi calculeriez-vous la taille de chaque caractère individuel? Pourquoi ne pas simplement obtenir la taille de la sous-chaîne entière à la fois? – rmaddy

Questions connexes