iOS 응용 (swift)
[iOS - swift] NSTextAttachment 개념 (문자열에 이미지 넣는 방법)
jake-kim
2024. 8. 26. 01:18
문자열에 이미지 넣는 방법
- 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