2013-11-09 2 views
3

일부 코드를 게시하지도 않은 바보처럼 느껴지지만 iOS7 Text Kit에 Text Folding 지원이 추가되었다는 기사가 여러 번 나온 후 텍스트를 접을 수 있도록 텍스트에 설정할 샘플 코드 나 속성을 실제로 찾을 수 없습니다. 설명서가 음소거로 보입니다. iOS 7에서 텍스트를 어떻게 접을 수 있습니까?

http://asciiwwdc.com/2013/sessions/220

나를 표시 그때 자신의 텍스트 컨테이너에 텍스트의 영역을 설정 생각한다/숨기기 아마도 setTextContainer 오버라이드 (override)하여, : forGlyphRange :

내가 어디서나 가까이 오전?

감사

답변

6

가 사용자 정의 텍스트 잘림을 수행 할 때 그것에 대해 조금 회담 WWDC 2013 비디오가있다. 기본적으로 당신은 그것은 나에게 너무 많은 사실 이것에 대한 코드를 마련하기 위해 애 쓰고 걸린 NSLayoutManagerDelegate 방법을 layoutManager: shouldGenerateGlyphs: properties: characterIndexes: font: forGlyphRange: 을 구현하지만, 여기 hideNotes

-(NSUInteger)layoutManager:(NSLayoutManager *)layoutManager shouldGenerateGlyphs:(const CGGlyph *)glyphs 
     properties:(const NSGlyphProperty *)props characterIndexes:(const NSUInteger *)charIndexes 
      font:(UIFont *)aFont forGlyphRange:(NSRange)glyphRange { 

    if (self.hideNotes) { 
     NSGlyphProperty *properties = malloc(sizeof(NSGlyphProperty) * glyphRange.length); 
     for (int i = 0; i < glyphRange.length; i++) { 
      NSUInteger glyphIndex = glyphRange.location + i; 
      NSDictionary *charAttributes = [_textStorage attributesAtIndex:glyphIndex effectiveRange:NULL]; 
      if ([[charAttributes objectForKey:CSNoteAttribute] isEqualToNumber:@YES]) { 
       properties[i] = NSGlyphPropertyNull; 
      } else { 
       properties[i] = props[i]; 
      } 
     } 
     [layoutManager setGlyphs:glyphs properties:properties characterIndexes:charIndexes font:aFont forGlyphRange:glyphRange]; 
     return glyphRange.length; 
    } 

    [layoutManager setGlyphs:glyphs properties:props characterIndexes:charIndexes font:aFont forGlyphRange:glyphRange]; 
    return glyphRange.length; 
} 

NSLayoutManager 방법 setGlyphs: properties: characterIndexes: font: forGlyphRange: 기본 구현에서 호출되는 속성을 기준으로 내 구현입니다 기본적으로 모든 작업을 수행합니다. 반환 값은 실제로 생성 할 글리프 수입니다. 반환 값이 0이면 레이아웃 관리자에게 기본 구현을 수행하므로 전달되는 글리프 범위의 길이를 반환합니다. 메서드의 주요 부분은 모든 문자를 통과합니다. 텍스트 스토리지 및 특정 속성이있는 경우 관련 속성을 레이아웃 관리자에게 표시하지 않도록 NSGlyphPropertyNull로 설정합니다. 그렇지 않으면 속성을 전달 된 항목으로 설정합니다.

+0

더 좋은 방법은 없지만 attributesAtIndex의 위험은 없습니다. 글리프가 1 : 1을 문자로 매핑하지 않으면 예상되는 값을 제공하지 않습니까? – griotspeak

+2

글리프와 문자 인덱스가 일치하지 않게하려면 glyphIndex가 "glyphRange.location + i"대신 "charIndexes [i]"여야한다고 생각합니다. 또한 glyphIndex는 characterIndex로 이름을 바꿀 수 있습니다. – user965972

관련 문제