From 9fb598f906df6db6a97b09f22eec7768ff9c6961 Mon Sep 17 00:00:00 2001 From: mh <729263080@qq.com> Date: Thu, 16 Oct 2025 16:05:19 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=92=E8=89=B2=E6=A8=A1=E5=9D=97UI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../header_check_icon.imageset/Contents.json | 22 ++ .../header_check_icon@2x.png | Bin 0 -> 832 bytes .../header_check_icon@3x.png | Bin 0 -> 1624 bytes .../Contents.json | 22 ++ .../header_discord_icon@2x.png | Bin 0 -> 1614 bytes .../header_discord_icon@3x.png | Bin 0 -> 3702 bytes .../header_money_icon.imageset/Contents.json | 22 ++ .../header_money_icon@2x.png | Bin 0 -> 1936 bytes .../header_money_icon@3x.png | Bin 0 -> 3980 bytes .../Contents.json | 22 ++ .../header_not_subscriber_icon@2x.png | Bin 0 -> 789 bytes .../header_not_subscriber_icon@3x.png | Bin 0 -> 1580 bytes .../header_search_icon.imageset/Contents.json | 22 ++ .../header_search_icon@2x.png | Bin 0 -> 1517 bytes .../header_search_icon@3x.png | Bin 0 -> 3315 bytes .../Contents.json | 22 ++ .../header_subscriber_icon@2x.png | Bin 0 -> 1119 bytes .../header_subscriber_icon@3x.png | Bin 0 -> 2267 bytes .../Role/role_book.imageset/Contents.json | 22 ++ .../Role/role_book.imageset/role_book@2x.png | Bin 0 -> 2293 bytes .../Role/role_book.imageset/role_book@3x.png | Bin 0 -> 4584 bytes .../role_bottom_bg.imageset/Contents.json | 22 ++ .../role_bottom_bg@2x.png | Bin 0 -> 46623 bytes .../role_bottom_bg@3x.png | Bin 0 -> 77374 bytes .../role_close_icon.imageset/Contents.json | 22 ++ .../role_close_icon@2x.png | Bin 0 -> 869 bytes .../role_close_icon@3x.png | Bin 0 -> 1753 bytes .../Role/role_from.imageset/Contents.json | 22 ++ .../Role/role_from.imageset/role_from@2x.png | Bin 0 -> 794 bytes .../Role/role_from.imageset/role_from@3x.png | Bin 0 -> 1812 bytes .../role_open_icon.imageset/Contents.json | 22 ++ .../role_open_icon@2x.png | Bin 0 -> 876 bytes .../role_open_icon@3x.png | Bin 0 -> 1763 bytes .../Role/role_star.imageset/Contents.json | 22 ++ .../Role/role_star.imageset/role_star@2x.png | Bin 0 -> 1101 bytes .../Role/role_star.imageset/role_star@3x.png | Bin 0 -> 2098 bytes .../Role/role_top_bg.imageset/Contents.json | 22 ++ .../role_top_bg.imageset/role_top_bg@2x.png | Bin 0 -> 25732 bytes .../role_top_bg.imageset/role_top_bg@3x.png | Bin 0 -> 42876 bytes .../Role/role_video.imageset/Contents.json | 22 ++ .../role_video.imageset/role_video@2x.png | Bin 0 -> 675 bytes .../role_video.imageset/role_video@3x.png | Bin 0 -> 1262 bytes .../Src/Components/Base/CLContainerVC.swift | 74 +++++++ .../Components/Base/CLTabRootController.swift | 2 +- .../UI/BaseTopView/CLTopHeaderView.swift | 189 ++++++++++++++++++ .../Roles/RolesRootPageController.swift | 61 ++++++ .../Roles/View/CLRoleCollectionCell.swift | 186 +++++++++++++++++ .../Roles/View/CLWaterfallLayout.swift | 78 ++++++++ .../Roles/View/RolesRootPageView.swift | 133 ++++++++++++ .../Src/Modules/Tab/TabBarController.swift | 3 +- .../Src/Utils/Extensions/UIDeviceExt.swift | 22 ++ 51 files changed, 1054 insertions(+), 2 deletions(-) create mode 100644 Visual_Novel_iOS/Assets.xcassets/Base/header_check_icon.imageset/Contents.json create mode 100644 Visual_Novel_iOS/Assets.xcassets/Base/header_check_icon.imageset/header_check_icon@2x.png create mode 100644 Visual_Novel_iOS/Assets.xcassets/Base/header_check_icon.imageset/header_check_icon@3x.png create mode 100644 Visual_Novel_iOS/Assets.xcassets/Base/header_discord_icon.imageset/Contents.json create mode 100644 Visual_Novel_iOS/Assets.xcassets/Base/header_discord_icon.imageset/header_discord_icon@2x.png create mode 100644 Visual_Novel_iOS/Assets.xcassets/Base/header_discord_icon.imageset/header_discord_icon@3x.png create mode 100644 Visual_Novel_iOS/Assets.xcassets/Base/header_money_icon.imageset/Contents.json create mode 100644 Visual_Novel_iOS/Assets.xcassets/Base/header_money_icon.imageset/header_money_icon@2x.png create mode 100644 Visual_Novel_iOS/Assets.xcassets/Base/header_money_icon.imageset/header_money_icon@3x.png create mode 100644 Visual_Novel_iOS/Assets.xcassets/Base/header_not_subscriber_icon.imageset/Contents.json create mode 100644 Visual_Novel_iOS/Assets.xcassets/Base/header_not_subscriber_icon.imageset/header_not_subscriber_icon@2x.png create mode 100644 Visual_Novel_iOS/Assets.xcassets/Base/header_not_subscriber_icon.imageset/header_not_subscriber_icon@3x.png create mode 100644 Visual_Novel_iOS/Assets.xcassets/Base/header_search_icon.imageset/Contents.json create mode 100644 Visual_Novel_iOS/Assets.xcassets/Base/header_search_icon.imageset/header_search_icon@2x.png create mode 100644 Visual_Novel_iOS/Assets.xcassets/Base/header_search_icon.imageset/header_search_icon@3x.png create mode 100644 Visual_Novel_iOS/Assets.xcassets/Base/header_subscriber_icon.imageset/Contents.json create mode 100644 Visual_Novel_iOS/Assets.xcassets/Base/header_subscriber_icon.imageset/header_subscriber_icon@2x.png create mode 100644 Visual_Novel_iOS/Assets.xcassets/Base/header_subscriber_icon.imageset/header_subscriber_icon@3x.png create mode 100644 Visual_Novel_iOS/Assets.xcassets/Role/role_book.imageset/Contents.json create mode 100644 Visual_Novel_iOS/Assets.xcassets/Role/role_book.imageset/role_book@2x.png create mode 100644 Visual_Novel_iOS/Assets.xcassets/Role/role_book.imageset/role_book@3x.png create mode 100644 Visual_Novel_iOS/Assets.xcassets/Role/role_bottom_bg.imageset/Contents.json create mode 100644 Visual_Novel_iOS/Assets.xcassets/Role/role_bottom_bg.imageset/role_bottom_bg@2x.png create mode 100644 Visual_Novel_iOS/Assets.xcassets/Role/role_bottom_bg.imageset/role_bottom_bg@3x.png create mode 100644 Visual_Novel_iOS/Assets.xcassets/Role/role_close_icon.imageset/Contents.json create mode 100644 Visual_Novel_iOS/Assets.xcassets/Role/role_close_icon.imageset/role_close_icon@2x.png create mode 100644 Visual_Novel_iOS/Assets.xcassets/Role/role_close_icon.imageset/role_close_icon@3x.png create mode 100644 Visual_Novel_iOS/Assets.xcassets/Role/role_from.imageset/Contents.json create mode 100644 Visual_Novel_iOS/Assets.xcassets/Role/role_from.imageset/role_from@2x.png create mode 100644 Visual_Novel_iOS/Assets.xcassets/Role/role_from.imageset/role_from@3x.png create mode 100644 Visual_Novel_iOS/Assets.xcassets/Role/role_open_icon.imageset/Contents.json create mode 100644 Visual_Novel_iOS/Assets.xcassets/Role/role_open_icon.imageset/role_open_icon@2x.png create mode 100644 Visual_Novel_iOS/Assets.xcassets/Role/role_open_icon.imageset/role_open_icon@3x.png create mode 100644 Visual_Novel_iOS/Assets.xcassets/Role/role_star.imageset/Contents.json create mode 100644 Visual_Novel_iOS/Assets.xcassets/Role/role_star.imageset/role_star@2x.png create mode 100644 Visual_Novel_iOS/Assets.xcassets/Role/role_star.imageset/role_star@3x.png create mode 100644 Visual_Novel_iOS/Assets.xcassets/Role/role_top_bg.imageset/Contents.json create mode 100644 Visual_Novel_iOS/Assets.xcassets/Role/role_top_bg.imageset/role_top_bg@2x.png create mode 100644 Visual_Novel_iOS/Assets.xcassets/Role/role_top_bg.imageset/role_top_bg@3x.png create mode 100644 Visual_Novel_iOS/Assets.xcassets/Role/role_video.imageset/Contents.json create mode 100644 Visual_Novel_iOS/Assets.xcassets/Role/role_video.imageset/role_video@2x.png create mode 100644 Visual_Novel_iOS/Assets.xcassets/Role/role_video.imageset/role_video@3x.png create mode 100644 Visual_Novel_iOS/Src/Components/Base/CLContainerVC.swift create mode 100644 Visual_Novel_iOS/Src/Components/UI/BaseTopView/CLTopHeaderView.swift create mode 100644 Visual_Novel_iOS/Src/Modules/Roles/RolesRootPageController.swift create mode 100644 Visual_Novel_iOS/Src/Modules/Roles/View/CLRoleCollectionCell.swift create mode 100644 Visual_Novel_iOS/Src/Modules/Roles/View/CLWaterfallLayout.swift create mode 100644 Visual_Novel_iOS/Src/Modules/Roles/View/RolesRootPageView.swift diff --git a/Visual_Novel_iOS/Assets.xcassets/Base/header_check_icon.imageset/Contents.json b/Visual_Novel_iOS/Assets.xcassets/Base/header_check_icon.imageset/Contents.json new file mode 100644 index 0000000..49a3220 --- /dev/null +++ b/Visual_Novel_iOS/Assets.xcassets/Base/header_check_icon.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "header_check_icon@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "header_check_icon@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Visual_Novel_iOS/Assets.xcassets/Base/header_check_icon.imageset/header_check_icon@2x.png b/Visual_Novel_iOS/Assets.xcassets/Base/header_check_icon.imageset/header_check_icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..24068831c662edb6f0d49f383866813d5d1bec80 GIT binary patch literal 832 zcmV-G1Hb%
jiW@fc*%}=kqJr8|)Q! G9L6Nm3lS!o`d3Z&XXP5Vd
zX+u?tu$u>?tE(&0+uN(eBrT(Y2}CB7k(A6fx1qs_oIH8bxI7CQ28i?mT_;s$K|=yd
z@!Ss$5&8W2bJa!SZc{*LhR%j9Gz1Wo%9hCe&=A17y&M=AD7B&N^1;~I*%9mO>ujMR
zB71szB-Z1Us1+k67S}rnN-kL_lG^6^(14K3BPa=KL)C1P{UTeaf5_!)CPzqN7S$Wn
z52c|eO*GRsTWD}3xje@5wLyt3)H`THU1~?`S|}5Ycswro-ll-Sqd!HKfy-y7r>6_7
zUO<{ojxhe9krJ$v+t4tepk&H59ec(X5^;w_RULcohlT)k>@||d^5NpL%Ll}c@-Rr3
zT|OW*O46vcdA@TbAY`GG&YU?@8 Z!w-2t8_$OXysJzI}(jH}0VUMxtTb=z8h
zf4?>8h;-YgV-!w~#1)}M;-NW6t+c2b#nJ {_11^ukJmU^7{fr+@W-Jub)
zcbI-^jT6^MNQh~s%)55BjSbqz)_Kvv(r=k+j@tY=&cpET&2C-(`yC>aZ`ZJy()|EH
ze$pdjL!W!%+9ZGAj?ubKOc^eB-jSSP<~RotSXaDywq97yjaO`B;wjZj0ua||B=kL=
zl4{{V_YBqnD$thNZOx%ui3Z|1N!?O~X`rHiiN9D$Hdhvk19OLvJIflOXC}
zpUJZHl597M>A9Lsow3ZSBu&W;W+Vg2^dtpjY@8G7h0Zo?Ti?*g0118&qYL$gjR7}*!Pt8QbMm+21O2_6~)?
ay6aA-CZJWB{`I5_L0C-uP{9>d-R)wBD{^)9e7Kv+rSG8HbYU3C+>{8qwp!2FL5q
z4uHnb
D)`wV7rLfinlw
zewuOSU!-wGRaI5P`H)vhoDV;N{~7p2>e<4$vm3CM(J&f-iS{Qfsfe_*k?x00)QiT_
z-tKZ!q?0TpfU>i*)gqfIvcs8VBRLx1lT!g&mU6<|2?UT
zr$w4|Ib1$0oes`iEFJ+(`5b(KqkTedAzzwaeC-9XfSA$tJFBB4qB?O{9t#J;N#on4
z9gj%O-YLCQMx?plm(BxabgIAM*mpiI`FZr>phZvqM*Hm4erypm6w&FZiQOm?egd<~
zV|6nRR
diDAs`zTc(i+Q1>XU63jNz+IF~Tm#+CoYm8h
zt0whJWh;