From 76cd3626f6999aaaf2f8e72b9a2a1dbdaad04589 Mon Sep 17 00:00:00 2001 From: L-j-h-c Date: Fri, 21 Jan 2022 18:50:46 +0900 Subject: [PATCH 1/7] =?UTF-8?q?[Feat]=20#146=20-=20=EB=A0=8C=EB=8D=94?= =?UTF-8?q?=EB=A7=81=20=EC=BB=A4=EC=8A=A4=ED=85=80=20=EB=B7=B0=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 렌더링 뷰 파일 추가 --- .../Views/CompleteAuth/ViewForRender.swift | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 Spark-iOS/Spark-iOS/Source/Views/CompleteAuth/ViewForRender.swift diff --git a/Spark-iOS/Spark-iOS/Source/Views/CompleteAuth/ViewForRender.swift b/Spark-iOS/Spark-iOS/Source/Views/CompleteAuth/ViewForRender.swift new file mode 100644 index 00000000..1259e236 --- /dev/null +++ b/Spark-iOS/Spark-iOS/Source/Views/CompleteAuth/ViewForRender.swift @@ -0,0 +1,20 @@ +// +// ViewForRender.swift +// Spark-iOS +// +// Created by Junho Lee on 2022/01/21. +// + +import UIKit + +class ViewForRender: UIView { + + /* + // Only override draw() if you perform custom drawing. + // An empty implementation adversely affects performance during animation. + override func draw(_ rect: CGRect) { + // Drawing code + } + */ + +} From ed72a2bdc73f731543e663333cf45a18fc394ae7 Mon Sep 17 00:00:00 2001 From: L-j-h-c Date: Fri, 21 Jan 2022 20:47:20 +0900 Subject: [PATCH 2/7] =?UTF-8?q?[Feat]=20#146=20-=20=EB=A0=8C=EB=8D=94?= =?UTF-8?q?=EB=A7=81=EC=9A=A9=20=EC=BB=A4=EC=8A=A4=ED=85=80=EB=B7=B0=20?= =?UTF-8?q?=EB=A0=88=EC=9D=B4=EC=95=84=EC=9B=83=20=EB=B0=8F=20UI=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 렌더링용 커스텀뷰 레이아웃 및 UI 구현 --- .../Views/CompleteAuth/ViewForRender.swift | 113 ++++++++++++++++-- 1 file changed, 104 insertions(+), 9 deletions(-) diff --git a/Spark-iOS/Spark-iOS/Source/Views/CompleteAuth/ViewForRender.swift b/Spark-iOS/Spark-iOS/Source/Views/CompleteAuth/ViewForRender.swift index 1259e236..85f85c80 100644 --- a/Spark-iOS/Spark-iOS/Source/Views/CompleteAuth/ViewForRender.swift +++ b/Spark-iOS/Spark-iOS/Source/Views/CompleteAuth/ViewForRender.swift @@ -4,17 +4,112 @@ // // Created by Junho Lee on 2022/01/21. // - import UIKit -class ViewForRender: UIView { +import SnapKit - /* - // Only override draw() if you perform custom drawing. - // An empty implementation adversely affects performance during animation. - override func draw(_ rect: CGRect) { - // Drawing code +class ViewForRender: UIView { + + // MARK: - Properties + let roomNameLabel = UILabel() + let nickNameLabel = UILabel() + let profileImageView = UIImageView() + let authImageView = UIImageView() + let stickerImageView = UIImageView() + let timerLabel = UILabel() + let largeView = UIView() + + // MARK: - View Life Cycle + override init(frame: CGRect) { + super.init(frame: frame) + + setUI() + setLayout() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // MARK: - Methods + /// 기본 UI + func setUI() { + + self.backgroundColor = .clear + self.isOpaque = true + + largeView.backgroundColor = .sparkWhite + largeView.layer.cornerRadius = 2 + + stickerImageView.image = UIImage(named: "stickerCompleteDefault") + + authImageView.contentMode = .scaleAspectFill + authImageView.layer.masksToBounds = true + + timerLabel.text = " " + timerLabel.font = .enBoldFont(ofSize: 40) + timerLabel.textColor = .sparkWhite + + nickNameLabel.text = " " + roomNameLabel.font = .enBoldFont(ofSize: 16) + nickNameLabel.textColor = .sparkDeepGray + nickNameLabel.font = .p1Title + + roomNameLabel.text = " " + roomNameLabel.font = .enBoldFont(ofSize: 20) + roomNameLabel.textColor = .sparkDeepGray + + profileImageView.image = UIImage(named: "stickerPhotoDefault") + profileImageView.layer.cornerRadius = 32 + profileImageView.layer.borderColor = UIColor.sparkWhite.cgColor + profileImageView.layer.borderWidth = 2 + profileImageView.clipsToBounds = true + profileImageView.layer.masksToBounds = true + + self.layer.cornerRadius = 2 + } + + func setLayout() { + addSubviews([largeView, stickerImageView]) + + largeView.addSubviews([authImageView, timerLabel, profileImageView, + nickNameLabel, roomNameLabel]) + + largeView.snp.makeConstraints { make in + make.centerX.equalToSuperview() + make.leading.trailing.bottom.equalToSuperview() + make.top.equalToSuperview().offset(38) + } + + stickerImageView.snp.makeConstraints { make in + make.centerX.equalToSuperview() + make.top.equalToSuperview() + make.width.height.equalTo(96) + } + + authImageView.snp.makeConstraints { make in + make.top.leading.equalToSuperview().inset(8) + make.width.height.equalTo(312) + } + + timerLabel.snp.makeConstraints { make in + make.centerX.centerY.equalTo(authImageView) + } + + profileImageView.snp.makeConstraints { make in + make.centerX.equalToSuperview() + make.width.height.equalTo(64) + make.centerY.equalTo(authImageView.snp.bottom) + } + + nickNameLabel.snp.makeConstraints { make in + make.centerX.equalToSuperview() + make.top.equalTo(profileImageView.snp.bottom).offset(3) + } + + roomNameLabel.snp.makeConstraints { make in + make.centerX.equalToSuperview() + make.top.equalTo(nickNameLabel.snp.bottom).offset(15) + } } - */ - } From 67dc13950a5049c5f029211513c897c97a178b84 Mon Sep 17 00:00:00 2001 From: L-j-h-c Date: Fri, 21 Jan 2022 20:54:09 +0900 Subject: [PATCH 3/7] =?UTF-8?q?[Feat]=20#146=20-=20=EC=9D=B8=EC=8A=A4?= =?UTF-8?q?=ED=83=80=EA=B7=B8=EB=9E=A8=20=EC=97=B0=EB=8F=99=ED=95=98?= =?UTF-8?q?=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 인스타그램 연동하기 --- .../HabitRoom/CompleteAuthVC.swift | 27 +++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/Spark-iOS/Spark-iOS/Source/ViewControllers/HabitRoom/CompleteAuthVC.swift b/Spark-iOS/Spark-iOS/Source/ViewControllers/HabitRoom/CompleteAuthVC.swift index fbe517c3..889fcd91 100644 --- a/Spark-iOS/Spark-iOS/Source/ViewControllers/HabitRoom/CompleteAuthVC.swift +++ b/Spark-iOS/Spark-iOS/Source/ViewControllers/HabitRoom/CompleteAuthVC.swift @@ -110,11 +110,34 @@ extension CompleteAuthVC { // } // } // } + private func shareAuthWithInstagram() { + let renderer = UIGraphicsImageRenderer(size: viewForRender.bounds.size) + let renderImage = renderer.image { _ in + viewForRender.drawHierarchy(in: viewForRender.bounds, afterScreenUpdates: true) + } + + if let storyShareURL = URL(string: "instagram-stories://share") { + if UIApplication.shared.canOpenURL(storyShareURL) { + guard let imageData = renderImage.pngData() else {return} + + let pasteboardItems: [String: Any] = [ + "com.instagram.sharedSticker.stickerImage": imageData, + "com.instagram.sharedSticker.backgroundTopColor": "#636e72", + "com.instagram.sharedSticker.backgroundBottomColor": "#b2bec3"] + + let pasteboardOptions = [UIPasteboard.OptionsKey.expirationDate: Date().addingTimeInterval(300)] + + UIPasteboard.general.setItems([pasteboardItems], options: pasteboardOptions) + UIApplication.shared.open(storyShareURL, options: [:], completionHandler: nil) + } else { + print("인스타 앱이 깔려있지 않습니다.") + } + } + } // MARK: - @objc @objc func tapped(_ gesture: UITapGestureRecognizer) { - // 인스타 공유 기능 -// backgroundImage(backgroundImage: renderedImage ?? UIImage()) + shareAuthWithInstagram() } } From 7f12c2363da713c661671c8f79cdf05ae7efe874 Mon Sep 17 00:00:00 2001 From: L-j-h-c Date: Fri, 21 Jan 2022 20:54:28 +0900 Subject: [PATCH 4/7] =?UTF-8?q?[Feat]=20#146=20-=20=EC=9D=B8=EC=A6=9D=20?= =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=84=B0=20=EC=A0=84=EB=8B=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 인증 데이터 전달 --- .../HabitRoom/CompleteAuthVC.swift | 50 +++++++------------ 1 file changed, 19 insertions(+), 31 deletions(-) diff --git a/Spark-iOS/Spark-iOS/Source/ViewControllers/HabitRoom/CompleteAuthVC.swift b/Spark-iOS/Spark-iOS/Source/ViewControllers/HabitRoom/CompleteAuthVC.swift index 889fcd91..bb8005ed 100644 --- a/Spark-iOS/Spark-iOS/Source/ViewControllers/HabitRoom/CompleteAuthVC.swift +++ b/Spark-iOS/Spark-iOS/Source/ViewControllers/HabitRoom/CompleteAuthVC.swift @@ -16,6 +16,8 @@ class CompleteAuthVC: UIViewController { var roomName: String? var nickName: String? var profileImage: String? + var timerCount: String? + let viewForRender = ViewForRender() // MARK: - Properties lazy var confettiView: AnimationView = { @@ -40,6 +42,7 @@ class CompleteAuthVC: UIViewController { override func viewDidLoad() { super.viewDidLoad() setUI() + setLayout() setGesture() setAnimation() } @@ -65,6 +68,22 @@ extension CompleteAuthVC { tabBarController?.tabBar.isHidden = true instaView.layer.cornerRadius = 2 + + viewForRender.roomNameLabel.text = roomName + viewForRender.nickNameLabel.text = nickName + viewForRender.timerLabel.text = timerCount + viewForRender.authImageView.image = renderedImage + viewForRender.profileImageView.updateImage(profileImage ?? "") + } + + private func setLayout() { + self.view.addSubview(viewForRender) + + viewForRender.snp.makeConstraints { make in + make.width.equalTo(328) + make.height.equalTo(478) + make.trailing.equalToSuperview().inset(-1000) + } } private func setGesture() { @@ -79,37 +98,6 @@ extension CompleteAuthVC { } } - // TODO: 인스타 공유 부분 -// func backgroundImage(backgroundImage: UIImage) { -// if let storyShareURL = URL(string: "instagram-stories://share") { -// if UIApplication.shared.canOpenURL(storyShareURL) { -// guard let imageData = backgroundImage.pngData() else {return} -// -// let renderer = UIGraphicsImageRenderer(size: handImageVIew.bounds.size) -// -// let renderImage = renderer.image { _ in -// handImageVIew.drawHierarchy(in: handImageVIew.bounds, afterScreenUpdates: true) -// } -// -// let pasteboardItems : [String:Any] = [ -// "com.instagram.sharedSticker.stickerImage": imageData, -// "com.instagram.sharedSticker.backgroundTopColor": "#636e72", -// "com.instagram.sharedSticker.backgroundBottomColor": "#b2bec3" -// ] -// -// let pasteboardOptions = [ -// UIPasteboard.OptionsKey.expirationDate: Date().addingTimeInterval(300) -// ] -// -// UIPasteboard.general.setItems([pasteboardItems], options: pasteboardOptions) -// -// UIApplication.shared.open(storyShareURL, options: [:], completionHandler: nil) -// -// } else { -// print("인스타 앱이 깔려있지 않습니다.") -// } -// } -// } private func shareAuthWithInstagram() { let renderer = UIGraphicsImageRenderer(size: viewForRender.bounds.size) let renderImage = renderer.image { _ in From 19cb4f7e49862c5bda215c7e3b8cacc0c9b43455 Mon Sep 17 00:00:00 2001 From: L-j-h-c Date: Fri, 21 Jan 2022 20:55:16 +0900 Subject: [PATCH 5/7] =?UTF-8?q?[Chore]=20#146=20-=20=EC=9D=B8=EC=8A=A4?= =?UTF-8?q?=ED=83=80=EA=B7=B8=EB=9E=A8=20=EA=B3=B5=EC=9C=A0=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 인스타그램 공유 기능 완료 --- .../Source/ViewControllers/Auth/AuthUpload/AuthUploadVC.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/Spark-iOS/Spark-iOS/Source/ViewControllers/Auth/AuthUpload/AuthUploadVC.swift b/Spark-iOS/Spark-iOS/Source/ViewControllers/Auth/AuthUpload/AuthUploadVC.swift index 5e4f785b..5332d01d 100644 --- a/Spark-iOS/Spark-iOS/Source/ViewControllers/Auth/AuthUpload/AuthUploadVC.swift +++ b/Spark-iOS/Spark-iOS/Source/ViewControllers/Auth/AuthUpload/AuthUploadVC.swift @@ -375,6 +375,7 @@ extension AuthUploadVC { popupVC.roomName = authUpload.roomName popupVC.nickName = authUpload.nickname popupVC.profileImage = authUpload.profileImg + popupVC.timerCount = self.timerLabel.text popupVC.vcType = self.vcType popupVC.modalTransitionStyle = .crossDissolve From d4264f1a2efb86c2c8d977e0ab2114ed678edd4f Mon Sep 17 00:00:00 2001 From: L-j-h-c Date: Fri, 21 Jan 2022 20:58:32 +0900 Subject: [PATCH 6/7] =?UTF-8?q?[Fix]=20#146=20-=20=EC=BB=A8=ED=94=8C?= =?UTF-8?q?=EB=A6=AD=ED=8A=B8=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 컨플릭트 해결 --- Spark-iOS/Spark-iOS.xcodeproj/project.pbxproj | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Spark-iOS/Spark-iOS.xcodeproj/project.pbxproj b/Spark-iOS/Spark-iOS.xcodeproj/project.pbxproj index d55d328c..68938399 100644 --- a/Spark-iOS/Spark-iOS.xcodeproj/project.pbxproj +++ b/Spark-iOS/Spark-iOS.xcodeproj/project.pbxproj @@ -73,6 +73,7 @@ EB9C509827931E4600588155 /* AuthUploadVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB9C509727931E4600588155 /* AuthUploadVC.swift */; }; EB9C509A27931E5F00588155 /* AuthUpload.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = EB9C509927931E5F00588155 /* AuthUpload.storyboard */; }; EBA2D6CF2799EAFE0022DFD6 /* UIImage+.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBA2D6CE2799EAFD0022DFD6 /* UIImage+.swift */; }; + EBA2D6D4279AB50D0022DFD6 /* ViewForRender.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBA2D6D3279AB50D0022DFD6 /* ViewForRender.swift */; }; EBA77239278A2E14002958A5 /* Colors.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = EBA77238278A2E14002958A5 /* Colors.xcassets */; }; EBA93A7D27907EF9009AE771 /* CodeJoinVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBA93A7C27907EF9009AE771 /* CodeJoinVC.swift */; }; EBA93A7F279080E2009AE771 /* JoinCheckVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBA93A7E279080E2009AE771 /* JoinCheckVC.swift */; }; @@ -214,6 +215,7 @@ EB9C509727931E4600588155 /* AuthUploadVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthUploadVC.swift; sourceTree = ""; }; EB9C509927931E5F00588155 /* AuthUpload.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = AuthUpload.storyboard; sourceTree = ""; }; EBA2D6CE2799EAFD0022DFD6 /* UIImage+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIImage+.swift"; sourceTree = ""; }; + EBA2D6D3279AB50D0022DFD6 /* ViewForRender.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewForRender.swift; sourceTree = ""; }; EBA77238278A2E14002958A5 /* Colors.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Colors.xcassets; sourceTree = ""; }; EBA93A7C27907EF9009AE771 /* CodeJoinVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CodeJoinVC.swift; sourceTree = ""; }; EBA93A7E279080E2009AE771 /* JoinCheckVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JoinCheckVC.swift; sourceTree = ""; }; @@ -611,6 +613,14 @@ path = AuthUpload; sourceTree = ""; }; + EBA2D6D0279AB4BB0022DFD6 /* CompleteAuth */ = { + isa = PBXGroup; + children = ( + EBA2D6D3279AB50D0022DFD6 /* ViewForRender.swift */, + ); + path = CompleteAuth; + sourceTree = ""; + }; EBA93A80279080FC009AE771 /* CodeJoin */ = { isa = PBXGroup; children = ( @@ -772,6 +782,7 @@ F8096F1D27841DB600B71D38 /* Views */ = { isa = PBXGroup; children = ( + EBA2D6D0279AB4BB0022DFD6 /* CompleteAuth */, 2B98520C2790ADDC00CE40A7 /* CreateAuth */, ); path = Views; @@ -1174,6 +1185,7 @@ 2BBED13527956EAB0052CA5C /* FeedAPI.swift in Sources */, F80A3E55278C1C1F00728E07 /* StorageVC.swift in Sources */, F82F580C27929F74003E4174 /* Header.swift in Sources */, + EBA2D6D4279AB50D0022DFD6 /* ViewForRender.swift in Sources */, F8E3496827969B61001B67E7 /* AuthAPI.swift in Sources */, F8096F3C2784211D00B71D38 /* UIColor+.swift in Sources */, 2BE5D818279330A6007A544D /* TimerAuthView.swift in Sources */, From 3ef070aa8372a33afe537e6e9c1b911d6341bfe8 Mon Sep 17 00:00:00 2001 From: L-j-h-c Date: Fri, 21 Jan 2022 21:46:53 +0900 Subject: [PATCH 7/7] =?UTF-8?q?[Chore]=20#146=20-=20=EC=9D=B8=EC=8A=A4?= =?UTF-8?q?=ED=83=80=EA=B7=B8=EB=9E=A8=20=EC=8A=A4=ED=86=A0=EB=A6=AC=20?= =?UTF-8?q?=EB=B0=B0=EA=B2=BD=EC=83=89=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 인스타그램 스토리 배경색 변경 --- .../Source/ViewControllers/CodeJoin/CodeJoinVC.swift | 2 +- .../Source/ViewControllers/HabitRoom/CompleteAuthVC.swift | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Spark-iOS/Spark-iOS/Source/ViewControllers/CodeJoin/CodeJoinVC.swift b/Spark-iOS/Spark-iOS/Source/ViewControllers/CodeJoin/CodeJoinVC.swift index 33cdcbf9..4d151d3d 100644 --- a/Spark-iOS/Spark-iOS/Source/ViewControllers/CodeJoin/CodeJoinVC.swift +++ b/Spark-iOS/Spark-iOS/Source/ViewControllers/CodeJoin/CodeJoinVC.swift @@ -29,12 +29,12 @@ class CodeJoinVC: UIViewController { super.viewDidLoad() setUI() setAddTargets() - setNotification() setDelegate() } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) + setNotification() resetUI() resetLayout() } diff --git a/Spark-iOS/Spark-iOS/Source/ViewControllers/HabitRoom/CompleteAuthVC.swift b/Spark-iOS/Spark-iOS/Source/ViewControllers/HabitRoom/CompleteAuthVC.swift index bb8005ed..5381e53b 100644 --- a/Spark-iOS/Spark-iOS/Source/ViewControllers/HabitRoom/CompleteAuthVC.swift +++ b/Spark-iOS/Spark-iOS/Source/ViewControllers/HabitRoom/CompleteAuthVC.swift @@ -42,7 +42,6 @@ class CompleteAuthVC: UIViewController { override func viewDidLoad() { super.viewDidLoad() setUI() - setLayout() setGesture() setAnimation() } @@ -110,8 +109,8 @@ extension CompleteAuthVC { let pasteboardItems: [String: Any] = [ "com.instagram.sharedSticker.stickerImage": imageData, - "com.instagram.sharedSticker.backgroundTopColor": "#636e72", - "com.instagram.sharedSticker.backgroundBottomColor": "#b2bec3"] + "com.instagram.sharedSticker.backgroundTopColor": "#8D8D88", + "com.instagram.sharedSticker.backgroundBottomColor": "#8D8D88"] let pasteboardOptions = [UIPasteboard.OptionsKey.expirationDate: Date().addingTimeInterval(300)] @@ -126,6 +125,7 @@ extension CompleteAuthVC { // MARK: - @objc @objc func tapped(_ gesture: UITapGestureRecognizer) { + setLayout() shareAuthWithInstagram() } }