NSTextAttachment

2025. 7. 23. 09:41·iOS/UIKit
반응형

👋 들어가기 전

 

[Text 시리즈 3] TextKit1

👋 들어가기 전이번 텍스트 시리즈는 TextKit1이다. 🙋: TextKit2가 나왔는데 왜 TextKit1을 ?? 뒷북 너무 심하다 😀: 1도 모르는데 2를 봐서 뭐함? 나는 앞에가 이해가 안되면, 뒤에도 이해를 못한 경험

hamp.tistory.com

 

이전 TextKit1 내용에서 먼저 살짝 다뤘던건데, NSTextAttachment를 코드로 한번 살펴보면 좋을 것 같아서 다시 찾아왔다.

 


🏁 학습할 내용

  • 개요
    • 역할
    • 구성
    • 상세 설명
    • 언제 어떤 구성요소를 써야할까?
  • 예제

🔍 개요

공식 문서를 살펴보자.

✅ 역할

NSAttributedString에 첨부 파일(이미지 등)을 넣기 위한 객체

 

  • NSAttributedString 클래스는 “attachment key” 아래에 저장되는 특성(attribute) 값으로 NSTextAttachment 객체를 사용함.
  • 이 객체는 내부에 NSData 객체 또는 FileWrapper 객체를 가지고 있어, 첨부된 파일의 내용을 포함할 수 있음.
  • 해당 클래스의 속성들은 인터페이스에서 이 첨부 파일(attachment)이 어떻게 보일지를 설정함.
  • macOS에서는 첨부된 내용을 그려주는 셀 객체(NSTextAttachmentCellProtocol 프로토콜을 따름) 를 사용함.
  • 이 셀은 이미지 렌더링뿐 아니라 마우스 이벤트 처리도 담당함.

 

🍱 구성

구성 여소 타입
contents Data?
fileType String?
fileWrapper FileWrapper?
image UIImage? / NSImage?
bounds CGRect

 

💡 상세 설명

🔹 content & fileType

  • contents: 첨부된 콘텐츠의 실제 데이터를 담는 Data 객체
  • fileType: 이 콘텐츠의 타입을 나타내는 문자열 (ex: "public.png", "application/pdf")

 

🔹 fileWrapper

  • FileWrapper 객체는 디렉토리/파일 등 파일 시스템 단위로 표현할 수 있음
  • contents보다 복잡한 파일 구조를 표현할 수 있음 (예: 번들, PDF, 패키지)

 

🔹 image

  • 첨부 콘텐츠가 이미지일 때, 해당 이미지를 image를 지정할 때 사용

 

🔹 bounds

  • 이미지 또는 콘텐츠가 렌더링될 크기와 위치

 

📌 언제 어떤 구성요소를 써야할까?

상황 사용할 구성 요소
간단한 이미지 첨부 image, bounds
바이너리 데이터로 첨부 contents, fileType
파일 시스템에서 첨부 fileWrapper

🔥 예제 코드

// 1. 기본 문자열 생성
        let leadingText = NSAttributedString(string: "Hello ", attributes: [
            .font: UIFont.systemFont(ofSize: 18)
        ])
        
        // 2. 이미지 첨부 생성
        let attachment = NSTextAttachment()
        attachment.image = UIImage(systemName: "star.fill")  // 시스템 이미지 사용 예시
        
        // 이미지 크기 조절 (폰트 높이에 맞추기)
        let imageSize: CGFloat = 18
        attachment.bounds = CGRect(x: 0, y: -3, width: imageSize, height: imageSize)
        
        let imageAttrString = NSAttributedString(attachment: attachment)
        
        // 3. 후속 문자열 생성
        let trailingText = NSAttributedString(string: " World!", attributes: [
            .font: UIFont.systemFont(ofSize: 18)
        ])
        
        // 4. 최종 문자열 결합
        let finalText = NSMutableAttributedString()
        finalText.append(leadingText)
        finalText.append(imageAttrString)
        finalText.append(trailingText)
        
        // 5. 적용
        textView.attributedText = finalText
        self.view.addSubview(textView)


출처

https://developer.apple.com/documentation/uikit/nstextattachment

 

NSTextAttachment | Apple Developer Documentation

The values for the attachment characteristics of attributed strings and related objects.

developer.apple.com

 

반응형

'iOS > UIKit' 카테고리의 다른 글

CALayer란  (1) 2025.08.24
margin  (1) 2025.08.03
[Text 시리즈 3] TextKit1  (5) 2025.07.21
[Text 시리즈 2] Font Metrics 와 Glyph metrics  (5) 2025.07.18
HitTest와 touchesBegan은 무슨 관계가 있을까?  (0) 2025.05.30
'iOS/UIKit' 카테고리의 다른 글
  • CALayer란
  • margin
  • [Text 시리즈 3] TextKit1
  • [Text 시리즈 2] Font Metrics 와 Glyph metrics
Hamp
Hamp
남들에게 보여주기 부끄러운 잡다한 글을 적어 나가는 자칭 기술 블로그입니다.
  • Hamp
    Hamp의 분리수거함
    Hamp
  • 전체
    오늘
    어제
    • 분류 전체보기 (325) N
      • CS (30)
        • 객체지향 (2)
        • Network (7)
        • OS (6)
        • 자료구조 (1)
        • LiveStreaming (3)
        • 이미지 (1)
        • 잡다한 질문 정리 (0)
        • Hardware (2)
        • 이론 (6)
        • 컴퓨터 그래픽스 (0)
      • Firebase (3)
      • Programing Langauge (41)
        • swift (34)
        • python (6)
        • Kotlin (1)
      • iOS (133) N
        • UIKit (37)
        • Combine (1)
        • SwiftUI (33) N
        • Framework (7)
        • Swift Concurrency (22)
        • Tuist (6)
        • Setting (11)
        • Modularization (1)
        • Instruments (6)
      • PS (59)
        • 프로그래머스 (24)
        • 백준 (13)
        • LeetCode (19)
        • 알고리즘 (3)
      • Git (18)
        • 명령어 (4)
        • 이론 (2)
        • hooks (1)
        • config (2)
        • action (7)
      • Shell Script (2)
      • Linux (6)
        • 명령어 (5)
      • Spring (20)
        • 어노테이션 (6)
        • 튜토리얼 (13)
      • CI-CD (4)
      • Android (0)
        • Jetpack Compose (0)
      • AI (9)
        • 이론 (9)
        • MCP (0)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    IOS
    AVFoundation
    property
    백준
    GIT
    Tuist
    프로그래머스
    dfs
    lifecycle
    Spring
    protocol
    SwiftUI
    dp
    dispatch
    CS
    UIKit
    Swift
    투포인터
    boostcamp
    concurrency
  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.0
Hamp
NSTextAttachment
상단으로

티스토리툴바