티스토리 뷰
텍스트키트는 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);
'iOS 개발 > iOS' 카테고리의 다른 글
[iOS] Carthage 의 장점 및 사용법 (0) | 2017.02.01 |
---|---|
[iOS] 코드 사이닝 (프로비저닝 프로파일, 인증서) (2) | 2016.12.22 |
[iOS] 안면 인식 (CIDetector) (0) | 2016.11.29 |
[iOS] CoreImage Filter (CIFilter) 사용하기 (0) | 2016.11.28 |
[iOS] UIImage 의 사용 (load, imageView, picker, resize, stretch) (0) | 2016.11.28 |
- Total
- Today
- Yesterday
- docker
- Swift 3.0
- Block
- AWS
- CIImage
- ios
- applicationWillResignActive
- Swift
- Swift 3
- Swfit
- NSManagedObjectContext
- Swift3
- 읽기 좋은 코드가 좋은 코드다
- string
- UIView
- optional
- coredata
- delegate
- RunLoop
- set
- EffectiveObjectiveC
- thread
- CGImage
- Arc
- dictionary
- 꺼내먹어요
- NSManagedObject
- NSManagedObjectModel
- workerThread
- HTTP
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |