0

部分文字列の位置を取得するのに助けが必要です。UILabel の部分文字列を列挙しました。1 つがランダムに「aaaaa」に変更され、色がクリアに変更されます。その文字列の x,y に UIImage を入れたいです。その文字列の幅と高さは簡単に取得できますが、原点を取得できません。これが私のコードです:

  if (cloudWord !=nil)
    {
        [label.text enumerateSubstringsInRange:NSMakeRange(0, [label.text length]) options:NSStringEnumerationByWords usingBlock:^(NSString* word, NSRange wordRange, NSRange enclosingRange, BOOL* stop)
         {
             if ([word isEqualToString:@"aaaaa"])
             {
                 NSLog(@"cloud");
                 [labelText addAttribute:NSForegroundColorAttributeName value:[UIColor clearColor] range:wordRange];
                 [label setAttributedText:labelText];

                 UIImageView *cloudImageView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"playBtn.png"]];
                 [cloudImageView setFrame:CGRectMake(labelText.size.width, labelText.size.height, 40, 40)];

                 [self addSubview:cloudImageView];

             }
         }];
    }
4

2 に答える 2

1

まず、部分文字列の範囲を見つけます。

NSRange range = [myString rangeOfString:subString];

次に、その範囲に先行する部分文字列(インデックス 0 から部分文字列の最初の文字の前のインデックスまで) を取得し、UILabel のフォントでレンダリングされたときのその部分文字列の幅を見つけます。

NSString *prefix = [myString substringToIndex:range.location];
CGSize size = [prefix sizeWithFont:[UIFont systemFontOfSize:fontSize]];
CGPoint p = CGPointMake(size.width, 0);

これにより、UILabel 内の部分文字列の左上隅の (x,y) 座標として p が残ります。画像の表示方法によっては、ラベルのスーパービューの座標系に変換する必要がある場合があります。

これは、1 行の UILabel であると想定しています。UILabel が複数の行にまたがると、さらに複雑になります...

于 2013-08-12T17:47:50.190 に答える