From 18ad11cca3e6ef2e743bc9f0ed0a3620036754da Mon Sep 17 00:00:00 2001 From: binisnull Date: Sat, 16 Nov 2024 20:48:57 +0900 Subject: [PATCH] =?UTF-8?q?[Feat]=20#61=20-=20=EB=8C=80=EB=8C=93=EA=B8=80?= =?UTF-8?q?=20=EB=B7=B0=20=EA=B5=AC=ED=98=84=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Wable-iOS.xcodeproj/project.pbxproj | 20 ++++--- Wable-iOS/Global/Extention/UIButton+.swift | 2 +- Wable-iOS/Global/Literals/ImageLiterals.swift | 3 + .../Icon/ic_heart_gray.imageset/Contents.json | 23 ++++++++ .../Status=Default, Size=S.png | Bin 0 -> 454 bytes .../Status=Default, Size=S@2x.png | Bin 0 -> 714 bytes .../Status=Default, Size=S@3x.png | Bin 0 -> 1026 bytes .../Contents.json | 23 ++++++++ .../Status=Press, Size=S.png | Bin 0 -> 355 bytes .../Status=Press, Size=S@2x.png | Bin 0 -> 588 bytes .../Status=Press, Size=S@3x.png | Bin 0 -> 775 bytes .../ic_ripple_reply.imageset/Contents.json | 23 ++++++++ .../ic_ripple_reply.png | Bin 0 -> 421 bytes .../ic_ripple_reply@2x.png | Bin 0 -> 715 bytes .../ic_ripple_reply@3x.png | Bin 0 -> 1065 bytes .../Home/ResponseDTO/FeedDetailReplyDTO.swift | 25 +++++++++ .../FeedDetailViewController.swift | 14 ----- .../Views/Cells/FeedDetailTableViewCell.swift | 3 +- .../Views/Subviews/FeedDetailBottomView.swift | 53 +++++++++++++----- 19 files changed, 152 insertions(+), 37 deletions(-) create mode 100644 Wable-iOS/Global/Resources/Assets.xcassets/Icon/ic_heart_gray.imageset/Contents.json create mode 100644 Wable-iOS/Global/Resources/Assets.xcassets/Icon/ic_heart_gray.imageset/Status=Default, Size=S.png create mode 100644 Wable-iOS/Global/Resources/Assets.xcassets/Icon/ic_heart_gray.imageset/Status=Default, Size=S@2x.png create mode 100644 Wable-iOS/Global/Resources/Assets.xcassets/Icon/ic_heart_gray.imageset/Status=Default, Size=S@3x.png create mode 100644 Wable-iOS/Global/Resources/Assets.xcassets/Icon/ic_heart_press_small.imageset/Contents.json create mode 100644 Wable-iOS/Global/Resources/Assets.xcassets/Icon/ic_heart_press_small.imageset/Status=Press, Size=S.png create mode 100644 Wable-iOS/Global/Resources/Assets.xcassets/Icon/ic_heart_press_small.imageset/Status=Press, Size=S@2x.png create mode 100644 Wable-iOS/Global/Resources/Assets.xcassets/Icon/ic_heart_press_small.imageset/Status=Press, Size=S@3x.png create mode 100644 Wable-iOS/Global/Resources/Assets.xcassets/Icon/ic_ripple_reply.imageset/Contents.json create mode 100644 Wable-iOS/Global/Resources/Assets.xcassets/Icon/ic_ripple_reply.imageset/ic_ripple_reply.png create mode 100644 Wable-iOS/Global/Resources/Assets.xcassets/Icon/ic_ripple_reply.imageset/ic_ripple_reply@2x.png create mode 100644 Wable-iOS/Global/Resources/Assets.xcassets/Icon/ic_ripple_reply.imageset/ic_ripple_reply@3x.png diff --git a/Wable-iOS.xcodeproj/project.pbxproj b/Wable-iOS.xcodeproj/project.pbxproj index 5a4d4a4..01b5ae9 100644 --- a/Wable-iOS.xcodeproj/project.pbxproj +++ b/Wable-iOS.xcodeproj/project.pbxproj @@ -94,6 +94,8 @@ 0593F6DB2C96E75600FFAD82 /* FirebaseAnalytics in Frameworks */ = {isa = PBXBuildFile; productRef = 0593F6DA2C96E75600FFAD82 /* FirebaseAnalytics */; }; 0593F6DD2C96E75600FFAD82 /* FirebaseMessaging in Frameworks */ = {isa = PBXBuildFile; productRef = 0593F6DC2C96E75600FFAD82 /* FirebaseMessaging */; }; 0593F6E42C9AFC1B00FFAD82 /* WablePushAlarmHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0593F6E32C9AFC1B00FFAD82 /* WablePushAlarmHelper.swift */; }; + 05AD1EB52CE4C1D900F36D6B /* Dev.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 05AD1EB42CE4C1D900F36D6B /* Dev.xcconfig */; }; + 05AD1EB72CE4C1F400F36D6B /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 05AD1EB62CE4C1F400F36D6B /* GoogleService-Info.plist */; }; 05FBEED22C886A0200E4BF17 /* HomeFeedContentDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05FBEED12C886A0200E4BF17 /* HomeFeedContentDTO.swift */; }; 3C35317F2C6F13FF0015A8FA /* Pretendard-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = 3C35317C2C6F13FF0015A8FA /* Pretendard-Regular.otf */; }; 3C3531802C6F13FF0015A8FA /* Pretendard-SemiBold.otf in Resources */ = {isa = PBXBuildFile; fileRef = 3C35317D2C6F13FF0015A8FA /* Pretendard-SemiBold.otf */; }; @@ -190,7 +192,6 @@ 3CF344EB2C75EE410038BB53 /* MyPageSignOutConfirmViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CF344EA2C75EE410038BB53 /* MyPageSignOutConfirmViewController.swift */; }; 3CF344ED2C75EE620038BB53 /* MyPageSignOutConfirmView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CF344EC2C75EE620038BB53 /* MyPageSignOutConfirmView.swift */; }; 3CF344EF2C7607BB0038BB53 /* MyPageSignOutConfirmViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CF344EE2C7607BB0038BB53 /* MyPageSignOutConfirmViewModel.swift */; }; - DE1B58172CDDD3F90017C319 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = DE1B58162CDDD3F90017C319 /* GoogleService-Info.plist */; }; DE7FAAA02CDF971300A4D8A2 /* ReuseIdentifiable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE7FAA9F2CDF971300A4D8A2 /* ReuseIdentifiable.swift */; }; DEB5793A2CE3541300BEE54D /* CombineCocoa in Frameworks */ = {isa = PBXBuildFile; productRef = DEB579392CE3541300BEE54D /* CombineCocoa */; }; /* End PBXBuildFile section */ @@ -277,6 +278,8 @@ 054A85532CAA98CC00EFD9A5 /* AmplitudeManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AmplitudeManager.swift; sourceTree = ""; }; 0593F6D52C96D6C100FFAD82 /* WablePhotoDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WablePhotoDetailView.swift; sourceTree = ""; }; 0593F6E32C9AFC1B00FFAD82 /* WablePushAlarmHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WablePushAlarmHelper.swift; sourceTree = ""; }; + 05AD1EB42CE4C1D900F36D6B /* Dev.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Dev.xcconfig; sourceTree = ""; }; + 05AD1EB62CE4C1F400F36D6B /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; 05FBEED12C886A0200E4BF17 /* HomeFeedContentDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeFeedContentDTO.swift; sourceTree = ""; }; 3C35317C2C6F13FF0015A8FA /* Pretendard-Regular.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Pretendard-Regular.otf"; sourceTree = ""; }; 3C35317D2C6F13FF0015A8FA /* Pretendard-SemiBold.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Pretendard-SemiBold.otf"; sourceTree = ""; }; @@ -373,8 +376,6 @@ 3CF344EA2C75EE410038BB53 /* MyPageSignOutConfirmViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyPageSignOutConfirmViewController.swift; sourceTree = ""; }; 3CF344EC2C75EE620038BB53 /* MyPageSignOutConfirmView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyPageSignOutConfirmView.swift; sourceTree = ""; }; 3CF344EE2C7607BB0038BB53 /* MyPageSignOutConfirmViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyPageSignOutConfirmViewModel.swift; sourceTree = ""; }; - DE1B58142CDDD1E50017C319 /* Dev.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Dev.xcconfig; sourceTree = ""; }; - DE1B58162CDDD3F90017C319 /* GoogleService-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; DE7FAA9F2CDF971300A4D8A2 /* ReuseIdentifiable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReuseIdentifiable.swift; sourceTree = ""; }; /* End PBXFileReference section */ @@ -596,7 +597,7 @@ 0547F48D2C60D968001E3039 = { isa = PBXGroup; children = ( - DE1B58142CDDD1E50017C319 /* Dev.xcconfig */, + 05AD1EB42CE4C1D900F36D6B /* Dev.xcconfig */, 0547F4982C60D968001E3039 /* Wable-iOS */, 0547F4972C60D968001E3039 /* Products */, ); @@ -613,7 +614,7 @@ 0547F4982C60D968001E3039 /* Wable-iOS */ = { isa = PBXGroup; children = ( - DE1B58162CDDD3F90017C319 /* GoogleService-Info.plist */, + 05AD1EB62CE4C1F400F36D6B /* GoogleService-Info.plist */, 3C8B4E102C78DE2C00174943 /* Wable-iOS.entitlements */, 0547F4B02C60E247001E3039 /* Presentation */, 0547F4AF2C60E240001E3039 /* Network */, @@ -1283,12 +1284,13 @@ files = ( 054308EA2CB7F582001861F1 /* wable_loading.json in Resources */, 0547F4A32C60D96B001E3039 /* Assets.xcassets in Resources */, + 05AD1EB52CE4C1D900F36D6B /* Dev.xcconfig in Resources */, 054308EC2CB7F6CE001861F1 /* wable_splash.json in Resources */, 3C35317F2C6F13FF0015A8FA /* Pretendard-Regular.otf in Resources */, 3C8B4E052C76247800174943 /* wable_tab.json in Resources */, 3C3531802C6F13FF0015A8FA /* Pretendard-SemiBold.otf in Resources */, + 05AD1EB72CE4C1F400F36D6B /* GoogleService-Info.plist in Resources */, 0547F4A62C60D96B001E3039 /* Base in Resources */, - DE1B58172CDDD3F90017C319 /* GoogleService-Info.plist in Resources */, 0547F4C82C621ABC001E3039 /* Color.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -1486,7 +1488,7 @@ /* Begin XCBuildConfiguration section */ 0547F4A82C60D96B001E3039 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DE1B58142CDDD1E50017C319 /* Dev.xcconfig */; + baseConfigurationReference = 05AD1EB42CE4C1D900F36D6B /* Dev.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; @@ -1550,6 +1552,7 @@ }; 0547F4A92C60D96B001E3039 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 05AD1EB42CE4C1D900F36D6B /* Dev.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; @@ -1606,7 +1609,7 @@ }; 0547F4AB2C60D96B001E3039 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DE1B58142CDDD1E50017C319 /* Dev.xcconfig */; + baseConfigurationReference = 05AD1EB42CE4C1D900F36D6B /* Dev.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; @@ -1644,6 +1647,7 @@ }; 0547F4AC2C60D96B001E3039 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 05AD1EB42CE4C1D900F36D6B /* Dev.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; diff --git a/Wable-iOS/Global/Extention/UIButton+.swift b/Wable-iOS/Global/Extention/UIButton+.swift index f78d8b1..829ab43 100644 --- a/Wable-iOS/Global/Extention/UIButton+.swift +++ b/Wable-iOS/Global/Extention/UIButton+.swift @@ -11,7 +11,7 @@ extension UIButton { func setTitleWithConfiguration(_ title: String, font: UIFont, textColor: UIColor) { var config = self.configuration ?? UIButton.Configuration.plain() - + config.contentInsets = NSDirectionalEdgeInsets.zero config.title = title config.imagePadding = 4.adjusted diff --git a/Wable-iOS/Global/Literals/ImageLiterals.swift b/Wable-iOS/Global/Literals/ImageLiterals.swift index 0f4f9cb..9c80d7b 100644 --- a/Wable-iOS/Global/Literals/ImageLiterals.swift +++ b/Wable-iOS/Global/Literals/ImageLiterals.swift @@ -57,6 +57,9 @@ enum ImageLiterals { static var icX: UIImage { .load(name: "ic_x") } static var icInfoPurple: UIImage { .load(name: "ic_info") } static var icVersus: UIImage { .load(name: "ic_versus") } + static var icHeartGray: UIImage { .load(name: "ic_heart_gray")} + static var icRippleRely: UIImage { .load(name: "ic_ripple_reply")} + static var icHeartPressSmall: UIImage { .load(name: "ic_heart_press_small")} } enum Image { diff --git a/Wable-iOS/Global/Resources/Assets.xcassets/Icon/ic_heart_gray.imageset/Contents.json b/Wable-iOS/Global/Resources/Assets.xcassets/Icon/ic_heart_gray.imageset/Contents.json new file mode 100644 index 0000000..45ceb7d --- /dev/null +++ b/Wable-iOS/Global/Resources/Assets.xcassets/Icon/ic_heart_gray.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Status=Default, Size=S.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Status=Default, Size=S@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Status=Default, Size=S@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Wable-iOS/Global/Resources/Assets.xcassets/Icon/ic_heart_gray.imageset/Status=Default, Size=S.png b/Wable-iOS/Global/Resources/Assets.xcassets/Icon/ic_heart_gray.imageset/Status=Default, Size=S.png new file mode 100644 index 0000000000000000000000000000000000000000..82f33aa5e64e78058b21d99410d82b6b91da49a6 GIT binary patch literal 454 zcmV;%0XhDOP) z?>z*o!to0G4U!%y27a;xKVOnL-&5hbuGhZr7j&leKm@0 zvTwky!j1ywKt)*J9Z3~~vMei1)BM0po-NB_X_}s8u<@T)$H6k_6zo^v6jTNyaW)~m wk}b?he0ozbDNuycw+uF01Py{<%l?Hv0d<4~1Ken8F#rGn07*qoM6N<$f~K#!bN~PV literal 0 HcmV?d00001 diff --git a/Wable-iOS/Global/Resources/Assets.xcassets/Icon/ic_heart_gray.imageset/Status=Default, Size=S@2x.png b/Wable-iOS/Global/Resources/Assets.xcassets/Icon/ic_heart_gray.imageset/Status=Default, Size=S@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..911f4a17cff616b50f8aa3f91e9b0ac3e8c415e4 GIT binary patch literal 714 zcmV;*0yX`KP)T2`*t%L7WaY6=b)9jQM$neP;NpfK3IVgE$>ff=h4;0CKK!#mK^7Y>S;_ z$7jZ4*}6yflYE6B>eQ*z|1DJ&uv{*~!{P9R<|n1pgS^g<$Kww7U&G<>wZb36{}tZY zc*Xxc2!b?8l8l-HE*6V#7-))ScqJ@DOfnjcwk2R2G@~nC0^}5sFH{GRR}D#j;EGRy zN-;<(?FhFAJcnh8;GY0)YI$?<^6G{BCGZ?sDYx)H!=Jk>eJYX6JT_qa{r-789;a^H zd_I3-9!|~MW9o0$=y zA|(0gtcaeNc(W_sP`swL6V&v|jtNS96DPq%I6Wc&IF94%z==0^yc0JjaAp*f6g6h` zQU&Kia+5E#KUTrnkjS-`$B;k0-Cw9d)WN9}MZ2XM5}*||5OTdDw=Q7R>%!dx=nJw5 z+|7V(A)CV00&EJ|2Cg<>UC6d@jR0?j^a0lxunN)_Tr0p!kbL(A*BY=4@-(mqI6V$| wkPGPxPLD;NWFYmRp5VNTA^D8+Su^?R`)QPp zqDcOiY-aS%cx)@utM9RXkOWasP*6}%P*9L3b*Q99qfw08;cB(o?{qp5p7(Ig`C6~n zZ{2QpHW&GS?EkxpcOhT|!WH)s%%uz>O9`&w_4V~QE2B$qRk?xX zSO12`h>9yg*^8T-o0$u5wD=KPJjs)}ncM|Z?xz+^55y+@H|Q@Zw2N_ z1ciT+($zR1T)D@K^obDEcU=2v`QZCYde5nt_f&)CF@0e3NgKm`stC*C{9KNKYF$}cizWg({BO@@6589qJ$9cw8Mqu-+ ztE&S%Uht%Z`vf0#SOswTqumGW}%gb7`w5ObZDx_ z*uwZ)TN6yx*7c!YugAkh?J2P-pAlG{_0lGrHc8GCiIS9m3~QMyjW5qqV=V+sSp`3; zY-2dtJnJi&HcMOFB&IyJF|3Z;JzmjJ%Y_&j_J41*Z8&UQ`b~Y&7a?sFV(hE$ys%>+j z^TY#3FjM_>K|Qr-N|w`-31H9C%4IG*FqY5s$J_PAz$cmM05a zn~Ek{+6J3@a6 z7331y1+4I(igE$%3Rd_~4XP8`C9LqGnp6k0Ygpk&HL41<4_M(zHLDD?FIeGA4pao% zC#>)$N6G{38&>#}L#09U-8ZbLgB;5Sy%UHBSWypoP!_Z=SWy>wk`3A?tf-GXN{99h wE9xZA+CYoSJ;OF8hHmqJGJ=AFf`XdTKay|(Couz(J^%m!07*qoM6N<$f>~1Cj{pDw literal 0 HcmV?d00001 diff --git a/Wable-iOS/Global/Resources/Assets.xcassets/Icon/ic_heart_press_small.imageset/Contents.json b/Wable-iOS/Global/Resources/Assets.xcassets/Icon/ic_heart_press_small.imageset/Contents.json new file mode 100644 index 0000000..5f9860b --- /dev/null +++ b/Wable-iOS/Global/Resources/Assets.xcassets/Icon/ic_heart_press_small.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Status=Press, Size=S.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Status=Press, Size=S@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Status=Press, Size=S@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Wable-iOS/Global/Resources/Assets.xcassets/Icon/ic_heart_press_small.imageset/Status=Press, Size=S.png b/Wable-iOS/Global/Resources/Assets.xcassets/Icon/ic_heart_press_small.imageset/Status=Press, Size=S.png new file mode 100644 index 0000000000000000000000000000000000000000..c7ca4062683e6ac8dcc018e56236915202162218 GIT binary patch literal 355 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE-VXMsm#F#`j)FbFd;%$g$s6l5$8 za(7}_cTVOdki(Mh=7|prhYUnmE^L%m2sh)j@~~>) zTfn@cL8!s2!S98_y9SvE6~BjEO3n7(N5nW3h1lJ?Qci!{JU9Qr`$g-l&z)MIxW4*I zPGiBF6@h~4iASa9AD3S8>bBwaGG->XY`(*b#BCay41@NWyf0rG*8KQMN3(i6m&na+ zvu8HYm(c+SrI3xkxG96i@>C+O2{cUb6P yd4|w8As?ss#Fa`JiHREXw@h?rImP?ClJETCijSvn@3jDi0fVQjpUXO@geCx1@QU03 literal 0 HcmV?d00001 diff --git a/Wable-iOS/Global/Resources/Assets.xcassets/Icon/ic_heart_press_small.imageset/Status=Press, Size=S@2x.png b/Wable-iOS/Global/Resources/Assets.xcassets/Icon/ic_heart_press_small.imageset/Status=Press, Size=S@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..e3e2ae680961266af865f48c389913f9ec571d37 GIT binary patch literal 588 zcmV-S0<-;zP)Lg^+evJ% z?Zklmq)6WNuIFX4&J0jfQ}ef>v<2>c*F^(|4BC<5_Gpq}80b07cV^AIOx!={HiLi; zh|v7rD^U#ve1!#c%!=nDui(;C|Cm0wrEwCL`LgE3ta~?cF=o0Dp^b#SV24^SD_du< z5!9@4gRbS_O=Kh-Xlc+tl?=7A?iGt08uF3Z^i2HL;>2K$(Km0x0u>UmpKI8_*prxg zwLkXU_=Nk|J!BHW3LuiBvg)a{u{sK zru2o0{oouV6Xlfjj(T>Isd7rHpfUr=Oma#lL8U~=%yLR*L8SyqD>=nVP$?j3EvHxu zDmf%`$tk%66${DSa!PJNC4*!kIi--Gk|0@FPAM#?Opq)^PANrD2}z40000{i0rZj)8d^rfo!3SS%SQpf==%U842kg@k^ zER3_xtiIG|ygh}8T$HcPS?L{H^FlISG#RX$3_AU}z2r*WbUYw1VXbaX@3tSk#IDpX zyWLzh8GKY22dN(TGdV!Ae7!I2GPcZ+Pfer`PU(88;p{s`vVC3uxSRlTjKo~nE}gpH z)`6P{KUJF^Q*9^;^_yqq*{n2mTBkJbm=Vf?37wF2YFjh>{5Ic3Dhx`=@|h{i#tdga zHt!>r1sOe|x26vBlve7TBB!!A7=@W>N|7Vi>fF?B$#B%u`7g%DQ{858WV8}~v>1hz zs+VH1QoDsk_D|_wTwu* zwJhlLZfOM4on%4xmubUEca{a6g~0&Qy<|ZzVGvNdw=C!_3<5|ykp)hKfk$a)vcQ=z z@F49}7C03K4yB#T0_VcOfwUJ{;6)hpkoG1Eya|I2(q3hOS7FdX+Pf_9E({t-2ayFq zguwynV6q^XFfd35l?6eC!JagQmK_X8<3ou=B9Tb^#~&N=d)lKjXrurD002ovPDHLk FV1izzUnT$m literal 0 HcmV?d00001 diff --git a/Wable-iOS/Global/Resources/Assets.xcassets/Icon/ic_ripple_reply.imageset/Contents.json b/Wable-iOS/Global/Resources/Assets.xcassets/Icon/ic_ripple_reply.imageset/Contents.json new file mode 100644 index 0000000..a97e2bd --- /dev/null +++ b/Wable-iOS/Global/Resources/Assets.xcassets/Icon/ic_ripple_reply.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "ic_ripple_reply.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "ic_ripple_reply@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "ic_ripple_reply@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Wable-iOS/Global/Resources/Assets.xcassets/Icon/ic_ripple_reply.imageset/ic_ripple_reply.png b/Wable-iOS/Global/Resources/Assets.xcassets/Icon/ic_ripple_reply.imageset/ic_ripple_reply.png new file mode 100644 index 0000000000000000000000000000000000000000..20fb35c82890103b115564728c34cfdfc7fc2a1b GIT binary patch literal 421 zcmV;W0b2fvP)5@-O(n*>D|fo-%$f6{1J z?ecb*A4G0i*3?E(6fW+$ZCf8(@T}_!D{b4}g<-g#1qJ9gP4jA5mRr~L7Jmd>>6+~T zzr?=*-vIx<2+i|cUwQ|!bsQ(G$ z)!(!G3t(%aluJOBMn`HC_LOCrKM6%zl#N^|E-wk9Bu&96R6iZ(k)xx`(-(nwqfq&4 z8U3tT(5@@)rl7wS>>@VOKeX$&ied#~s9~YB(I3T7Cs2y?q9aKP)?%O&sP-Pv6)8wf zz@xLTqe|3;jv?Cf{4oU}fF&vOq9}Se3srR^>vuno1sAweXLSJj&>Pne|H_DW P00000NkvXXu0mjfL`JC4 literal 0 HcmV?d00001 diff --git a/Wable-iOS/Global/Resources/Assets.xcassets/Icon/ic_ripple_reply.imageset/ic_ripple_reply@2x.png b/Wable-iOS/Global/Resources/Assets.xcassets/Icon/ic_ripple_reply.imageset/ic_ripple_reply@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..ea9dee63ba15192e716321b461b829e7225dc76e GIT binary patch literal 715 zcmV;+0yO=JP)m4Ye z5QUPO`hfbY!CfR`b=hadqHX zhaxI6BmgbIeZsUP7|L6Q8;wSGP`mT_+{KW;qOK(#^G9`t!{MH?f>Z#;_J)K-ySH2C zhSBc#``fU#p^$z+*fV%;N(nWe&zpc-lUQH?e;$v=fs3j_A;Pe%vjSxC5Cg0s%hhUi zC+2!G$i-sOmMfT7W?Dcg;klkD@<>f6DJ0}J=9q^so>GQFD0=6)Es9;9R=T=cNcJL$ zVTKoHSR_ZvSQz%1w9!XbS5FIxuWX6ClOzB~5r;16O+dDE^|X+lxoA_4!uvmjX=2E0 zsya$YZ)ML*auM(A(#8Uc4vD#9NgE5sp&aGg5G++4B_!sFH*RIVU=;m1!hBHu9vaN= zK~W%0Dp*QLOy=8Os+-JzDJ7)HqTRX388;QIpkVHLlY?wn0+6?~kQnBbF!>zQqynXd zM0~XAH~dVB^rjY4Bos0M2u-K*RA2~Fq*H}}hQ>)g%g7x8-kcTz8VbpKDYGMcNkqpimRA-+*1~(yJ^L_s;=7mQH0t?2&`(AnqrMFFxjS^w?k>bSMp^Q~+#R xDIpVOK|K68nzpgWKcdJl-OC-SRH;&Tq95d!GrANo=4$`|002ovPDHLkV1m;RH~#JJsc3E0J_H}irzOiW!{_|? z_;@50QJH86jv@9AUscw93s=@3!pc$F<+GT<^82v-OiEITXb4WUb-xzSYR&Q6Jw%P$ z?e=t4Tcwx0yu8Ht+J(3uxL+;155EoZALmknQlj~yc)5pV?G|Du5OIEbdO8sguCA`w zC!DPie*vvK!>WfH zRxtkiZiz>E3HK6>+JC^MYv!R6=*mM`BbS$#H?Vr&%=2mEkrV{AekNNGOioTt4q28} z_VD83B9;Oavb1i;|ExkcBG?2LAHm|kj4Tdkd#=r@kfk9ov9iXS7EI7@9P06Yfm$_W zF2h+gCm&+CH48=UdJh|AphY=CSlN9&Bh1BFGPt@93HK#zRPn?qEUmX-kMWNsR8sf&ist5j!RGOB$`Xa)I(8pD>Z>r zT{8{qck`af6|Lvj@gj{1m~OKz+i(#hpDQ+c;X&RrE|%W4(oa$&*pt%`MwZI!#dAfY zJu5Sfnw&}f_-mzA*3B-KR%QZ~FqN8N8v^gRn{|J#Xt++wRnUgk7O*Qpp?7kzbf-)K zb;L!qEwZYB-`2<#jrNifjd4*)!*Q|n%uLvAyouzB#_TKATXTm(8ctzLyUcj%POfM@ zH+;xx!QYZur(TqTv3-(wC{~JXi(K=%CWrv|@!V7QfV8e_(c`7j2G~tCs zzdsa3Ju5`>E*u+sNfU-LFVT7k`)O^h5N@zNb5B`njF)JlW6t}w#pNTsba#Dy{iwHs zYDZg2pgXob1lWgg`Ba-`&(065&U<(~>JP5db)FA%rLxmS*goX}nPk-g8H4!}?X zQyE#ktRq;JAD+uOAhRhlMSHjDRj{z5qoZ#u*qXuBhEi=h3tiJA&d)J#XS5}T`@f$L j-Le-10)apv&=mdyZC}a_2P%n%00000NkvXXu0mjfBi`Ys literal 0 HcmV?d00001 diff --git a/Wable-iOS/Network/Home/ResponseDTO/FeedDetailReplyDTO.swift b/Wable-iOS/Network/Home/ResponseDTO/FeedDetailReplyDTO.swift index 8ee389c..a3cb221 100644 --- a/Wable-iOS/Network/Home/ResponseDTO/FeedDetailReplyDTO.swift +++ b/Wable-iOS/Network/Home/ResponseDTO/FeedDetailReplyDTO.swift @@ -21,3 +21,28 @@ struct FeedDetailReplyDTO: Codable { let commentImageUrl: String? let memberFanTeam: String } + +// MARK: - 1.1.0v DTO + +struct FeedReplyListDTO: Codable { + let commentID, memberID: Int + let memberProfileURL, memberNickname: String + let isGhost: Bool + let memberGhost: Int + let isLiked: Bool + let commentLikedNumber: Int + let commentText, time: String + let isDeleted: Bool + let memberFanTeam: String + let parentCommentID: Int + let isBlind: Bool? + + enum CodingKeys: String, CodingKey { + case commentID = "commentId" + case memberID = "memberId" + case memberProfileURL = "memberProfileUrl" + case memberNickname, isGhost, memberGhost, isLiked, commentLikedNumber, commentText, time, isDeleted, memberFanTeam + case parentCommentID = "parentCommentId" + case isBlind + } +} diff --git a/Wable-iOS/Presentation/Home/ViewController/FeedDetailViewController.swift b/Wable-iOS/Presentation/Home/ViewController/FeedDetailViewController.swift index 3360195..16bfd1c 100644 --- a/Wable-iOS/Presentation/Home/ViewController/FeedDetailViewController.swift +++ b/Wable-iOS/Presentation/Home/ViewController/FeedDetailViewController.swift @@ -664,13 +664,6 @@ extension FeedDetailViewController: UITableViewDataSource { if self.replyData[indexPath.row].memberId == loadUserData()?.memberId { cell.bottomView.ghostButton.isHidden = true - cell.bottomView.heartButton.snp.remakeConstraints { - $0.height.equalTo(24.adjusted) - $0.width.equalTo(45.adjusted) - $0.trailing.equalToSuperview() - $0.centerY.equalToSuperview() - } - cell.menuButtonTapped = { self.homeBottomsheetView.showSettings() self.homeBottomsheetView.deleteButton.isHidden = false @@ -684,13 +677,6 @@ extension FeedDetailViewController: UITableViewDataSource { // 다른 유저인 경우 cell.bottomView.ghostButton.isHidden = false - cell.bottomView.heartButton.snp.remakeConstraints { - $0.height.equalTo(24.adjusted) - $0.width.equalTo(45.adjusted) - $0.trailing.equalTo(cell.bottomView.ghostButton.snp.leading).offset(-16.adjusted) - $0.centerY.equalTo(cell.bottomView.ghostButton) - } - cell.menuButtonTapped = { self.homeBottomsheetView.showSettings() self.homeBottomsheetView.reportButton.isHidden = false diff --git a/Wable-iOS/Presentation/Home/Views/Cells/FeedDetailTableViewCell.swift b/Wable-iOS/Presentation/Home/Views/Cells/FeedDetailTableViewCell.swift index 8ffc3dd..64d6549 100644 --- a/Wable-iOS/Presentation/Home/Views/Cells/FeedDetailTableViewCell.swift +++ b/Wable-iOS/Presentation/Home/Views/Cells/FeedDetailTableViewCell.swift @@ -142,7 +142,8 @@ final class FeedDetailTableViewCell: UITableViewCell { } bottomView.snp.makeConstraints { - $0.leading.trailing.equalToSuperview().inset(16.adjusted) + $0.leading.equalTo(contentLabel) + $0.trailing.equalToSuperview().inset(16.adjusted) $0.height.equalTo(31.adjusted) $0.bottom.equalToSuperview().inset(18.adjusted) } diff --git a/Wable-iOS/Presentation/Home/Views/Subviews/FeedDetailBottomView.swift b/Wable-iOS/Presentation/Home/Views/Subviews/FeedDetailBottomView.swift index 59e02ef..b53bf27 100644 --- a/Wable-iOS/Presentation/Home/Views/Subviews/FeedDetailBottomView.swift +++ b/Wable-iOS/Presentation/Home/Views/Subviews/FeedDetailBottomView.swift @@ -15,12 +15,13 @@ final class FeedDetailBottomView: UIView { var ghostButtonTapped: (() -> Void)? var heartButtonTapped: (() -> Void)? + var replyButtonTapped: (() -> Void)? var isLiked: Bool = false { didSet { if isLiked { - heartButton.setImage(ImageLiterals.Icon.icHeartPress, for: .normal) + heartButton.setImage(ImageLiterals.Icon.icHeartPressSmall, for: .normal) } else { - heartButton.setImage(ImageLiterals.Icon.icHeartDefault, for: .normal) + heartButton.setImage(ImageLiterals.Icon.icHeartGray, for: .normal) } } } @@ -31,8 +32,9 @@ final class FeedDetailBottomView: UIView { let button = UIButton() var config = UIButton.Configuration.plain() button.translatesAutoresizingMaskIntoConstraints = false - button.setImage(ImageLiterals.Icon.icHeartDefault, for: .normal) - button.contentHorizontalAlignment = .center + config.contentInsets = NSDirectionalEdgeInsets.zero + button.setImage(ImageLiterals.Icon.icHeartGray, for: .normal) + button.contentHorizontalAlignment = .leading return button }() @@ -42,6 +44,16 @@ final class FeedDetailBottomView: UIView { return button }() + var replyButton: UIButton = { + let button = UIButton() + var config = UIButton.Configuration.plain() + button.translatesAutoresizingMaskIntoConstraints = false + button.setImage(ImageLiterals.Icon.icRippleRely, for: .normal) + button.contentHorizontalAlignment = .center + button.setTitleWithConfiguration("답글쓰기", font: .caption3, textColor: .gray600) + return button + }() + // MARK: - Life Cycles override init(frame: CGRect) { @@ -63,27 +75,37 @@ final class FeedDetailBottomView: UIView { extension FeedDetailBottomView { private func setHierarchy() { self.addSubviews(heartButton, - ghostButton) + replyButton, + ghostButton + ) } private func setLayout() { + heartButton.snp.makeConstraints { + $0.height.equalTo(21.adjusted) + $0.width.equalTo(53.adjusted) + $0.centerY.equalToSuperview() + $0.leading.equalToSuperview() + } + + replyButton.snp.makeConstraints { + $0.height.equalTo(20.adjusted) + $0.width.equalTo(66.adjusted) + $0.centerY.equalTo(heartButton) + $0.leading.equalTo(heartButton.snp.trailing).offset(8.adjusted) + } + ghostButton.snp.makeConstraints { $0.height.width.equalTo(32.adjusted) $0.trailing.equalToSuperview() $0.centerY.equalToSuperview() } - - heartButton.snp.makeConstraints { - $0.height.equalTo(24.adjusted) - $0.width.equalTo(45.adjusted) - $0.trailing.equalTo(ghostButton.snp.leading).offset(-16.adjusted) - $0.centerY.equalTo(ghostButton) - } } private func setAddTarget() { heartButton.addTarget(self, action: #selector(heartButtonDidTapped), for: .touchUpInside) ghostButton.addTarget(self, action: #selector(ghostButtonDidTapped), for: .touchUpInside) + replyButton.addTarget(self, action: #selector(replyButtonDidTapped), for: .touchUpInside) } @objc @@ -96,7 +118,12 @@ extension FeedDetailBottomView { ghostButtonTapped?() } + @objc + private func replyButtonDidTapped() { + replyButtonTapped?() + } + func bind(heart: Int) { - heartButton.setTitleWithConfiguration("\(heart)", font: .caption1, textColor: .wableBlack) + heartButton.setTitleWithConfiguration("\(heart)", font: .caption1, textColor: .gray600) } }