2016-08-24 4 views
0

У меня есть текст, который содержит emoji в нем, мы можем отображать его правильно, выполнив кодирование и декодирование строки, чего мне нужно добиться, чтобы увеличить размер шрифта только emoji в текст, как на картинке ниже,Как определить emoji и изменить размер шрифта

enter image description here

Я получил представление о том, чтобы определить диапазон всех смайликов, а также поставки в NSAttributedString с увеличенным размером шрифта. Теперь я не знаю, как я могу определить диапазон emojis в данной строке?

Благодаря

+0

вы можете изменить атрибуты для набора emojis в строке. – 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. Сначала найдите NSRange всех emoji в строке, используя NSString-RemoveEmoji функция isEmoji и хранить в массиве.
  2. Поставка выбранного диапазона для применения больше FONT SIZE для символов в ассортименте.
  3. Наконец, присвойте сгенерированный атрибутный текст этикетке.

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

Я использую два макроса для кодирования и декодирования Emoji-х так как мне нужно, чтобы сохранить эти значения на сервер и читать через API, ниже макросы.

#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 в мой ответ, чтобы определить, является ли строка emoji или нет, если да, сохраняя диапазон строки и увеличивая размер шрифта. Мой ответ завершен, ничего лишнего. – 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 "]; 

попробовать те. надеюсь, это поможет вам.

+0

Может быть, количество эможи не только это, даже если у него могут быть новые эможи, я считаю, что вы не поняли мой вопрос. – iphonic

+0

как идея, поместите все 'возможно'' 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

Как вышеприведенный код увеличит FONT SIZE emoji? – 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. Положите все возможные Emoji (в ваше приложение использует) в массив.
  2. Поиск emoji в строке из массива. Если найдено, примените атрибут Emoji.
  3. Напишите способ, который принимает код emoji и возвращает атрибут emoji.

Надеюсь, эта информация поможет вам лучше.

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

Find out if Character in String is emoji?

+0

\ u {1F600} - Это уникод emoji. Вы можете найти unicode для http://onicode.org/emoji/charts/full-emoji-list.html для emoji. –

+0

Я знаю, как это сделать, см. Мой вопрос. Дело в том, как вы можете обнаружить '\ u {1F600}'? – iphonic

+0

Проверьте мой отредактированный ответ и Два URL-адреса в нижней части решения вашей проблемы –

Смежные вопросы