관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] NSTextAttachment 개념 (문자열에 이미지 넣는 방법) 본문

iOS 응용 (swift)

[iOS - swift] NSTextAttachment 개념 (문자열에 이미지 넣는 방법)

jake-kim 2024. 8. 26. 01:18

문자열 사이에 붙인 이미지

문자열에 이미지 넣는 방법

  • NSTextAttachment 사용

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

  • NSAttributedString에 attachment를 가지고 초기화할 수 있는데, 이 때 attachemnt에 이미지를 넣어서 이 것을 사용하면 텍스트에 붙이기가 가능
    • 1. NSTextAttachment에 image, 크기를 입력
    • 2. NSAttributedString에 위 attachment를 가지고 초기화
    • 3. 위 NSAttributedString을 또 다른 문자열로 구성된 NSAttributedString에 append하면 합치기

직접 구현해보기

  • 1. NSTextAttachment에 image, 크기를 입력
    • height를 50으로할때 이 비율을 기준으로 width도 정해지게끔 처리
let imageAttachment = NSTextAttachment()
imageAttachment.image = UIImage(named: "sample")

let imageAspectRatio = imageAttachment.image!.size.width / imageAttachment.image!.size.height
let imageHeight = 50.0
let imageWidth = imageHeight * imageAspectRatio
imageAttachment.bounds = CGRect(x: 0, y: -5, width: imageWidth, height: imageHeight)
  • 2. NSAttributedString에 위 attachment를 가지고 초기화
let imageString = NSAttributedString(attachment: imageAttachment)
  • 3. 위 NSAttributedString을 또 다른 문자열로 구성된 NSAttributedString에 append하면 합치기
let attributedString = NSMutableAttributedString(string: "이미지 붙이기 예제 ")
attributedString.append(imageString)
attributedString.append(NSAttributedString(string: "입니다."))

label.attributedText = attributedString

 

완성)

문자열 사이에 붙인 이미지

* 전체 코드

import UIKit

class ViewController: UIViewController {
    private let label = {
        let l = UILabel()
        l.textColor = .black
        l.font = .systemFont(ofSize: 24)
        l.translatesAutoresizingMaskIntoConstraints = false
        return l
    }()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        view.addSubview(label)
        NSLayoutConstraint.activate([
            label.centerYAnchor.constraint(equalTo: view.centerYAnchor),
            label.centerXAnchor.constraint(equalTo: view.centerXAnchor),
        ])
        
        let imageAttachment = NSTextAttachment()
        imageAttachment.image = UIImage(named: "sample")
        
        let imageAspectRatio = imageAttachment.image!.size.width / imageAttachment.image!.size.height
        let imageHeight = 50.0
        let imageWidth = imageHeight * imageAspectRatio
        imageAttachment.bounds = CGRect(x: 0, y: -5, width: imageWidth, height: imageHeight)
        
        let imageString = NSAttributedString(attachment: imageAttachment)
        
        let attributedString = NSMutableAttributedString(string: "이미지 붙이기 예제 ")
        attributedString.append(imageString)
        attributedString.append(NSAttributedString(string: "입니다."))
        
        label.attributedText = attributedString
    }
}

* 참고

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

Comments