iOS/UIKit

NSTextAttachment

Hamp 2025. 7. 23. 09:41
반응형

👋 들어가기 전

 

[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

 

반응형