6

「Hello World abcdefg」などのテキストを含むUILabelがあります。ラベルには複数の行、異なるフォントサイズなどを含めることができます.

質問: この UILabel のすべての文字「d」の座標を見つけるにはどうすればよいですか。

論理的な最初のステップは、文字列 (UILabel.text) 内のこれらの文字の位置を見つけることですが、実際に画面に描画されたときにそれを座標に変換するにはどうすればよいですか?

アイデアは、それらの座標を見つけて、そのキャラクターの上に何かカスタムを描画することです(基本的にはカスタム画像でカバーします)

4

3 に答える 3

3

iPhone でテキストを測定するための基本的なツールは含まれUIStringDrawing.hていますが、必要な機能を備えたものはありません。基本的に、部分文字列を一度に 1 文字ずつ繰り返し測定する必要があります。行が折り返されると (結果が高くなります)、折り返されなかった最後の文字の後で分割し、行の高さを y 座標に追加します。

- (CGSize)sizeWithFont:(UIFont *)font forWidth:(CGFloat)width lineBreakMode:(UILineBreakMode)lineBreakMode;
于 2010-07-07T01:03:43.577 に答える
0

iOS 7.0 が登場してから方法が変わりました。これを試して

- (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;
}
于 2014-03-17T12:41:55.493 に答える