2016-08-24 5 views
0

私は絵文字を含むテキストを持っています。文字列をエンコードしてデコードすることで正しく表示できます。私が達成する必要があるのは、絵文字のみのフォントサイズを増やすことです増加したフォントサイズとNSAttributedStringで、私はすべての絵文字の範囲を決定するためのアイデアを持っている絵文字を検出してフォントサイズを変更する方法

enter image description here

下の画像のように、テキスト、および供給。今では、指定された文字列の模様の範囲をどのように検出できますか?

おかげ

+0

文字列内の絵文字セットの属性を変更できます。 – holex

答えて

0

答えたが、NSString-RemoveEmojiを見て@ラジの提案は、このためのソリューションを実現するために私を助けたもののどれも完全な答えではなかったすべての人のおかげで、ここではそれがどのような種類の作品であり、絵文字の

-(NSMutableAttributedString *)getAttributedEmojiString:(NSString *)inputString{ 

    NSMutableArray *__block emojiRange=[[NSMutableArray alloc] init]; 
    [inputString enumerateSubstringsInRange:NSMakeRange(0, [inputString length]) 
            options:NSStringEnumerationByComposedCharacterSequences 
           usingBlock: ^(NSString* substring, NSRange substringRange, NSRange enclosingRange, BOOL* stop) { 
      if([substring isEmoji]){ 
       [emojiRange addObject:@{@"startrange":@(substringRange.location),@"endrange":@(enclosingRange.length)}]; 
      } 
    }]; 

    NSMutableAttributedString *mutString=[[NSMutableAttributedString alloc] initWithString:inputString]; 


    [mutString addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:16.0] range:NSMakeRange(0, mutString.length)]; 

    [emojiRange enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { 
     [mutString addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:35.0] range:NSMakeRange([obj[@"startrange"] floatValue], [obj[@"endrange"] floatValue])]; 
    }]; 

    return mutString; 
} 

説明

  1. NSString-RemoveEmojiファンクションisEmojiを使用して、文字列内のすべての絵文字のNSRangeを見つけ、配列に格納します。
  2. 範囲内の文字にフォントサイズを適用するには、取り出した範囲を指定します。
  3. 最後に、生成された属性付きテキストをラベルに割り当てます。

    self.label.attributedText=[self getAttributedEmojiString:EmojiDecoded(originalText)]; 
    

私は以下、サーバにこれらの値を保存し、APIを介して読む必要があるので、私はエンコードするために、2つのマクロを使用してデコード絵文字のマクロです。

#define Encoded(val) [[val dataUsingEncoding:NSUTF8StringEncoding] base64EncodedStringWithOptions:0] 
#define Decoded(val) [[NSString alloc] initWithData:[[NSData alloc] initWithBase64EncodedString:val options:0] encoding:NSUTF8StringEncoding] 

#define EmojiEncoded(val) [[NSString alloc] initWithData:[val dataUsingEncoding:NSNonLossyASCIIStringEncoding] encoding:NSUTF8StringEncoding] 
#define EmojiDecoded(val) [[NSString alloc] initWithData:[val dataUsingEncoding:NSUTF8StringEncoding] encoding:NSNonLossyASCIIStringEncoding] 

似たような解決策を探している人に役立つことを願っています。

乾杯、ありがとうございました。

+0

どのようにemojisメソッドを見つけましたか? –

+0

@MridulGupta私は正確に覚えていませんが、何も変換していません。NSString + RemoveEmoji文字列の範囲を保存し、フォントサイズを増やす場合は、文字列が絵文字かどうかを判断するための私の答え。私の答えは完全で、余分なものは何もありません。 – iphonic

1

あなたが直接、下記または

if ([myString containsString:@""]) 
    { 
     NSLog(@"one"); 
     //change the font size here. 
    } 
else 
    { 
     NSLog(@"fk"); 
     //change the font size here. 
    } 

のようにそれを使用することができたり、

[mystring is isEqualToString:"I believe "]; 

を使用することができますが、それらを試してみてください。これがあなたに役立つことを願っています。私は1つのデモを行った

+0

これだけでなく、新しい絵文字を持つことができる絵文字の数があることがあります、私はあなたが私の質問を理解していないと信じています。 – iphonic

+0

を考えて、すべての 'possible'' emoji'を配列に入れて、あなたの文字列でemojiが含まれているかどうかを確認してください。 –

+0

申し訳ありませんが、私の代わりにこの回答を編集しました。前と同じようにPlzを変更してください! – Lion

1

、あなたは、以下のような文字列から

NSString *str = @"this is and test "; 

NSArray *arr = [str componentsSeparatedByString:@" "]; 

for (int i = 0; i < arr.count; i++) { 

NSString *temp = [arr objectAtIndex:i]; 

if (![temp canBeConvertedToEncoding:NSASCIIStringEncoding]) { 

    NSLog(@"%d",i); 
    NSLog(@"%@",temp); // temp is emoji. You can detect emoji here from your string now you can manage as per your need 


} 


} 
+0

上記のコードは、絵文字のフォントサイズをどのように増加させるのでしょうか? – iphonic

+0

私の答えを今すぐチェックしてください。私はそれを交換した! – Lion

+0

ありがとうございますが、 'canBeConvertedToEncoding'とは何ですか?あなたは完全なコードを書けますか? – iphonic

1

を絵文字を検出することができ、私はあなたがスケールするフォントとフォントサイズを変更することができますよう

let string = "This is emoji Test" 
    let attributedEmoji = NSMutableAttributedString(string: " \u{1F600}", attributes: [NSFontAttributeName:UIFont.systemFontOfSize(60)]) 

    let attribString = NSMutableAttributedString.init(string: string) 
    attribString.appendAttributedString(attributedEmoji) 

    lblEmoji.attributedText = attribString 

を同じことを行っています絵文字。

See my output

  1. 配列にすべての可能な絵文字の(あなたのアプリケーションが使用しています)を入れてください。
  2. emojiを文字列から配列で検索します。適用された絵文字が見つかった場合、
  3. 絵文字コードを受け取り、属性付き絵文字テキストを返すメソッドを作成します。

この情報はより良い方法でお手伝いします。

https://github.com/woxtu/NSString-RemoveEmoji

Find out if Character in String is emoji?

+0

\ u {1F600} - これは絵文字のユニコードです。 emojiのユニコードはhttp://unicode.org/emoji/charts/full-emoji-list.html –

+0

です。私はこの方法を知っています、私の質問を参照してください。あなたは '\ u {1F600}'をどのように検出できますか? – iphonic

+0

私の編集した答えを確認し、下側の2つのURLがあなたの問題を解決しました –

関連する問題