2016-08-24 3 views
0

나는 이모티콘이 포함 된 텍스트를 가지고 있습니다. 인코딩과 디코딩을 통해 올바르게 표시 할 수 있습니다. 이모티콘 만 글꼴 크기를 늘리면됩니다. 증가 글꼴 크기 NSAttributedString에서 나는 모든 이모티콘의 범위를 결정하기 위해 아이디어를 가지고이모티콘을 감지하고 글꼴 크기를 변경하는 방법

enter image description here

아래 이미지처럼 텍스트 및 공급. 이제 주어진 문자열에서 이모티콘의 범위를 어떻게 감지 할 수 있을지 생각하지 못했습니다.

감사

+0

문자열에서 이모티콘 세트의 속성을 변경할 수 있습니다. – holex

답변

0

감사합니다 이모티콘의

-(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. 마지막으로 생성 된 속성 텍스트를 레이블에 지정하십시오.내가 서버에이 값을 저장하고 API를 통해 읽을 필요가 있기 때문에

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

내가 디코드 이모티콘의 인코딩 두 매크로를 사용하고, 아래의 매크로입니다.

#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

어떻게 이모티콘 찾기 방법을 변경 했습니까? –

+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 "]; 

를 사용할 수는 사람들을보십시오. 이것이 당신에게 도움이되기를 바랍니다.

+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

위의 코드는 어떻게 이모티콘의 글꼴 크기를 증가시킬 것인가? – 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. 배열에서 문자열로 그림 이모티콘 검색. 적용된 그림 이모티콘을 발견 한 경우.
  3. 이모티콘 코드를 허용하고 속성이 설정된 이모티콘 텍스트를 반환하는 방법을 작성합니다.

희망 정보는이 정보가 도움이 될 것입니다. 대답하지만, @NSString-RemoveEmoji을 찾기 위해 주권의 제안이에 대한 해결책을 달성하기 위해 나에게 도움이 비록 아무도 여기에 그것이 어떤 종류의 작품이다, 완전한 답변 없었다 모든 사람에게

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

내 편집 된 답변을 확인하고 아래쪽의 두 URL이 문제를 해결합니다 –

관련 문제