2016-08-24 4 views
0

Ich habe Text, der Emoji enthält, können wir es korrekt anzeigen, indem Sie Codierung und Decodierung der Zeichenfolge, was ich erreichen muss, ist die Schriftgröße von nur Emoji in der Text wie in Bild unten,Wie erkenne ich Emoji und ändere die Schriftgröße

enter image description here

ich eine Idee habe die Reichweite aller Emojis und Versorgung in NSAttributedString mit erhöhter Schriftgröße zu bestimmen. Jetzt bin ich aus der Idee, wie kann ich Reichweite von Emojis in einer gegebenen Schnur feststellen?

Dank

+0

Sie können die Attribute für eine Reihe von Emojis in der Zeichenfolge ändern. – holex

Antwort

0

Dank an alle, die beantwortet, aber keiner war vollständige Antwort obwohl @ Raj Vorschlag NSString-RemoveEmoji mir um geholfen, die Lösung für dieses Ziel zu erreichen, ist es hier, es für jede Art funktioniert von Emojis

-(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; 
} 

Beschreibung

  1. Suchen Sie zuerst NSRange von allen Emoji in der Zeichenfolge, indem Sie NSString-RemoveEmoji Funktion verwenden, und in Array speichern.
  2. Geben Sie den abgerufenen Bereich an, um die Zeichen FONT SIZE auf Zeichen im Bereich anzuwenden.
  3. Schließlich den generierten attributierten Text dem Label zuweisen.

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

ich zwei Makros zur Codierung und Decodierung Emoji ist, da ich diese Werte auf Server speichern müssen und durch api zu lesen, unten sind die Makros.

#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] 

Ich hoffe, es hilft jedem, der nach einer ähnlichen Lösung sucht.

Prost, und danke an alle.

+0

Wie haben Sie konvertieren finden Emojis Methode, bitte teilen –

+0

@MridulGupta Ich erinnere mich nicht genau, aber ich habe nichts konvertiert, ich verwendet NSString + RemoveEmoji Kategorie in meine Antwort, um festzustellen, ob die Zeichenfolge Emoji ist oder nicht, wenn ja, Speichern des Bereichs der Zeichenfolge und Erhöhen der Schriftgröße. Meine Antwort ist vollständig, es gibt nichts extra. – iphonic

1

Sie es direkt wie unten oder

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

oder Sie können

[mystring is isEqualToString:"I believe "]; 

verwenden können versuchen, diese verwenden. hoffe, das wird dir helfen.

+0

Es kann eine Reihe von Emoji nicht nur das, auch neue Emojis haben, ich glaube, du hast meine Frage nicht verstanden. – iphonic

+0

als eine Idee, legen Sie alle 'möglich' 'Emoji' zu einem Array, und überprüfen Sie dann mit Ihren Strings Emoji ist, die enthält oder nicht. –

+0

Sorry aus Versehen Ich habe diese Antwort statt meiner bearbeitet. Plz ändere es wie vorher !! – Lion

1

Ich habe eine Demo gemacht, Sie Emoji aus dem String erkennen kann, wie unten,

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

Wie der obige Code wird die FONT-Größe von Emoji erhöhen? – iphonic

+0

Überprüfen Sie meine Antwort jetzt. Ich habe es ersetzt !!! – Lion

+0

Danke, aber was ist 'canBeConvertedToEncoding', können Sie den vollständigen Code aufstellen? – iphonic

1

Ich habe das gleiche getan wie

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 

Sie können die Schriftart und Schriftgröße ändern maßstabs das Emoji.

See my output

  1. alle möglichen Put Emoji die (Ihre Anwendung verwendet) in einem Array.
  2. Suche nach Emoji in String aus Array.Wenn gefunden, zugewiesenen Emoji.
  3. Schreiben Sie eine Methode, die Emoji-Code akzeptiert und attributierten Emoji-Text zurückgibt.

Hoffe, diese Info wird Ihnen auf bessere Weise helfen.

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

Find out if Character in String is emoji?

+0

\ u {1F600} - Dies ist der Emoji-Unicode. Du findest Unicode für Emojis http://unicode.org/emoji/charts/full-emoji-list.html –

+0

Ich weiß, wie das geht, siehe meine Frage. Die Sache ist, wie können Sie '\ u {1F600}' entdecken? – iphonic

+0

Überprüfen Sie meine bearbeitete Antwort und zwei URL in der unteren Seite ist Ihr Problem zu lösen –

Verwandte Themen