私は絵文字を含むテキストを持っています。文字列をエンコードしてデコードすることで正しく表示できます。私が達成する必要があるのは、絵文字のみのフォントサイズを増やすことです増加したフォントサイズとNSAttributedString
で、私はすべての絵文字の範囲を決定するためのアイデアを持っている絵文字を検出してフォントサイズを変更する方法
下の画像のように、テキスト、および供給。今では、指定された文字列の模様の範囲をどのように検出できますか?
おかげ
私は絵文字を含むテキストを持っています。文字列をエンコードしてデコードすることで正しく表示できます。私が達成する必要があるのは、絵文字のみのフォントサイズを増やすことです増加したフォントサイズとNSAttributedString
で、私はすべての絵文字の範囲を決定するためのアイデアを持っている絵文字を検出してフォントサイズを変更する方法
下の画像のように、テキスト、および供給。今では、指定された文字列の模様の範囲をどのように検出できますか?
おかげ
答えたが、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;
}
説明
isEmoji
を使用して、文字列内のすべての絵文字のNSRangeを見つけ、配列に格納します。最後に、生成された属性付きテキストをラベルに割り当てます。
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]
似たような解決策を探している人に役立つことを願っています。
乾杯、ありがとうございました。
どのようにemojisメソッドを見つけましたか? –
@MridulGupta私は正確に覚えていませんが、何も変換していません。NSString + RemoveEmoji文字列の範囲を保存し、フォントサイズを増やす場合は、文字列が絵文字かどうかを判断するための私の答え。私の答えは完全で、余分なものは何もありません。 – iphonic
あなたが直接、下記または
if ([myString containsString:@""])
{
NSLog(@"one");
//change the font size here.
}
else
{
NSLog(@"fk");
//change the font size here.
}
のようにそれを使用することができたり、
[mystring is isEqualToString:"I believe "];
を使用することができますが、それらを試してみてください。これがあなたに役立つことを願っています。私は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
}
}
を絵文字を検出することができ、私はあなたがスケールするフォントとフォントサイズを変更することができますよう
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
を同じことを行っています絵文字。
この情報はより良い方法でお手伝いします。
\ u {1F600} - これは絵文字のユニコードです。 emojiのユニコードはhttp://unicode.org/emoji/charts/full-emoji-list.html –
です。私はこの方法を知っています、私の質問を参照してください。あなたは '\ u {1F600}'をどのように検出できますか? – iphonic
私の編集した答えを確認し、下側の2つのURLがあなたの問題を解決しました –
文字列内の絵文字セットの属性を変更できます。 – holex