이전에 공유하기 화면을 띄우는 UIActivityViewController를 알아보았다. 만약, 해당 화면의 썸네일과 타이틀 서브타이틀을 커스터마이징 하고 싶다면, UIActivityItemSource를 채택하여 공유하려는 항목의 프리뷰를 설정할 수 있다.
class ActivityItemSource: NSObject, UIActivityItemSource {
let title: String
let thumbnail: UIImage
init(title: String, thumbnail: UIImage) {
self.title = title
self.thumbnail = thumbnail
}
func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any {
return ""
}
func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivity.ActivityType?) -> Any? {
return ""
}
func activityViewController(_ activityViewController: UIActivityViewController, subjectForActivityType activityType: UIActivity.ActivityType?) -> String {
return title
}
func activityViewController(_ activityViewController: UIActivityViewController, thumbnailImageForActivityType activityType: UIActivity.ActivityType?, suggestedSize size: CGSize) -> UIImage? {
return thumbnail
}
@available(iOS 13.0, *)
func activityViewControllerLinkMetadata(_: UIActivityViewController) -> LPLinkMetadata? {
let metadata = LPLinkMetadata()
metadata.title = title
metadata.imageProvider = NSItemProvider(contentsOf: tumbnail)
return metadata
}
위와 같은 클래스 파일을 하나 만들고, 공유하기가 필요한 ViewController에서 다음과 같이 사용할 수 있다.
let title = "My Title"
let thumbnail = UIImage(named: "myImage")
let activityItemSource = MyActivityItemSource(title: title, thumbnail: thumbnail!)
let activityViewController = UIActivityViewController(activityItems: [activityItemSource], applicationActivities: nil)