From 671c6c9c3af20adeab30e3db9be572b4f4766292 Mon Sep 17 00:00:00 2001 From: Jeon Jimin <41153398+JMM00@users.noreply.github.com> Date: Thu, 29 Sep 2022 04:23:51 +0900 Subject: [PATCH 1/3] =?UTF-8?q?feat:=20#59=20-=20RecordDetailView=20?= =?UTF-8?q?=EA=B3=B5=EC=9C=A0=20=EC=95=A1=EC=85=98=20=EC=8B=9C=ED=8A=B8?= =?UTF-8?q?=EC=97=90=20=EC=95=B1=20=EC=9D=B4=EB=A6=84=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Record/RecordDetailView.swift | 37 ++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/Record/RecordDetailView.swift b/Record/RecordDetailView.swift index f06bf7a..c34740c 100644 --- a/Record/RecordDetailView.swift +++ b/Record/RecordDetailView.swift @@ -8,6 +8,7 @@ import SwiftUI import CoreData +import LinkPresentation struct RecordDetailView: View { @@ -167,8 +168,9 @@ struct RecordDetailView: View { } func actionSheet() { + let activityItemMetadata = LinkMetadataManager() let shareImage = self.snapShot() - let activitiViewController = UIActivityViewController(activityItems: [shareImage], applicationActivities: nil) + let activitiViewController = UIActivityViewController(activityItems: [activityItemMetadata, shareImage], applicationActivities: nil) let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene windowScene?.windows.first?.rootViewController?.present(activitiViewController, animated: true, completion: nil) } @@ -234,3 +236,36 @@ struct CDPlayerComp: View { } } } + + +final class LinkMetadataManager: NSObject, UIActivityItemSource { + + var linkMetadata: LPLinkMetadata + + let appTitle = "RE:CORD" + + init(linkMetadata: LPLinkMetadata = LPLinkMetadata()) { + self.linkMetadata = linkMetadata + } +} + +// MARK: - Setup +extension LinkMetadataManager { + /// Creating metadata to population in the share sheet. + func activityViewControllerLinkMetadata(_ activityViewController: UIActivityViewController) -> LPLinkMetadata? { + + linkMetadata.title = appTitle + + return linkMetadata + } + /// Showing empty string returns a share sheet with the minimum requirement. + func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any { + return String() + } + + /// Sharing url of the application. + func activityViewController(_ activityViewController: UIActivityViewController, + itemForActivityType activityType: UIActivity.ActivityType?) -> Any? { + return linkMetadata.url + } +} From 88c644891b832c02c1d1e3c2bc32fafdcc9954fa Mon Sep 17 00:00:00 2001 From: Jeon Jimin <41153398+JMM00@users.noreply.github.com> Date: Thu, 29 Sep 2022 05:11:59 +0900 Subject: [PATCH 2/3] =?UTF-8?q?feat:=20#59=20-=20=EA=B3=B5=EC=9C=A0=20?= =?UTF-8?q?=EC=95=A1=EC=85=98=20=EC=8B=9C=ED=8A=B8=EC=97=90=20'=EB=85=B8?= =?UTF-8?q?=EB=9E=98=EC=A0=9C=EB=AA=A9=20-=20=EC=95=84=ED=8B=B0=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8'=20=EC=84=A4=EB=AA=85=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Record/RecordDetailView.swift | 55 +++++++++++++++++------------------ 1 file changed, 27 insertions(+), 28 deletions(-) diff --git a/Record/RecordDetailView.swift b/Record/RecordDetailView.swift index c34740c..eb65846 100644 --- a/Record/RecordDetailView.swift +++ b/Record/RecordDetailView.swift @@ -167,9 +167,8 @@ struct RecordDetailView: View { } func actionSheet() { - - let activityItemMetadata = LinkMetadataManager() let shareImage = self.snapShot() + let activityItemMetadata = MyActivityItemSource(text: "\(item.title!) - \(item.artist!)" , image: shareImage) let activitiViewController = UIActivityViewController(activityItems: [activityItemMetadata, shareImage], applicationActivities: nil) let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene windowScene?.windows.first?.rootViewController?.present(activitiViewController, animated: true, completion: nil) @@ -237,35 +236,35 @@ struct CDPlayerComp: View { } } - -final class LinkMetadataManager: NSObject, UIActivityItemSource { - - var linkMetadata: LPLinkMetadata - - let appTitle = "RE:CORD" - - init(linkMetadata: LPLinkMetadata = LPLinkMetadata()) { - self.linkMetadata = linkMetadata - } -} - -// MARK: - Setup -extension LinkMetadataManager { - /// Creating metadata to population in the share sheet. - func activityViewControllerLinkMetadata(_ activityViewController: UIActivityViewController) -> LPLinkMetadata? { - - linkMetadata.title = appTitle - - return linkMetadata +//출처: https://developer.apple.com/forums/thread/687916 +class MyActivityItemSource: NSObject, UIActivityItemSource { + var title: String = "RE:CORD" + var text: String + var image: UIImage + + init(text: String, image: UIImage) { + self.text = text + self.image = image + super.init() } - /// Showing empty string returns a share sheet with the minimum requirement. + func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any { - return String() + return text + } + + func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivity.ActivityType?) -> Any? { + return text } - /// Sharing url of the application. - func activityViewController(_ activityViewController: UIActivityViewController, - itemForActivityType activityType: UIActivity.ActivityType?) -> Any? { - return linkMetadata.url + func activityViewController(_ activityViewController: UIActivityViewController, subjectForActivityType activityType: UIActivity.ActivityType?) -> String { + return title + } + + func activityViewControllerLinkMetadata(_ activityViewController: UIActivityViewController) -> LPLinkMetadata? { + let metadata = LPLinkMetadata() + metadata.title = title + metadata.iconProvider = NSItemProvider(object: UIImage(imageLiteralResourceName: "AppIcon") ) + metadata.originalURL = URL(fileURLWithPath: text) + return metadata } } From 8922b9876c58fe634867f6a9da73fe50fb193df8 Mon Sep 17 00:00:00 2001 From: Jeon Jimin <41153398+JMM00@users.noreply.github.com> Date: Sat, 1 Oct 2022 00:09:01 +0900 Subject: [PATCH 3/3] =?UTF-8?q?Comment:=20=EC=8A=A4=ED=81=AC=EB=A6=B0?= =?UTF-8?q?=EC=83=B7=20=EC=BD=94=EB=93=9C=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Model/Screenshot.swift | 23 ----------------------- 1 file changed, 23 deletions(-) diff --git a/Model/Screenshot.swift b/Model/Screenshot.swift index 1b7dd70..32c0d39 100644 --- a/Model/Screenshot.swift +++ b/Model/Screenshot.swift @@ -10,29 +10,6 @@ import SwiftUI // MARK: - 이미지 저장 기능을 위한 확장 extension View { - //화면에 보이는 그대로를 캡쳐 - func screenshot() -> UIImage { - - var image: UIImage? - let scenes = UIApplication.shared.connectedScenes - let windowScenes = scenes.first as? UIWindowScene - guard let currentView = windowScenes?.windows.first(where: { $0.isKeyWindow })?.layer else { return UIImage() } - let screenScale = UIScreen.main.scale - - // image capture - UIGraphicsBeginImageContextWithOptions(currentView.frame.size, false, screenScale) - guard let currentContext = UIGraphicsGetCurrentContext() else { return UIImage() } - currentView.render(in: currentContext) - image = UIGraphicsGetImageFromCurrentImageContext() - UIGraphicsEndImageContext() - - // crop image - let cropRect: CGRect = .init(origin: CGPoint(x: 0, y: 250), size: CGSize(width: 1500 , height: 2000)) - let imageRef = image!.cgImage!.cropping(to: cropRect); - let newImage = UIImage(cgImage: imageRef!, scale: image!.scale, orientation: image!.imageOrientation) - - return newImage - } //UIView를 캡쳐 func snapShot() -> UIImage { let controller = UIHostingController(rootView: self)