티스토리 뷰


텍스트키트는 iOS 7의 일부분으로 발표되었으나 전통적 의미의 프레임워크는 아니다.

기존의 클래스들을 강화하여 NSAttributedString 을 쉽게 다룰 수 있게 설계되었다.



NSLayoutManager


NSTextStorage 클래스의 객체에 저장되어 있는 문자들의 레이아웃과 출력을 담당한다.

복잡한 텍스트 레이아웃을 생성하기 위해

여러 개의 UITextView 객체를 함께 이용해 렌더링할 때도 이용할 수 있다.

NSLayoutManager 는 NSTextContainer 클래스의 객체를 

추가, 삭제, 정렬 등의 작업을 할 수 있는 여러 메소드들을 가지고 있다.

또한 NSTextStorage 객체를 프로퍼티로 갖고 있다.



동적 링크 탐지



UITextView 에서 가능하며 (UILabel 은 불가)

.xib 에서 Data Detectors 를 이용하는 방법도 있고, 코드로 지정할 수도 있다.


[self.textView setDataDetectorTypes:UIDataDetectorTypes];


typedef NS_OPTIONS(NSUInteger, UIDataDetectorTypes) {

    UIDataDetectorTypePhoneNumber = 1 << 0,

    UIDataDetectorTypeLink = 1 << 1,

    UIDataDetectorTypeAddress NS_ENUM_AVAILABLE_IOS(4_0) = 1 << 2,

    UIDataDetectorTypeCalendarEvent NS_ENUM_AVAILABLE_IOS(4_0) = 1 << 3,

    UIDataDetectorTypeShipmentTrackingNumber NS_ENUM_AVAILABLE_IOS(10_0) = 1 << 4, // 우편물 배송(?)

    UIDataDetectorTypeFlightNumber NS_ENUM_AVAILABLE_IOS(10_0) = 1 << 5,

    UIDataDetectorTypeLookupSuggestion NS_ENUM_AVAILABLE_IOS(10_0) = 1 << 6

    UIDataDetectorTypeNone          = 0,               // Disable detection (Default)

    UIDataDetectorTypeAll           = NSUIntegerMax

} __TVOS_PROHIBITED;


UITextViewDelegate 에서 url 이벤트를 탐지해 사용자에게 먼저 안내를 줄 수도 있다. (shouldInteractWithURL ~)



선택 탐지


구현하기 복잡하지만 텍스트를 정교하게 다뤄야하는 앱에서 종종 필요하다.

NSLayoutManager 를 이용하게 된다.


예를들면, 

1. touchBegin 과 같은 곳에서 NSLayoutManager 의 메소드를 호출한다.

- (NSUInteger)characterIndexForPoint:(CGPoint)point

                     inTextContainer:(NSTextContainer *)container

fractionOfDistanceBetweenInsertionPoints:(nullable CGFloat *)partialFraction


2. 해당 index 를 받아와 특정 행동을 취한다.




배제 영역


배제 영역은 텍스트를 줄 중간에 위치하는 이미지나 다른 객체를 피해서 출력할 수 있게 해준다.

exclusionPaths 를 지정해주면 그 외의 곳에만 텍스트가 존재하게 된다.


UIBezierPath *circle = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, 100, 100)];

self.textView.textContainer.exclusionPaths = @[ circle ];





NSAttributedString 속성


(http://j2enty.me/archives/60)




UIKIT_EXTERN NSString * const NSFontAttributeName NS_AVAILABLE(10_0, 6_0);               

UIKIT_EXTERN NSString * const NSParagraphStyleAttributeName NS_AVAILABLE(10_0, 6_0);     

UIKIT_EXTERN NSString * const NSForegroundColorAttributeName NS_AVAILABLE(10_0, 6_0);    

UIKIT_EXTERN NSString * const NSBackgroundColorAttributeName NS_AVAILABLE(10_0, 6_0);    

UIKIT_EXTERN NSString * const NSLigatureAttributeName NS_AVAILABLE(10_0, 6_0);           

UIKIT_EXTERN NSString * const NSKernAttributeName NS_AVAILABLE(10_0, 6_0);               

UIKIT_EXTERN NSString * const NSStrikethroughStyleAttributeName NS_AVAILABLE(10_0, 6_0); 

UIKIT_EXTERN NSString * const NSUnderlineStyleAttributeName NS_AVAILABLE(10_0, 6_0);     

UIKIT_EXTERN NSString * const NSStrokeColorAttributeName NS_AVAILABLE(10_0, 6_0);        

UIKIT_EXTERN NSString * const NSStrokeWidthAttributeName NS_AVAILABLE(10_0, 6_0);        

UIKIT_EXTERN NSString * const NSShadowAttributeName NS_AVAILABLE(10_0, 6_0);             

UIKIT_EXTERN NSString *const NSTextEffectAttributeName NS_AVAILABLE(10_10, 7_0);         

UIKIT_EXTERN NSString * const NSAttachmentAttributeName NS_AVAILABLE(10_0, 7_0);         

UIKIT_EXTERN NSString * const NSLinkAttributeName NS_AVAILABLE(10_0, 7_0);               

UIKIT_EXTERN NSString * const NSBaselineOffsetAttributeName NS_AVAILABLE(10_0, 7_0);     

UIKIT_EXTERN NSString * const NSUnderlineColorAttributeName NS_AVAILABLE(10_0, 7_0);     

UIKIT_EXTERN NSString * const NSStrikethroughColorAttributeName NS_AVAILABLE(10_0, 7_0); 

UIKIT_EXTERN NSString * const NSObliquenessAttributeName NS_AVAILABLE(10_0, 7_0);        

UIKIT_EXTERN NSString * const NSExpansionAttributeName NS_AVAILABLE(10_0, 7_0);          

UIKIT_EXTERN NSString * const NSWritingDirectionAttributeName NS_AVAILABLE(10_6, 7_0);   

UIKIT_EXTERN NSString * const NSVerticalGlyphFormAttributeName NS_AVAILABLE(10_7, 6_0);  



공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함