younger_times
2023-06-09 7828cc52fa4b130cf2ade5b78a5aa2cc8e672d03
完成登录模块UI
6个文件已修改
118个文件已添加
3303 ■■■■■ 已修改文件
WanPai.xcodeproj/project.pbxproj 249 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Bg/Contents.json 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Bg/b_1.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Bg/b_1.imageset/b_1@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Bg/b_1.imageset/b_1@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Bg/b_2.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Bg/b_2.imageset/b_2@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Bg/b_2.imageset/b_2@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Bg/b_3.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Bg/b_3.imageset/b_4@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Bg/b_3.imageset/b_4@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Bg/b_4.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Bg/b_4.imageset/b_3@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Bg/b_4.imageset/b_3@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Bg/b_5.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Bg/b_5.imageset/b_5@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Bg/b_5.imageset/b_5@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Bg/b_6.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Bg/b_6.imageset/b_6@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Bg/b_6.imageset/b_6@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Bg/b_7.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Bg/b_7.imageset/b_8@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Bg/b_7.imageset/b_8@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Bg/b_8.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Bg/b_8.imageset/b_7@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Bg/b_8.imageset/b_7@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Bg/bg_home.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Bg/bg_home.imageset/bg_home@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Bg/bg_home.imageset/bg_home@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Bg/icon_LOGO.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Bg/icon_LOGO.imageset/icon_LOGO@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Bg/icon_LOGO.imageset/icon_LOGO@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Btns/btn_add.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Btns/btn_add.imageset/btn_add@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Btns/btn_add.imageset/btn_add@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Btns/btn_choose.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Btns/btn_choose.imageset/btn_choose@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Btns/btn_choose.imageset/btn_choose@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Btns/btn_choose_s.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Btns/btn_choose_s.imageset/btn_choose_s@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Btns/btn_choose_s.imageset/btn_choose_s@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Icons/icon_alipay.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Icons/icon_alipay.imageset/icon_alipay@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Icons/icon_alipay.imageset/icon_alipay@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Icons/icon_arrow.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Icons/icon_arrow.imageset/icon_arrow@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Icons/icon_arrow.imageset/icon_arrow@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Icons/icon_coin.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Icons/icon_coin.imageset/icon_coin@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Icons/icon_coin.imageset/icon_coin@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Icons/icon_coupon_footer.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Icons/icon_coupon_footer.imageset/icon_coupon_footer@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Icons/icon_coupon_footer.imageset/icon_coupon_footer@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Icons/icon_coupon_header.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Icons/icon_coupon_header.imageset/icon_coupon_header@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Icons/icon_coupon_header.imageset/icon_coupon_header@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Icons/icon_fail.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Icons/icon_fail.imageset/icon_fail@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Icons/icon_fail.imageset/icon_fail@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Icons/icon_map.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Icons/icon_map.imageset/icon_map@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Icons/icon_map.imageset/icon_map@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Icons/icon_success.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Icons/icon_success.imageset/icon_success@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Icons/icon_success.imageset/icon_success@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Icons/icon_wechat.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Icons/icon_wechat.imageset/icon_wechat@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Icons/icon_wechat.imageset/icon_wechat@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/Contents.json 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_course.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_course.imageset/tabbar_course@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_course.imageset/tabbar_course@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_course_s.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_course_s.imageset/tabbar_course_s@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_course_s.imageset/tabbar_course_s@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_home.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_home.imageset/tabbar_home@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_home.imageset/tabbar_home@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_home_s.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_home_s.imageset/tabbar_home_s@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_home_s.imageset/tabbar_home_s@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_search.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_search.imageset/tabbar_profile@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_search.imageset/tabbar_profile@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_search_s.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_search_s.imageset/tabbar_profile_s@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_search_s.imageset/tabbar_profile_s@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_welfare.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_welfare.imageset/tabbar_welfare@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_welfare.imageset/tabbar_welfare@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_welfare_s.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_welfare_s.imageset/tabbar_welfare_s@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_welfare_s.imageset/tabbar_welfare_s@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Base/BaseNav.swift 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Base/BaseTabBarVC.swift 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Base/BaseVC.swift 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Base/TapBtn.swift 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Common/Layout/WaterFallFlowLayout.swift 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Common/View/PaymentView.swift 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Common/View/PaymentView.xib 282 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Config/Colors.swift 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Config/Enums.swift 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Config/Fronts.swift 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Course/VC/CourseVC.swift 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Course/VC/CourseVC.xib 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Home/CCell/HomeCCell.swift 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Home/CCell/HomeCCell.xib 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Home/VC/HomeVC.swift 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Home/VC/HomeVC.xib 162 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Home/VC/JoinMemberIntroduceVC.swift 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Home/VC/JoinMemberIntroduceVC.xib 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Login/VC/LoginRegOrForgotVC.swift 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Login/VC/LoginRegOrForgotVC.xib 207 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Login/VC/LoginVC.swift 196 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Login/VC/LoginVC.xib 380 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Other/CCell/CouponCCell.swift 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Other/CCell/CouponCCell.xib 131 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Other/VC/PaymentResultVC.swift 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Other/VC/PaymentResultVC.xib 151 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Search/VC/SearchVC.swift 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Search/VC/SearchVC.xib 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Welfare/VC/WelfareVC.swift 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Welfare/VC/WelfareVC.xib 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/SceneDelegate.swift 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai.xcodeproj/project.pbxproj
@@ -8,6 +8,21 @@
/* Begin PBXBuildFile section */
        32D5FD87AB45829154125950 /* Pods_WanPai.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F12BCB644B5E0392E2BFF8C7 /* Pods_WanPai.framework */; };
        8D4905A92A31A6EC00E38513 /* HomeCCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D4905A72A31A6EC00E38513 /* HomeCCell.swift */; };
        8D4905AA2A31A6EC00E38513 /* HomeCCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8D4905A82A31A6EC00E38513 /* HomeCCell.xib */; };
        8D4905AD2A31AE7100E38513 /* JoinMemberIntroduceVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D4905AB2A31AE7100E38513 /* JoinMemberIntroduceVC.swift */; };
        8D4905AE2A31AE7100E38513 /* JoinMemberIntroduceVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8D4905AC2A31AE7100E38513 /* JoinMemberIntroduceVC.xib */; };
        8D5B80B72A31C4C700B86520 /* PaymentView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8D5B80B62A31C4C700B86520 /* PaymentView.xib */; };
        8D5C15062A31861D00A8BCC9 /* TapBtn.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D5C15052A31861C00A8BCC9 /* TapBtn.swift */; };
        8D5C150C2A31885B00A8BCC9 /* CommonAlertView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8D5C15082A31885B00A8BCC9 /* CommonAlertView.xib */; };
        8D5C150D2A31885B00A8BCC9 /* AgreentView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8D5C15092A31885B00A8BCC9 /* AgreentView.xib */; };
        8D5C150E2A31885B00A8BCC9 /* CommonAlertView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D5C150A2A31885B00A8BCC9 /* CommonAlertView.swift */; };
        8D5C150F2A31885B00A8BCC9 /* AgreentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D5C150B2A31885B00A8BCC9 /* AgreentView.swift */; };
        8D630BF82A31801300F0B7A8 /* SearchVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D630BF62A31801300F0B7A8 /* SearchVC.swift */; };
        8D630BF92A31801300F0B7A8 /* SearchVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8D630BF72A31801300F0B7A8 /* SearchVC.xib */; };
        8D630BFB2A3180B000F0B7A8 /* BaseTabBarVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D630BFA2A3180B000F0B7A8 /* BaseTabBarVC.swift */; };
        8D667BF42A31C419005B02FB /* PaymentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D667BF32A31C419005B02FB /* PaymentView.swift */; };
        8D710F6D2A31897C0031E2D1 /* WaterFallFlowLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D710F6C2A31897C0031E2D1 /* WaterFallFlowLayout.swift */; };
        8D8400D22A2F1430003AF6A2 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D8400D12A2F1430003AF6A2 /* AppDelegate.swift */; };
        8D8400D42A2F1430003AF6A2 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D8400D32A2F1430003AF6A2 /* SceneDelegate.swift */; };
        8D8400D92A2F1430003AF6A2 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 8D8400D72A2F1430003AF6A2 /* Main.storyboard */; };
@@ -15,20 +30,44 @@
        8D8400DE2A2F1432003AF6A2 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 8D8400DC2A2F1432003AF6A2 /* LaunchScreen.storyboard */; };
        8D8400E92A2F14A3003AF6A2 /* LoginVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D8400E72A2F14A3003AF6A2 /* LoginVC.swift */; };
        8D8400EA2A2F14A3003AF6A2 /* LoginVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8D8400E82A2F14A3003AF6A2 /* LoginVC.xib */; };
        8DA901FF2A308E9200918C98 /* AgreentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DA901FE2A308E9200918C98 /* AgreentView.swift */; };
        8DA902012A308ED100918C98 /* AgreentView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8DA902002A308ED100918C98 /* AgreentView.xib */; };
        8D8DEDED2A31D82100F2C7FA /* PaymentResultVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D8DEDEB2A31D82100F2C7FA /* PaymentResultVC.swift */; };
        8D8DEDEE2A31D82100F2C7FA /* PaymentResultVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8D8DEDEC2A31D82100F2C7FA /* PaymentResultVC.xib */; };
        8D8DEDF22A31DDC500F2C7FA /* CouponCCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D8DEDF02A31DDC500F2C7FA /* CouponCCell.swift */; };
        8D8DEDF32A31DDC500F2C7FA /* CouponCCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8D8DEDF12A31DDC500F2C7FA /* CouponCCell.xib */; };
        8DA51DF72A32BE270085F4BA /* Enums.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DA51DF62A32BE270085F4BA /* Enums.swift */; };
        8DAEB54A2A30593C00814766 /* BaseNav.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DAEB5482A30593B00814766 /* BaseNav.swift */; };
        8DAEB54B2A30593C00814766 /* BaseVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DAEB5492A30593C00814766 /* BaseVC.swift */; };
        8DAEB54E2A305A0100814766 /* Colors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DAEB54D2A305A0100814766 /* Colors.swift */; };
        8DAEB5502A305AEF00814766 /* Def.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DAEB54F2A305AEF00814766 /* Def.swift */; };
        8DAEB5522A305B2D00814766 /* Fronts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DAEB5512A305B2D00814766 /* Fronts.swift */; };
        8DAEB5562A3062B800814766 /* CommonAlertView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DAEB5552A3062B800814766 /* CommonAlertView.swift */; };
        8DAEB5582A3062D900814766 /* CommonAlertView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8DAEB5572A3062D900814766 /* CommonAlertView.xib */; };
        8DFA9B762A316E9A00E99281 /* LoginRegOrForgotVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DFA9B742A316E9A00E99281 /* LoginRegOrForgotVC.swift */; };
        8DFA9B772A316E9A00E99281 /* LoginRegOrForgotVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8DFA9B752A316E9A00E99281 /* LoginRegOrForgotVC.xib */; };
        8DFA9B852A3172BE00E99281 /* HomeVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DFA9B832A3172BE00E99281 /* HomeVC.swift */; };
        8DFA9B862A3172BE00E99281 /* HomeVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8DFA9B842A3172BE00E99281 /* HomeVC.xib */; };
        8DFA9B8B2A317DAA00E99281 /* CourseVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DFA9B892A317DAA00E99281 /* CourseVC.swift */; };
        8DFA9B8C2A317DAA00E99281 /* CourseVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8DFA9B8A2A317DAA00E99281 /* CourseVC.xib */; };
        8DFA9B912A317DE900E99281 /* WelfareVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DFA9B8F2A317DE900E99281 /* WelfareVC.swift */; };
        8DFA9B922A317DE900E99281 /* WelfareVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8DFA9B902A317DE900E99281 /* WelfareVC.xib */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
        0995405518BC2BFFEF866458 /* Pods-WanPai.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WanPai.release.xcconfig"; path = "Target Support Files/Pods-WanPai/Pods-WanPai.release.xcconfig"; sourceTree = "<group>"; };
        732365E0737559969E7CB12D /* Pods-WanPai.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WanPai.debug.xcconfig"; path = "Target Support Files/Pods-WanPai/Pods-WanPai.debug.xcconfig"; sourceTree = "<group>"; };
        8D4905A72A31A6EC00E38513 /* HomeCCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeCCell.swift; sourceTree = "<group>"; };
        8D4905A82A31A6EC00E38513 /* HomeCCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HomeCCell.xib; sourceTree = "<group>"; };
        8D4905AB2A31AE7100E38513 /* JoinMemberIntroduceVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JoinMemberIntroduceVC.swift; sourceTree = "<group>"; };
        8D4905AC2A31AE7100E38513 /* JoinMemberIntroduceVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = JoinMemberIntroduceVC.xib; sourceTree = "<group>"; };
        8D5B80B62A31C4C700B86520 /* PaymentView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = PaymentView.xib; sourceTree = "<group>"; };
        8D5C15052A31861C00A8BCC9 /* TapBtn.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TapBtn.swift; sourceTree = "<group>"; };
        8D5C15082A31885B00A8BCC9 /* CommonAlertView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CommonAlertView.xib; sourceTree = "<group>"; };
        8D5C15092A31885B00A8BCC9 /* AgreentView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = AgreentView.xib; sourceTree = "<group>"; };
        8D5C150A2A31885B00A8BCC9 /* CommonAlertView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CommonAlertView.swift; sourceTree = "<group>"; };
        8D5C150B2A31885B00A8BCC9 /* AgreentView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AgreentView.swift; sourceTree = "<group>"; };
        8D630BF62A31801300F0B7A8 /* SearchVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchVC.swift; sourceTree = "<group>"; };
        8D630BF72A31801300F0B7A8 /* SearchVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SearchVC.xib; sourceTree = "<group>"; };
        8D630BFA2A3180B000F0B7A8 /* BaseTabBarVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseTabBarVC.swift; sourceTree = "<group>"; };
        8D667BF32A31C419005B02FB /* PaymentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaymentView.swift; sourceTree = "<group>"; };
        8D710F6C2A31897C0031E2D1 /* WaterFallFlowLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WaterFallFlowLayout.swift; sourceTree = "<group>"; };
        8D8400CE2A2F1430003AF6A2 /* WanPai.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = WanPai.app; sourceTree = BUILT_PRODUCTS_DIR; };
        8D8400D12A2F1430003AF6A2 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
        8D8400D32A2F1430003AF6A2 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = "<group>"; };
@@ -38,15 +77,24 @@
        8D8400DF2A2F1432003AF6A2 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
        8D8400E72A2F14A3003AF6A2 /* LoginVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginVC.swift; sourceTree = "<group>"; };
        8D8400E82A2F14A3003AF6A2 /* LoginVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = LoginVC.xib; sourceTree = "<group>"; };
        8DA901FE2A308E9200918C98 /* AgreentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AgreentView.swift; sourceTree = "<group>"; };
        8DA902002A308ED100918C98 /* AgreentView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AgreentView.xib; sourceTree = "<group>"; };
        8D8DEDEB2A31D82100F2C7FA /* PaymentResultVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaymentResultVC.swift; sourceTree = "<group>"; };
        8D8DEDEC2A31D82100F2C7FA /* PaymentResultVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = PaymentResultVC.xib; sourceTree = "<group>"; };
        8D8DEDF02A31DDC500F2C7FA /* CouponCCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CouponCCell.swift; sourceTree = "<group>"; };
        8D8DEDF12A31DDC500F2C7FA /* CouponCCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CouponCCell.xib; sourceTree = "<group>"; };
        8DA51DF62A32BE270085F4BA /* Enums.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Enums.swift; sourceTree = "<group>"; };
        8DAEB5482A30593B00814766 /* BaseNav.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BaseNav.swift; sourceTree = "<group>"; };
        8DAEB5492A30593C00814766 /* BaseVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BaseVC.swift; sourceTree = "<group>"; };
        8DAEB54D2A305A0100814766 /* Colors.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Colors.swift; sourceTree = "<group>"; };
        8DAEB54F2A305AEF00814766 /* Def.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Def.swift; sourceTree = "<group>"; };
        8DAEB5512A305B2D00814766 /* Fronts.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Fronts.swift; sourceTree = "<group>"; };
        8DAEB5552A3062B800814766 /* CommonAlertView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommonAlertView.swift; sourceTree = "<group>"; };
        8DAEB5572A3062D900814766 /* CommonAlertView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CommonAlertView.xib; sourceTree = "<group>"; };
        8DFA9B742A316E9A00E99281 /* LoginRegOrForgotVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginRegOrForgotVC.swift; sourceTree = "<group>"; };
        8DFA9B752A316E9A00E99281 /* LoginRegOrForgotVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = LoginRegOrForgotVC.xib; sourceTree = "<group>"; };
        8DFA9B832A3172BE00E99281 /* HomeVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeVC.swift; sourceTree = "<group>"; };
        8DFA9B842A3172BE00E99281 /* HomeVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HomeVC.xib; sourceTree = "<group>"; };
        8DFA9B892A317DAA00E99281 /* CourseVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CourseVC.swift; sourceTree = "<group>"; };
        8DFA9B8A2A317DAA00E99281 /* CourseVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CourseVC.xib; sourceTree = "<group>"; };
        8DFA9B8F2A317DE900E99281 /* WelfareVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WelfareVC.swift; sourceTree = "<group>"; };
        8DFA9B902A317DE900E99281 /* WelfareVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = WelfareVC.xib; sourceTree = "<group>"; };
        F12BCB644B5E0392E2BFF8C7 /* Pods_WanPai.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_WanPai.framework; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
@@ -79,6 +127,36 @@
            path = Pods;
            sourceTree = "<group>";
        };
        8D4905A62A31A6D400E38513 /* CCell */ = {
            isa = PBXGroup;
            children = (
                8D4905A72A31A6EC00E38513 /* HomeCCell.swift */,
                8D4905A82A31A6EC00E38513 /* HomeCCell.xib */,
            );
            path = CCell;
            sourceTree = "<group>";
        };
        8D5C15072A31885B00A8BCC9 /* View */ = {
            isa = PBXGroup;
            children = (
                8D5C15082A31885B00A8BCC9 /* CommonAlertView.xib */,
                8D5C15092A31885B00A8BCC9 /* AgreentView.xib */,
                8D5C150A2A31885B00A8BCC9 /* CommonAlertView.swift */,
                8D5C150B2A31885B00A8BCC9 /* AgreentView.swift */,
                8D667BF32A31C419005B02FB /* PaymentView.swift */,
                8D5B80B62A31C4C700B86520 /* PaymentView.xib */,
            );
            path = View;
            sourceTree = "<group>";
        };
        8D5C15102A31886D00A8BCC9 /* Layout */ = {
            isa = PBXGroup;
            children = (
                8D710F6C2A31897C0031E2D1 /* WaterFallFlowLayout.swift */,
            );
            path = Layout;
            sourceTree = "<group>";
        };
        8D8400C52A2F1430003AF6A2 = {
            isa = PBXGroup;
            children = (
@@ -100,10 +178,10 @@
        8D8400D02A2F1430003AF6A2 /* WanPai */ = {
            isa = PBXGroup;
            children = (
                8DFA9B782A31722300E99281 /* Root */,
                8DAEB5532A30629500814766 /* Common */,
                8DAEB54C2A3059F700814766 /* Config */,
                8DAEB5472A30592800814766 /* Base */,
                8D8400E52A2F145D003AF6A2 /* Login */,
                8D8400D12A2F1430003AF6A2 /* AppDelegate.swift */,
                8D8400D32A2F1430003AF6A2 /* SceneDelegate.swift */,
                8D8400D72A2F1430003AF6A2 /* Main.storyboard */,
@@ -127,8 +205,37 @@
            children = (
                8D8400E72A2F14A3003AF6A2 /* LoginVC.swift */,
                8D8400E82A2F14A3003AF6A2 /* LoginVC.xib */,
                8DFA9B742A316E9A00E99281 /* LoginRegOrForgotVC.swift */,
                8DFA9B752A316E9A00E99281 /* LoginRegOrForgotVC.xib */,
            );
            path = VC;
            sourceTree = "<group>";
        };
        8D8DEDE92A31D7F400F2C7FA /* Other */ = {
            isa = PBXGroup;
            children = (
                8D8DEDEF2A31DDAA00F2C7FA /* CCell */,
                8D8DEDEA2A31D80B00F2C7FA /* VC */,
            );
            path = Other;
            sourceTree = "<group>";
        };
        8D8DEDEA2A31D80B00F2C7FA /* VC */ = {
            isa = PBXGroup;
            children = (
                8D8DEDEB2A31D82100F2C7FA /* PaymentResultVC.swift */,
                8D8DEDEC2A31D82100F2C7FA /* PaymentResultVC.xib */,
            );
            path = VC;
            sourceTree = "<group>";
        };
        8D8DEDEF2A31DDAA00F2C7FA /* CCell */ = {
            isa = PBXGroup;
            children = (
                8D8DEDF02A31DDC500F2C7FA /* CouponCCell.swift */,
                8D8DEDF12A31DDC500F2C7FA /* CouponCCell.xib */,
            );
            path = CCell;
            sourceTree = "<group>";
        };
        8DAEB5472A30592800814766 /* Base */ = {
@@ -136,6 +243,8 @@
            children = (
                8DAEB5482A30593B00814766 /* BaseNav.swift */,
                8DAEB5492A30593C00814766 /* BaseVC.swift */,
                8D630BFA2A3180B000F0B7A8 /* BaseTabBarVC.swift */,
                8D5C15052A31861C00A8BCC9 /* TapBtn.swift */,
            );
            path = Base;
            sourceTree = "<group>";
@@ -146,6 +255,7 @@
                8DAEB54D2A305A0100814766 /* Colors.swift */,
                8DAEB54F2A305AEF00814766 /* Def.swift */,
                8DAEB5512A305B2D00814766 /* Fronts.swift */,
                8DA51DF62A32BE270085F4BA /* Enums.swift */,
            );
            path = Config;
            sourceTree = "<group>";
@@ -153,21 +263,94 @@
        8DAEB5532A30629500814766 /* Common */ = {
            isa = PBXGroup;
            children = (
                8DAEB5542A30629C00814766 /* View */,
                8D5C15102A31886D00A8BCC9 /* Layout */,
                8D5C15072A31885B00A8BCC9 /* View */,
            );
            path = Common;
            sourceTree = "<group>";
        };
        8DAEB5542A30629C00814766 /* View */ = {
        8DFA9B782A31722300E99281 /* Root */ = {
            isa = PBXGroup;
            children = (
                8DAEB5552A3062B800814766 /* CommonAlertView.swift */,
                8DAEB5572A3062D900814766 /* CommonAlertView.xib */,
                8DA901FE2A308E9200918C98 /* AgreentView.swift */,
                8DA902002A308ED100918C98 /* AgreentView.xib */,
                8D8DEDE92A31D7F400F2C7FA /* Other */,
                8DFA9B932A317E1E00E99281 /* Search */,
                8DFA9B8D2A317DBB00E99281 /* Welfare */,
                8DFA9B872A317D8B00E99281 /* Course */,
                8D8400E52A2F145D003AF6A2 /* Login */,
                8DFA9B812A31729000E99281 /* Home */,
            );
            name = View;
            path = "../New Group/View";
            path = Root;
            sourceTree = "<group>";
        };
        8DFA9B812A31729000E99281 /* Home */ = {
            isa = PBXGroup;
            children = (
                8D4905A62A31A6D400E38513 /* CCell */,
                8DFA9B822A3172A300E99281 /* VC */,
            );
            path = Home;
            sourceTree = "<group>";
        };
        8DFA9B822A3172A300E99281 /* VC */ = {
            isa = PBXGroup;
            children = (
                8DFA9B832A3172BE00E99281 /* HomeVC.swift */,
                8DFA9B842A3172BE00E99281 /* HomeVC.xib */,
                8D4905AB2A31AE7100E38513 /* JoinMemberIntroduceVC.swift */,
                8D4905AC2A31AE7100E38513 /* JoinMemberIntroduceVC.xib */,
            );
            path = VC;
            sourceTree = "<group>";
        };
        8DFA9B872A317D8B00E99281 /* Course */ = {
            isa = PBXGroup;
            children = (
                8DFA9B882A317D9B00E99281 /* VC */,
            );
            path = Course;
            sourceTree = "<group>";
        };
        8DFA9B882A317D9B00E99281 /* VC */ = {
            isa = PBXGroup;
            children = (
                8DFA9B892A317DAA00E99281 /* CourseVC.swift */,
                8DFA9B8A2A317DAA00E99281 /* CourseVC.xib */,
            );
            path = VC;
            sourceTree = "<group>";
        };
        8DFA9B8D2A317DBB00E99281 /* Welfare */ = {
            isa = PBXGroup;
            children = (
                8DFA9B8E2A317DDE00E99281 /* VC */,
            );
            path = Welfare;
            sourceTree = "<group>";
        };
        8DFA9B8E2A317DDE00E99281 /* VC */ = {
            isa = PBXGroup;
            children = (
                8DFA9B8F2A317DE900E99281 /* WelfareVC.swift */,
                8DFA9B902A317DE900E99281 /* WelfareVC.xib */,
            );
            path = VC;
            sourceTree = "<group>";
        };
        8DFA9B932A317E1E00E99281 /* Search */ = {
            isa = PBXGroup;
            children = (
                8DFA9B942A317E2500E99281 /* VC */,
            );
            path = Search;
            sourceTree = "<group>";
        };
        8DFA9B942A317E2500E99281 /* VC */ = {
            isa = PBXGroup;
            children = (
                8D630BF62A31801300F0B7A8 /* SearchVC.swift */,
                8D630BF72A31801300F0B7A8 /* SearchVC.xib */,
            );
            path = VC;
            sourceTree = "<group>";
        };
/* End PBXGroup section */
@@ -230,12 +413,22 @@
            isa = PBXResourcesBuildPhase;
            buildActionMask = 2147483647;
            files = (
                8DFA9B8C2A317DAA00E99281 /* CourseVC.xib in Resources */,
                8D8400DE2A2F1432003AF6A2 /* LaunchScreen.storyboard in Resources */,
                8DFA9B772A316E9A00E99281 /* LoginRegOrForgotVC.xib in Resources */,
                8D8DEDEE2A31D82100F2C7FA /* PaymentResultVC.xib in Resources */,
                8D8400DB2A2F1432003AF6A2 /* Assets.xcassets in Resources */,
                8DFA9B862A3172BE00E99281 /* HomeVC.xib in Resources */,
                8DFA9B922A317DE900E99281 /* WelfareVC.xib in Resources */,
                8D8DEDF32A31DDC500F2C7FA /* CouponCCell.xib in Resources */,
                8D4905AE2A31AE7100E38513 /* JoinMemberIntroduceVC.xib in Resources */,
                8D5C150C2A31885B00A8BCC9 /* CommonAlertView.xib in Resources */,
                8D5B80B72A31C4C700B86520 /* PaymentView.xib in Resources */,
                8D8400EA2A2F14A3003AF6A2 /* LoginVC.xib in Resources */,
                8D5C150D2A31885B00A8BCC9 /* AgreentView.xib in Resources */,
                8D630BF92A31801300F0B7A8 /* SearchVC.xib in Resources */,
                8D4905AA2A31A6EC00E38513 /* HomeCCell.xib in Resources */,
                8D8400D92A2F1430003AF6A2 /* Main.storyboard in Resources */,
                8DAEB5582A3062D900814766 /* CommonAlertView.xib in Resources */,
                8DA902012A308ED100918C98 /* AgreentView.xib in Resources */,
            );
            runOnlyForDeploymentPostprocessing = 0;
        };
@@ -288,16 +481,30 @@
            isa = PBXSourcesBuildPhase;
            buildActionMask = 2147483647;
            files = (
                8D4905AD2A31AE7100E38513 /* JoinMemberIntroduceVC.swift in Sources */,
                8D667BF42A31C419005B02FB /* PaymentView.swift in Sources */,
                8DFA9B762A316E9A00E99281 /* LoginRegOrForgotVC.swift in Sources */,
                8DFA9B8B2A317DAA00E99281 /* CourseVC.swift in Sources */,
                8DAEB54B2A30593C00814766 /* BaseVC.swift in Sources */,
                8DA901FF2A308E9200918C98 /* AgreentView.swift in Sources */,
                8DAEB5562A3062B800814766 /* CommonAlertView.swift in Sources */,
                8DAEB54E2A305A0100814766 /* Colors.swift in Sources */,
                8D630BF82A31801300F0B7A8 /* SearchVC.swift in Sources */,
                8DAEB54A2A30593C00814766 /* BaseNav.swift in Sources */,
                8D710F6D2A31897C0031E2D1 /* WaterFallFlowLayout.swift in Sources */,
                8DAEB5522A305B2D00814766 /* Fronts.swift in Sources */,
                8D8DEDED2A31D82100F2C7FA /* PaymentResultVC.swift in Sources */,
                8D8400D22A2F1430003AF6A2 /* AppDelegate.swift in Sources */,
                8D8DEDF22A31DDC500F2C7FA /* CouponCCell.swift in Sources */,
                8D5C150E2A31885B00A8BCC9 /* CommonAlertView.swift in Sources */,
                8D5C150F2A31885B00A8BCC9 /* AgreentView.swift in Sources */,
                8D8400E92A2F14A3003AF6A2 /* LoginVC.swift in Sources */,
                8D4905A92A31A6EC00E38513 /* HomeCCell.swift in Sources */,
                8DFA9B852A3172BE00E99281 /* HomeVC.swift in Sources */,
                8DFA9B912A317DE900E99281 /* WelfareVC.swift in Sources */,
                8D630BFB2A3180B000F0B7A8 /* BaseTabBarVC.swift in Sources */,
                8DAEB5502A305AEF00814766 /* Def.swift in Sources */,
                8D8400D42A2F1430003AF6A2 /* SceneDelegate.swift in Sources */,
                8DA51DF72A32BE270085F4BA /* Enums.swift in Sources */,
                8D5C15062A31861D00A8BCC9 /* TapBtn.swift in Sources */,
            );
            runOnlyForDeploymentPostprocessing = 0;
        };
WanPai/Assets.xcassets/Bg/Contents.json
New file
@@ -0,0 +1,6 @@
{
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
WanPai/Assets.xcassets/Bg/b_1.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "b_1@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "b_1@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
WanPai/Assets.xcassets/Bg/b_1.imageset/b_1@2x.png
WanPai/Assets.xcassets/Bg/b_1.imageset/b_1@3x.png
WanPai/Assets.xcassets/Bg/b_2.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "b_2@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "b_2@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
WanPai/Assets.xcassets/Bg/b_2.imageset/b_2@2x.png
WanPai/Assets.xcassets/Bg/b_2.imageset/b_2@3x.png
WanPai/Assets.xcassets/Bg/b_3.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "b_4@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "b_4@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
WanPai/Assets.xcassets/Bg/b_3.imageset/b_4@2x.png
WanPai/Assets.xcassets/Bg/b_3.imageset/b_4@3x.png
WanPai/Assets.xcassets/Bg/b_4.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "b_3@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "b_3@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
WanPai/Assets.xcassets/Bg/b_4.imageset/b_3@2x.png
WanPai/Assets.xcassets/Bg/b_4.imageset/b_3@3x.png
WanPai/Assets.xcassets/Bg/b_5.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "b_5@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "b_5@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
WanPai/Assets.xcassets/Bg/b_5.imageset/b_5@2x.png
WanPai/Assets.xcassets/Bg/b_5.imageset/b_5@3x.png
WanPai/Assets.xcassets/Bg/b_6.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "b_6@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "b_6@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
WanPai/Assets.xcassets/Bg/b_6.imageset/b_6@2x.png
WanPai/Assets.xcassets/Bg/b_6.imageset/b_6@3x.png
WanPai/Assets.xcassets/Bg/b_7.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "b_8@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "b_8@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
WanPai/Assets.xcassets/Bg/b_7.imageset/b_8@2x.png
WanPai/Assets.xcassets/Bg/b_7.imageset/b_8@3x.png
WanPai/Assets.xcassets/Bg/b_8.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "b_7@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "b_7@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
WanPai/Assets.xcassets/Bg/b_8.imageset/b_7@2x.png
WanPai/Assets.xcassets/Bg/b_8.imageset/b_7@3x.png
WanPai/Assets.xcassets/Bg/bg_home.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "bg_home@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "bg_home@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
WanPai/Assets.xcassets/Bg/bg_home.imageset/bg_home@2x.png
WanPai/Assets.xcassets/Bg/bg_home.imageset/bg_home@3x.png
WanPai/Assets.xcassets/Bg/icon_LOGO.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "icon_LOGO@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "icon_LOGO@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
WanPai/Assets.xcassets/Bg/icon_LOGO.imageset/icon_LOGO@2x.png
WanPai/Assets.xcassets/Bg/icon_LOGO.imageset/icon_LOGO@3x.png
WanPai/Assets.xcassets/Btns/btn_add.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "btn_add@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "btn_add@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
WanPai/Assets.xcassets/Btns/btn_add.imageset/btn_add@2x.png
WanPai/Assets.xcassets/Btns/btn_add.imageset/btn_add@3x.png
WanPai/Assets.xcassets/Btns/btn_choose.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "btn_choose@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "btn_choose@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
WanPai/Assets.xcassets/Btns/btn_choose.imageset/btn_choose@2x.png
WanPai/Assets.xcassets/Btns/btn_choose.imageset/btn_choose@3x.png
WanPai/Assets.xcassets/Btns/btn_choose_s.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "btn_choose_s@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "btn_choose_s@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
WanPai/Assets.xcassets/Btns/btn_choose_s.imageset/btn_choose_s@2x.png
WanPai/Assets.xcassets/Btns/btn_choose_s.imageset/btn_choose_s@3x.png
WanPai/Assets.xcassets/Icons/icon_alipay.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "icon_alipay@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "icon_alipay@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
WanPai/Assets.xcassets/Icons/icon_alipay.imageset/icon_alipay@2x.png
WanPai/Assets.xcassets/Icons/icon_alipay.imageset/icon_alipay@3x.png
WanPai/Assets.xcassets/Icons/icon_arrow.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "icon_arrow@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "icon_arrow@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
WanPai/Assets.xcassets/Icons/icon_arrow.imageset/icon_arrow@2x.png
WanPai/Assets.xcassets/Icons/icon_arrow.imageset/icon_arrow@3x.png
WanPai/Assets.xcassets/Icons/icon_coin.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "icon_coin@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "icon_coin@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
WanPai/Assets.xcassets/Icons/icon_coin.imageset/icon_coin@2x.png
WanPai/Assets.xcassets/Icons/icon_coin.imageset/icon_coin@3x.png
WanPai/Assets.xcassets/Icons/icon_coupon_footer.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "icon_coupon_footer@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "icon_coupon_footer@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
WanPai/Assets.xcassets/Icons/icon_coupon_footer.imageset/icon_coupon_footer@2x.png
WanPai/Assets.xcassets/Icons/icon_coupon_footer.imageset/icon_coupon_footer@3x.png
WanPai/Assets.xcassets/Icons/icon_coupon_header.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "icon_coupon_header@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "icon_coupon_header@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
WanPai/Assets.xcassets/Icons/icon_coupon_header.imageset/icon_coupon_header@2x.png
WanPai/Assets.xcassets/Icons/icon_coupon_header.imageset/icon_coupon_header@3x.png
WanPai/Assets.xcassets/Icons/icon_fail.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "icon_fail@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "icon_fail@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
WanPai/Assets.xcassets/Icons/icon_fail.imageset/icon_fail@2x.png
WanPai/Assets.xcassets/Icons/icon_fail.imageset/icon_fail@3x.png
WanPai/Assets.xcassets/Icons/icon_map.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "icon_map@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "icon_map@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
WanPai/Assets.xcassets/Icons/icon_map.imageset/icon_map@2x.png
WanPai/Assets.xcassets/Icons/icon_map.imageset/icon_map@3x.png
WanPai/Assets.xcassets/Icons/icon_success.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "icon_success@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "icon_success@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
WanPai/Assets.xcassets/Icons/icon_success.imageset/icon_success@2x.png
WanPai/Assets.xcassets/Icons/icon_success.imageset/icon_success@3x.png
WanPai/Assets.xcassets/Icons/icon_wechat.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "icon_wechat@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "icon_wechat@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
WanPai/Assets.xcassets/Icons/icon_wechat.imageset/icon_wechat@2x.png
WanPai/Assets.xcassets/Icons/icon_wechat.imageset/icon_wechat@3x.png
WanPai/Assets.xcassets/Tabbar/Contents.json
New file
@@ -0,0 +1,6 @@
{
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
WanPai/Assets.xcassets/Tabbar/tabbar_course.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "tabbar_course@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "tabbar_course@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
WanPai/Assets.xcassets/Tabbar/tabbar_course.imageset/tabbar_course@2x.png
WanPai/Assets.xcassets/Tabbar/tabbar_course.imageset/tabbar_course@3x.png
WanPai/Assets.xcassets/Tabbar/tabbar_course_s.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "tabbar_course_s@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "tabbar_course_s@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
WanPai/Assets.xcassets/Tabbar/tabbar_course_s.imageset/tabbar_course_s@2x.png
WanPai/Assets.xcassets/Tabbar/tabbar_course_s.imageset/tabbar_course_s@3x.png
WanPai/Assets.xcassets/Tabbar/tabbar_home.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "tabbar_home@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "tabbar_home@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
WanPai/Assets.xcassets/Tabbar/tabbar_home.imageset/tabbar_home@2x.png
WanPai/Assets.xcassets/Tabbar/tabbar_home.imageset/tabbar_home@3x.png
WanPai/Assets.xcassets/Tabbar/tabbar_home_s.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "tabbar_home_s@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "tabbar_home_s@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
WanPai/Assets.xcassets/Tabbar/tabbar_home_s.imageset/tabbar_home_s@2x.png
WanPai/Assets.xcassets/Tabbar/tabbar_home_s.imageset/tabbar_home_s@3x.png
WanPai/Assets.xcassets/Tabbar/tabbar_search.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "tabbar_profile@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "tabbar_profile@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
WanPai/Assets.xcassets/Tabbar/tabbar_search.imageset/tabbar_profile@2x.png
WanPai/Assets.xcassets/Tabbar/tabbar_search.imageset/tabbar_profile@3x.png
WanPai/Assets.xcassets/Tabbar/tabbar_search_s.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "tabbar_profile_s@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "tabbar_profile_s@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
WanPai/Assets.xcassets/Tabbar/tabbar_search_s.imageset/tabbar_profile_s@2x.png
WanPai/Assets.xcassets/Tabbar/tabbar_search_s.imageset/tabbar_profile_s@3x.png
WanPai/Assets.xcassets/Tabbar/tabbar_welfare.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "tabbar_welfare@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "tabbar_welfare@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
WanPai/Assets.xcassets/Tabbar/tabbar_welfare.imageset/tabbar_welfare@2x.png
WanPai/Assets.xcassets/Tabbar/tabbar_welfare.imageset/tabbar_welfare@3x.png
WanPai/Assets.xcassets/Tabbar/tabbar_welfare_s.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "tabbar_welfare_s@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "tabbar_welfare_s@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
WanPai/Assets.xcassets/Tabbar/tabbar_welfare_s.imageset/tabbar_welfare_s@2x.png
WanPai/Assets.xcassets/Tabbar/tabbar_welfare_s.imageset/tabbar_welfare_s@3x.png
WanPai/Base/BaseNav.swift
@@ -12,10 +12,12 @@
    private var popDelegate: UIGestureRecognizerDelegate?
    private let img = UIImage.jq_gradient([UIColor(hexStr: "#FD8C02"),UIColor(hexStr: "#FD7202")], size: CGSize(width: JQ_ScreenW, height: JQ_NavBarHeight), radius: 0, locations: [0,1], direction: .vertical)
    open override func viewDidLoad() {
        super.viewDidLoad()
        self.navigationBar.barTintColor = .white
        self.navigationBar.titleTextAttributes = [.font:UIFont.systemFont(ofSize: 18, weight: .medium), .foregroundColor:UIColor.black]
        self.navigationBar.titleTextAttributes = [.font:UIFont.systemFont(ofSize: 18, weight: .medium), .foregroundColor:UIColor.white]
        self.navigationBar.tintColor = UIColor.black
        self.navigationBar.shadowImage = UIImage()
        self.navigationBar.isTranslucent = true
@@ -28,11 +30,90 @@
            scrollBar.configureWithOpaqueBackground()
            scrollBar.backgroundEffect = nil
            scrollBar.shadowColor = nil
            scrollBar.titleTextAttributes = [.foregroundColor:UIColor.white,.font:Def_NavFont]
            scrollBar.backgroundColor = UIColor.clear
            scrollBar.backgroundImage = img
            let standardBar = UINavigationBarAppearance()
            standardBar.configureWithOpaqueBackground()
            standardBar.backgroundEffect = nil
            standardBar.shadowColor = nil
            standardBar.shadowImage = nil
            standardBar.titleTextAttributes = [.foregroundColor:UIColor.white,.font:Def_NavFont]
            standardBar.backgroundColor = UIColor.clear
            standardBar.backgroundImage = img
            navigationBar.scrollEdgeAppearance = scrollBar //顶部透明
            navigationBar.standardAppearance = standardBar
        }else {
            navigationBar.titleTextAttributes = [.foregroundColor:UIColor.white,.font:Def_NavFont]
        }
    }
    open func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
        if navigationController.viewControllers.count == 1{
            navigationBar.standardAppearance.backgroundImage = nil
            navigationBar.scrollEdgeAppearance?.backgroundImage = nil
        }else{
            navigationBar.standardAppearance.backgroundImage = img
            navigationBar.scrollEdgeAppearance?.backgroundImage = img
        }
    }
    //侧滑
    public func navigationController(_ navigationController: UINavigationController, didShow viewController: UIViewController, animated: Bool) {
        if  viewController == self.viewControllers[0] {
            self.interactivePopGestureRecognizer!.delegate = self.popDelegate
        }else{
            self.interactivePopGestureRecognizer!.delegate = nil
        }
    }
    open override var childForStatusBarHidden: UIViewController? {
        return self.topViewController
    }
    open override var childForStatusBarStyle: UIViewController? {
        return self.topViewController
    }
    override var preferredStatusBarStyle: UIStatusBarStyle{
        return .lightContent
    }
}
class LoginNav: UINavigationController,UINavigationControllerDelegate {
    private var popDelegate: UIGestureRecognizerDelegate?
    open override func viewDidLoad() {
        super.viewDidLoad()
        self.navigationBar.barTintColor = .white
        self.navigationBar.titleTextAttributes = [.font:UIFont.systemFont(ofSize: 18, weight: .medium), .foregroundColor:UIColor.black]
        self.navigationBar.tintColor = UIColor.black
        self.navigationBar.shadowImage = UIImage()
        self.navigationBar.isTranslucent = true
        self.delegate = self
        self.popDelegate = self.interactivePopGestureRecognizer?.delegate
        if #available(iOS 15.0, *) {
//            let img = UIImage.jq_gradient([UIColor(hexStr: "#FD8C02"),UIColor(hexStr: "#FD7202")], size: CGSize(width: JQ_ScreenW, height: JQ_NavBarHeight), radius: 0, locations: [0,1], direction: .vertical)
            let scrollBar = UINavigationBarAppearance()
            scrollBar.configureWithOpaqueBackground()
            scrollBar.backgroundEffect = nil
            scrollBar.shadowColor = nil
            scrollBar.titleTextAttributes = [.foregroundColor:Def_NavFontColor,.font:Def_NavFont]
            scrollBar.backgroundColor = UIColor.clear
//            scrollBar.backgroundImage = img
            let img = UIImage.jq_gradient([UIColor.black.withAlphaComponent(0.4),UIColor.clear], size: CGSize(width: JQ_ScreenW, height: JQ_NavBarHeight), radius: 0, locations: [0,1], direction: .vertical)
            let standardBar = UINavigationBarAppearance()
            standardBar.configureWithOpaqueBackground()
@@ -41,7 +122,7 @@
            standardBar.shadowImage = nil
            standardBar.titleTextAttributes = [.foregroundColor:Def_NavFontColor,.font:Def_NavFont]
            standardBar.backgroundColor = UIColor.clear
            standardBar.backgroundImage = img
//            standardBar.backgroundImage = img
            navigationBar.scrollEdgeAppearance = scrollBar //顶部透明
            navigationBar.standardAppearance = standardBar
@@ -52,13 +133,9 @@
        }
    }
    open override func pushViewController(_ viewController: UIViewController, animated: Bool) {
        viewController.hidesBottomBarWhenPushed = true
        super.pushViewController(viewController, animated: animated)
    }
    open func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
    }
    //侧滑
WanPai/Base/BaseTabBarVC.swift
New file
@@ -0,0 +1,18 @@
//
//  BaseTabBarVC.swift
//  WanPai
//
//  Created by 杨锴 on 2023/6/8.
//
import UIKit
class BaseTabBarVC: UITabBarController {
    override func viewDidLoad() {
        super.viewDidLoad()
        tabBar.backgroundColor = .white
        tabBar.tintColor = Def_ThemeColor
    }
}
WanPai/Base/BaseVC.swift
@@ -29,7 +29,12 @@
        setData()
        if navigationController?.viewControllers.count ?? 0 > 1{
            if navigationController is BaseNav{
                navigationItem.leftBarButtonItem = UIBarButtonItem.jq_creat(image: nav_back_img.withTintColor(.white), target: self, alignment:.left, action: #selector(backItemEvent)).item
            }else{
            navigationItem.leftBarButtonItem = UIBarButtonItem.jq_creat(image: nav_back_img, target: self, alignment:.left, action: #selector(backItemEvent)).item
            }
        }
    }
@@ -63,9 +68,14 @@
    func refreshUI(){}
    func push(vc:UIViewController){
        vc.hidesBottomBarWhenPushed = true
        navigationController?.pushViewController(vc, animated: true)
    }
    override var preferredStatusBarStyle: UIStatusBarStyle{
        return .lightContent
    }
    @objc fileprivate func backItemEvent() {
        // 拦截pop事件
        if (yy_popBlock != nil) {
WanPai/Base/TapBtn.swift
New file
@@ -0,0 +1,20 @@
//
//  TapBtn.swift
//  WanPai
//
//  Created by 杨锴 on 2023/6/8.
//
import UIKit
class TapBtn: UIButton {
    /*
    // Only override draw() if you perform custom drawing.
    // An empty implementation adversely affects performance during animation.
    override func draw(_ rect: CGRect) {
        // Drawing code
    }
    */
}
WanPai/Common/Layout/WaterFallFlowLayout.swift
New file
@@ -0,0 +1,78 @@
//
//  WaterFallFlowLayout.swift
//  WanPai
//
//  Created by 杨锴 on 2023/6/8.
//
import UIKit
protocol WaterFallLayoutDelegate: NSObjectProtocol {
    func waterFlowLayout(_ waterFlowLayout: WaterFallFlowLayout, itemHeight indexPath: IndexPath) -> CGFloat
}
class WaterFallFlowLayout: UICollectionViewFlowLayout {
    weak var delegate: WaterFallLayoutDelegate?
    // 列数
    var cols = 4
    // 布局数组
    fileprivate lazy var layoutAttributeArray: [UICollectionViewLayoutAttributes] = []
    // 高度数组
    fileprivate lazy var yArray: [CGFloat] = Array(repeating: self.sectionInset.top, count: cols)
    fileprivate var maxHeight: CGFloat = 0
    override func prepare() {
        super.prepare()
        // 计算每个 Cell 的宽度
        let itemWidth = (collectionView!.bounds.width - sectionInset.left - sectionInset.right - minimumInteritemSpacing * CGFloat(cols - 1)) / CGFloat(cols)
        // Cell 数量
        let itemCount = collectionView!.numberOfItems(inSection: 0)
        // 最小高度索引
        var minHeightIndex = 0
        // 遍历 item 计算并缓存属性
        for i in layoutAttributeArray.count ..< itemCount {
            let indexPath = IndexPath(item: i, section: 0)
            let attr = UICollectionViewLayoutAttributes(forCellWith: indexPath)
            // 获取动态高度
            let itemHeight = delegate?.waterFlowLayout(self, itemHeight: indexPath)
            // 找到高度最短的那一列
            let value = yArray.min()
            // 获取数组索引
            minHeightIndex = yArray.firstIndex(of: value!)!
            // 获取该列的 Y 坐标
            var itemY = yArray[minHeightIndex]
            // 判断是否是第一行,如果换行需要加上行间距
            if i >= cols {
                itemY += minimumInteritemSpacing
            }
            // 计算该索引的 X 坐标
            let itemX = sectionInset.left + (itemWidth + minimumInteritemSpacing) * CGFloat(minHeightIndex)
            // 赋值新的位置信息
            attr.frame = CGRect(x: itemX, y: itemY, width: itemWidth, height: CGFloat(itemHeight!))
            // 缓存布局属性
            layoutAttributeArray.append(attr)
            // 更新最短高度列的数据
            yArray[minHeightIndex] = attr.frame.maxY
        }
        maxHeight = yArray.max()! + sectionInset.bottom
    }
}
extension WaterFallFlowLayout {
    override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? {
        // 返回相交的区域
        return layoutAttributeArray.filter {
            $0.frame.intersects(rect)
        }
    }
    override var collectionViewContentSize: CGSize {
        return CGSize(width: collectionView!.bounds.width, height: maxHeight)
    }
}
WanPai/Common/View/PaymentView.swift
New file
@@ -0,0 +1,85 @@
//
//  PaymentView.swift
//  WanPai
//
//  Created by 杨锴 on 2023/6/8.
//
import UIKit
import JQTools
class PaymentView: UIView,JQNibView{
    @IBOutlet weak var view_container: UIView!
    @IBOutlet weak var cons_bottom: NSLayoutConstraint!
    @IBOutlet weak var btn_wechat: UIButton!
    @IBOutlet weak var btn_alipay: UIButton!
    @IBOutlet weak var btn_coin: UIButton!
    private var clouse:((Bool)->Void)?
    private var payType:PayType?
    override func awakeFromNib() {
        super.awakeFromNib()
        cons_bottom.constant = -(225 + UIDevice.jq_safeEdges.bottom)
        alpha = 0
        layoutIfNeeded()
    }
    static func show(_ clouse:@escaping (Bool)->Void){
        let paymentView = PaymentView.jq_loadNibView()
        paymentView.frame = screnDelegate?.window?.frame ?? .zero
        paymentView.clouse = clouse
        screnDelegate?.window?.addSubview(paymentView)
        paymentView.cons_bottom.constant = 0
        UIView.animate(withDuration: 0.4) {
            paymentView.alpha = 1
            paymentView.layoutIfNeeded()
        }
    }
    override func layoutSubviews() {
        super.layoutSubviews()
        view_container.jq_addCorners(corner: [.topLeft,.topRight], radius: 20)
    }
    private func hidden(){
        cons_bottom.constant = -(225 + UIDevice.jq_safeEdges.bottom)
        UIView.animate(withDuration: 0.4) {
            self.alpha = 0
            self.layoutIfNeeded()
        }completion: { _ in
            self.removeFromSuperview()
        }
    }
    @IBAction func tapAction(_ sender: UIButton) {
        switch sender.tag{
        case 10:
            payType = .wechat
        case 11:
            payType = .aliPay
        case 12:
            payType = .coin
        default:break
        }
        btn_alipay.isSelected = payType == .aliPay
        btn_coin.isSelected = payType == .coin
        btn_wechat.isSelected = payType == .wechat
    }
    @IBAction func paymentAction(_ sender: UIButton) {
        clouse?(true)
        hidden()
    }
    @IBAction func cancelAction(_ sender: UIButton) {
        clouse?(false)
        hidden()
    }
}
WanPai/Common/View/PaymentView.xib
New file
@@ -0,0 +1,282 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21507" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <device id="retina6_12" orientation="portrait" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21505"/>
        <capability name="Named colors" minToolsVersion="9.0"/>
        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
        <capability name="System colors in document resources" minToolsVersion="11.0"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <objects>
        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
        <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="PaymentView" customModule="WanPai" customModuleProvider="target">
            <rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
            <subviews>
                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="I0g-vn-aAw">
                    <rect key="frame" x="0.0" y="568" width="393" height="284"/>
                    <subviews>
                        <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="6oz-tW-MFV">
                            <rect key="frame" x="0.0" y="14" width="393" height="180"/>
                            <subviews>
                                <view tag="10" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ME6-yW-eFT">
                                    <rect key="frame" x="0.0" y="0.0" width="393" height="60"/>
                                    <subviews>
                                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="85J-Gs-279">
                                            <rect key="frame" x="14" y="59.666666666666629" width="365" height="0.3333333333333357"/>
                                            <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.10000000000000001" colorSpace="custom" customColorSpace="sRGB"/>
                                            <constraints>
                                                <constraint firstAttribute="height" constant="0.40000000000000002" id="gl2-oU-bb6"/>
                                            </constraints>
                                        </view>
                                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_wechat" translatesAutoresizingMaskIntoConstraints="NO" id="ebE-DJ-8I3">
                                            <rect key="frame" x="15" y="21" width="28" height="29"/>
                                            <constraints>
                                                <constraint firstAttribute="width" constant="28" id="86X-Av-fZ0"/>
                                                <constraint firstAttribute="height" constant="29" id="iLy-aq-NEQ"/>
                                            </constraints>
                                        </imageView>
                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="微信支付" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="i6n-Ae-j6X">
                                            <rect key="frame" x="55.999999999999993" y="26" width="65.333333333333314" height="19.333333333333329"/>
                                            <fontDescription key="fontDescription" type="system" pointSize="16"/>
                                            <nil key="textColor"/>
                                            <nil key="highlightedColor"/>
                                        </label>
                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="¥ 0" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="nW3-BN-jAP">
                                            <rect key="frame" x="132.33333333333334" y="26" width="24.333333333333343" height="19.333333333333329"/>
                                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
                                            <color key="textColor" red="0.93333333330000001" green="0.043137254899999998" blue="0.043137254899999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                            <nil key="highlightedColor"/>
                                        </label>
                                        <button opaque="NO" tag="10" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="iQH-s2-Sm4">
                                            <rect key="frame" x="354" y="23" width="25" height="25"/>
                                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                                            <state key="normal" image="btn_choose"/>
                                            <state key="selected" image="btn_choose_s"/>
                                            <connections>
                                                <action selector="tapAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="69h-XB-sVX"/>
                                            </connections>
                                        </button>
                                    </subviews>
                                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                                    <constraints>
                                        <constraint firstItem="ebE-DJ-8I3" firstAttribute="leading" secondItem="ME6-yW-eFT" secondAttribute="leading" constant="15" id="Af3-VT-brh"/>
                                        <constraint firstItem="85J-Gs-279" firstAttribute="leading" secondItem="ME6-yW-eFT" secondAttribute="leading" constant="14" id="B23-gf-RAl"/>
                                        <constraint firstItem="iQH-s2-Sm4" firstAttribute="centerY" secondItem="ebE-DJ-8I3" secondAttribute="centerY" id="E7x-NV-f4i"/>
                                        <constraint firstItem="nW3-BN-jAP" firstAttribute="leading" secondItem="i6n-Ae-j6X" secondAttribute="trailing" constant="11" id="FIl-YR-osr"/>
                                        <constraint firstAttribute="trailing" secondItem="85J-Gs-279" secondAttribute="trailing" constant="14" id="Ja7-qq-Ev5"/>
                                        <constraint firstAttribute="bottom" secondItem="85J-Gs-279" secondAttribute="bottom" id="OVA-dy-dlW"/>
                                        <constraint firstAttribute="trailing" secondItem="iQH-s2-Sm4" secondAttribute="trailing" constant="14" id="WBL-kA-O8S"/>
                                        <constraint firstAttribute="bottom" secondItem="ebE-DJ-8I3" secondAttribute="bottom" constant="10" id="by2-ek-jxZ"/>
                                        <constraint firstItem="i6n-Ae-j6X" firstAttribute="leading" secondItem="ebE-DJ-8I3" secondAttribute="trailing" constant="13" id="cgf-cv-60e"/>
                                        <constraint firstAttribute="height" constant="60" id="dEq-ke-0B3"/>
                                        <constraint firstItem="nW3-BN-jAP" firstAttribute="centerY" secondItem="ebE-DJ-8I3" secondAttribute="centerY" id="ed8-Ca-7EK"/>
                                        <constraint firstItem="i6n-Ae-j6X" firstAttribute="centerY" secondItem="ebE-DJ-8I3" secondAttribute="centerY" id="rOZ-xN-WLo"/>
                                    </constraints>
                                </view>
                                <view tag="11" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="4Ft-AC-zgU">
                                    <rect key="frame" x="0.0" y="60" width="393" height="60"/>
                                    <subviews>
                                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="HtX-dv-eVh">
                                            <rect key="frame" x="14" y="59.666666666666629" width="365" height="0.3333333333333357"/>
                                            <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.10000000000000001" colorSpace="custom" customColorSpace="sRGB"/>
                                            <constraints>
                                                <constraint firstAttribute="height" constant="0.40000000000000002" id="Xxh-qq-cdf"/>
                                            </constraints>
                                        </view>
                                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_alipay" translatesAutoresizingMaskIntoConstraints="NO" id="JYg-cb-KpE">
                                            <rect key="frame" x="15" y="21" width="28" height="29"/>
                                            <constraints>
                                                <constraint firstAttribute="height" constant="29" id="Mhe-Il-kNw"/>
                                                <constraint firstAttribute="width" constant="28" id="m73-gY-yyc"/>
                                            </constraints>
                                        </imageView>
                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="支付宝支付" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="GPB-fn-GC7">
                                            <rect key="frame" x="56.000000000000007" y="26" width="81.666666666666686" height="19.333333333333329"/>
                                            <fontDescription key="fontDescription" type="system" pointSize="16"/>
                                            <nil key="textColor"/>
                                            <nil key="highlightedColor"/>
                                        </label>
                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="¥ 0" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="uCD-UF-eto">
                                            <rect key="frame" x="148.66666666666666" y="26" width="24.333333333333343" height="19.333333333333329"/>
                                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
                                            <color key="textColor" red="0.93333333330000001" green="0.043137254899999998" blue="0.043137254899999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                            <nil key="highlightedColor"/>
                                        </label>
                                        <button opaque="NO" tag="11" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="WE2-FK-qOV">
                                            <rect key="frame" x="354" y="23" width="25" height="25"/>
                                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                                            <state key="normal" image="btn_choose"/>
                                            <state key="selected" image="btn_choose_s"/>
                                            <connections>
                                                <action selector="tapAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="iX6-Ib-6Ho"/>
                                            </connections>
                                        </button>
                                    </subviews>
                                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                                    <constraints>
                                        <constraint firstItem="GPB-fn-GC7" firstAttribute="leading" secondItem="JYg-cb-KpE" secondAttribute="trailing" constant="13" id="3ko-yZ-hu1"/>
                                        <constraint firstAttribute="bottom" secondItem="HtX-dv-eVh" secondAttribute="bottom" id="9aR-c6-kyR"/>
                                        <constraint firstItem="WE2-FK-qOV" firstAttribute="centerY" secondItem="JYg-cb-KpE" secondAttribute="centerY" id="9e6-08-YxV"/>
                                        <constraint firstItem="JYg-cb-KpE" firstAttribute="leading" secondItem="4Ft-AC-zgU" secondAttribute="leading" constant="15" id="AG2-Ob-O24"/>
                                        <constraint firstAttribute="trailing" secondItem="WE2-FK-qOV" secondAttribute="trailing" constant="14" id="B7B-gE-5PQ"/>
                                        <constraint firstItem="uCD-UF-eto" firstAttribute="centerY" secondItem="JYg-cb-KpE" secondAttribute="centerY" id="Oyf-Wr-032"/>
                                        <constraint firstAttribute="height" constant="60" id="QWd-8U-Ux7"/>
                                        <constraint firstAttribute="trailing" secondItem="HtX-dv-eVh" secondAttribute="trailing" constant="14" id="R8q-j3-GRz"/>
                                        <constraint firstAttribute="bottom" secondItem="JYg-cb-KpE" secondAttribute="bottom" constant="10" id="SAE-Yf-aoN"/>
                                        <constraint firstItem="HtX-dv-eVh" firstAttribute="leading" secondItem="4Ft-AC-zgU" secondAttribute="leading" constant="14" id="hkU-XB-4sn"/>
                                        <constraint firstItem="uCD-UF-eto" firstAttribute="leading" secondItem="GPB-fn-GC7" secondAttribute="trailing" constant="11" id="vBj-D6-9gr"/>
                                        <constraint firstItem="GPB-fn-GC7" firstAttribute="centerY" secondItem="JYg-cb-KpE" secondAttribute="centerY" id="zm4-aw-Ycx"/>
                                    </constraints>
                                </view>
                                <view tag="11" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="S7h-OF-RAr">
                                    <rect key="frame" x="0.0" y="120" width="393" height="60"/>
                                    <subviews>
                                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="BOu-gk-wSG">
                                            <rect key="frame" x="14" y="59.666666666666629" width="365" height="0.3333333333333357"/>
                                            <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.10000000000000001" colorSpace="custom" customColorSpace="sRGB"/>
                                            <constraints>
                                                <constraint firstAttribute="height" constant="0.40000000000000002" id="HTz-zg-CUI"/>
                                            </constraints>
                                        </view>
                                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_coin" translatesAutoresizingMaskIntoConstraints="NO" id="pIu-Ui-hVv">
                                            <rect key="frame" x="15" y="21" width="28" height="29"/>
                                            <constraints>
                                                <constraint firstAttribute="width" constant="28" id="COa-hP-v2C"/>
                                                <constraint firstAttribute="height" constant="29" id="i8N-st-goU"/>
                                            </constraints>
                                        </imageView>
                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="玩派币支付" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="NGh-bI-So3">
                                            <rect key="frame" x="56.000000000000007" y="26" width="81.666666666666686" height="19.333333333333329"/>
                                            <fontDescription key="fontDescription" type="system" pointSize="16"/>
                                            <nil key="textColor"/>
                                            <nil key="highlightedColor"/>
                                        </label>
                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0 币" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="MfR-5x-oVT">
                                            <rect key="frame" x="148.66666666666666" y="26" width="30.666666666666657" height="19.333333333333329"/>
                                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
                                            <color key="textColor" red="0.93333333330000001" green="0.043137254899999998" blue="0.043137254899999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                            <nil key="highlightedColor"/>
                                        </label>
                                        <button opaque="NO" tag="12" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="fBI-qy-chO">
                                            <rect key="frame" x="354" y="23" width="25" height="25"/>
                                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                                            <state key="normal" image="btn_choose"/>
                                            <state key="selected" image="btn_choose_s"/>
                                            <connections>
                                                <action selector="tapAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="aVC-qg-CZ5"/>
                                            </connections>
                                        </button>
                                    </subviews>
                                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                                    <constraints>
                                        <constraint firstAttribute="bottom" secondItem="pIu-Ui-hVv" secondAttribute="bottom" constant="10" id="0Ki-Ju-Jpj"/>
                                        <constraint firstAttribute="height" constant="60" id="996-mw-jCm"/>
                                        <constraint firstItem="fBI-qy-chO" firstAttribute="centerY" secondItem="pIu-Ui-hVv" secondAttribute="centerY" id="BQg-6W-x9e"/>
                                        <constraint firstItem="MfR-5x-oVT" firstAttribute="centerY" secondItem="pIu-Ui-hVv" secondAttribute="centerY" id="FGz-B1-sWd"/>
                                        <constraint firstAttribute="trailing" secondItem="fBI-qy-chO" secondAttribute="trailing" constant="14" id="H21-Wm-gFb"/>
                                        <constraint firstItem="NGh-bI-So3" firstAttribute="centerY" secondItem="pIu-Ui-hVv" secondAttribute="centerY" id="LEY-Kv-OsM"/>
                                        <constraint firstAttribute="trailing" secondItem="BOu-gk-wSG" secondAttribute="trailing" constant="14" id="b94-76-UwP"/>
                                        <constraint firstItem="NGh-bI-So3" firstAttribute="leading" secondItem="pIu-Ui-hVv" secondAttribute="trailing" constant="13" id="dCw-V3-ygi"/>
                                        <constraint firstAttribute="bottom" secondItem="BOu-gk-wSG" secondAttribute="bottom" id="fTh-JD-3CZ"/>
                                        <constraint firstItem="MfR-5x-oVT" firstAttribute="leading" secondItem="NGh-bI-So3" secondAttribute="trailing" constant="11" id="p5G-4n-pWq"/>
                                        <constraint firstItem="pIu-Ui-hVv" firstAttribute="leading" secondItem="S7h-OF-RAr" secondAttribute="leading" constant="15" id="uct-Lt-hOY"/>
                                        <constraint firstItem="BOu-gk-wSG" firstAttribute="leading" secondItem="S7h-OF-RAr" secondAttribute="leading" constant="14" id="w5R-se-e6g"/>
                                    </constraints>
                                </view>
                            </subviews>
                        </stackView>
                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="glt-oZ-fup">
                            <rect key="frame" x="206.66666666666663" y="214" width="145.33333333333337" height="40"/>
                            <color key="backgroundColor" name="FE6E0D"/>
                            <constraints>
                                <constraint firstAttribute="height" constant="40" id="JV7-c4-7tD"/>
                            </constraints>
                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="15"/>
                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                            <state key="normal" title="确认支付"/>
                            <userDefinedRuntimeAttributes>
                                <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                                <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                                    <real key="value" value="20"/>
                                </userDefinedRuntimeAttribute>
                            </userDefinedRuntimeAttributes>
                            <connections>
                                <action selector="paymentAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="wbK-kY-nQV"/>
                            </connections>
                        </button>
                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Ji4-B6-Ozw">
                            <rect key="frame" x="41" y="214" width="145.66666666666666" height="40"/>
                            <constraints>
                                <constraint firstAttribute="height" constant="40" id="Tyg-21-Wcc"/>
                            </constraints>
                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="15"/>
                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                            <state key="normal" title="取消">
                                <color key="titleColor" name="FE6E0D"/>
                            </state>
                            <userDefinedRuntimeAttributes>
                                <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
                                    <real key="value" value="20"/>
                                </userDefinedRuntimeAttribute>
                                <userDefinedRuntimeAttribute type="color" keyPath="borderColor">
                                    <color key="value" name="FE6E0D"/>
                                </userDefinedRuntimeAttribute>
                                <userDefinedRuntimeAttribute type="number" keyPath="borderWidth">
                                    <real key="value" value="1"/>
                                </userDefinedRuntimeAttribute>
                            </userDefinedRuntimeAttributes>
                            <connections>
                                <action selector="cancelAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="kHF-dd-7EQ"/>
                            </connections>
                        </button>
                    </subviews>
                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                    <constraints>
                        <constraint firstItem="glt-oZ-fup" firstAttribute="top" secondItem="6oz-tW-MFV" secondAttribute="bottom" constant="20" id="1Rd-2A-3Om"/>
                        <constraint firstItem="glt-oZ-fup" firstAttribute="centerY" secondItem="Ji4-B6-Ozw" secondAttribute="centerY" id="56b-FJ-sPa"/>
                        <constraint firstAttribute="bottom" secondItem="glt-oZ-fup" secondAttribute="bottom" constant="30" id="8O5-IK-zdE"/>
                        <constraint firstItem="6oz-tW-MFV" firstAttribute="leading" secondItem="I0g-vn-aAw" secondAttribute="leading" id="Vry-cL-Ozh"/>
                        <constraint firstAttribute="trailing" secondItem="glt-oZ-fup" secondAttribute="trailing" constant="41" id="Y6w-lo-y9L"/>
                        <constraint firstItem="6oz-tW-MFV" firstAttribute="top" secondItem="I0g-vn-aAw" secondAttribute="top" constant="14" id="d7B-wh-Y6d"/>
                        <constraint firstItem="glt-oZ-fup" firstAttribute="width" secondItem="Ji4-B6-Ozw" secondAttribute="width" id="hWp-ml-tjt"/>
                        <constraint firstAttribute="trailing" secondItem="6oz-tW-MFV" secondAttribute="trailing" id="iYw-dH-wxl"/>
                        <constraint firstItem="glt-oZ-fup" firstAttribute="leading" secondItem="Ji4-B6-Ozw" secondAttribute="trailing" constant="20" id="maI-bo-p4K"/>
                        <constraint firstItem="Ji4-B6-Ozw" firstAttribute="leading" secondItem="I0g-vn-aAw" secondAttribute="leading" constant="41" id="obl-Lp-6y9"/>
                    </constraints>
                </view>
            </subviews>
            <viewLayoutGuide key="safeArea" id="vUN-kp-3ea"/>
            <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.69999999999999996" colorSpace="custom" customColorSpace="sRGB"/>
            <constraints>
                <constraint firstItem="I0g-vn-aAw" firstAttribute="leading" secondItem="vUN-kp-3ea" secondAttribute="leading" id="2R0-2s-HGA"/>
                <constraint firstAttribute="bottom" secondItem="I0g-vn-aAw" secondAttribute="bottom" id="9AD-6H-0r8"/>
                <constraint firstAttribute="trailing" secondItem="I0g-vn-aAw" secondAttribute="trailing" id="j73-iu-DSn"/>
            </constraints>
            <connections>
                <outlet property="btn_alipay" destination="WE2-FK-qOV" id="Keo-5R-2iV"/>
                <outlet property="btn_coin" destination="fBI-qy-chO" id="W1f-WZ-xIJ"/>
                <outlet property="btn_wechat" destination="iQH-s2-Sm4" id="pDO-q6-Iek"/>
                <outlet property="cons_bottom" destination="9AD-6H-0r8" id="9hQ-qM-ZMJ"/>
                <outlet property="view_container" destination="I0g-vn-aAw" id="i7z-aB-Zfq"/>
            </connections>
            <point key="canvasLocation" x="139.69465648854961" y="20.422535211267608"/>
        </view>
    </objects>
    <resources>
        <image name="btn_choose" width="25" height="25"/>
        <image name="btn_choose_s" width="25" height="25"/>
        <image name="icon_alipay" width="29" height="29"/>
        <image name="icon_coin" width="28" height="28"/>
        <image name="icon_wechat" width="28" height="29"/>
        <namedColor name="FE6E0D">
            <color red="0.99599999189376831" green="0.4309999942779541" blue="0.050999999046325684" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
        </namedColor>
        <systemColor name="systemBackgroundColor">
            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
        </systemColor>
    </resources>
</document>
WanPai/Config/Colors.swift
@@ -9,4 +9,4 @@
import JQTools
let Def_ThemeColor:UIColor = UIColor(hexStr: "#FD8802")
let Def_NavFontColor = UIColor(hexStr: "#FD8802")
let Def_NavFontColor = UIColor.black.withAlphaComponent(0.8)
WanPai/Config/Enums.swift
New file
@@ -0,0 +1,14 @@
//
//  Enums.swift
//  WanPai
//
//  Created by 杨锴 on 2023/6/9.
//
import Foundation
enum PayType:Int{
    case aliPay = 0
    case wechat = 1
    case coin = 2
}
WanPai/Config/Fronts.swift
@@ -7,4 +7,4 @@
import UIKit
let Def_NavFont:UIFont = UIFont.systemFont(ofSize: 16, weight: .medium)
let Def_NavFont:UIFont = UIFont.systemFont(ofSize: 18, weight: .medium)
WanPai/Root/Course/VC/CourseVC.swift
New file
@@ -0,0 +1,30 @@
//
//  CourseVC.swift
//  WanPai
//
//  Created by 杨锴 on 2023/6/8.
//
import UIKit
import JQTools
class CourseVC: BaseVC {
    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .jq_randomColor
    }
    /*
    // MARK: - Navigation
    // In a storyboard-based application, you will often want to do a little preparation before navigation
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        // Get the new view controller using segue.destination.
        // Pass the selected object to the new view controller.
    }
    */
}
WanPai/Root/Course/VC/CourseVC.xib
New file
@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="13142" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <dependencies>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12042"/>
        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <objects>
        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="CourseVC" customModuleProvider="target">
            <connections>
                <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/>
            </connections>
        </placeholder>
        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
        <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT">
            <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
            <color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
            <viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/>
        </view>
    </objects>
</document>
WanPai/Root/Home/CCell/HomeCCell.swift
New file
@@ -0,0 +1,19 @@
//
//  HomeCCell.swift
//  WanPai
//
//  Created by 杨锴 on 2023/6/8.
//
import UIKit
class HomeCCell: UICollectionViewCell {
    @IBOutlet weak var img: UIImageView!
    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }
}
WanPai/Root/Home/CCell/HomeCCell.xib
New file
@@ -0,0 +1,37 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21507" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <device id="retina6_12" orientation="portrait" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21505"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <objects>
        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
        <collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" id="gTV-IL-0wX" customClass="HomeCCell" customModule="WanPai" customModuleProvider="target">
            <rect key="frame" x="0.0" y="0.0" width="357" height="416"/>
            <autoresizingMask key="autoresizingMask"/>
            <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
                <rect key="frame" x="0.0" y="0.0" width="357" height="416"/>
                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                <subviews>
                    <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="9vT-54-wYE">
                        <rect key="frame" x="0.0" y="0.0" width="357" height="416"/>
                    </imageView>
                </subviews>
            </view>
            <constraints>
                <constraint firstAttribute="bottom" secondItem="9vT-54-wYE" secondAttribute="bottom" id="0i7-0w-x2D"/>
                <constraint firstItem="9vT-54-wYE" firstAttribute="top" secondItem="gTV-IL-0wX" secondAttribute="top" id="KhX-UM-RO8"/>
                <constraint firstAttribute="trailing" secondItem="9vT-54-wYE" secondAttribute="trailing" id="Q2V-xS-c4P"/>
                <constraint firstItem="9vT-54-wYE" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" id="rbX-vZ-W3x"/>
            </constraints>
            <size key="customSize" width="357" height="416"/>
            <connections>
                <outlet property="img" destination="9vT-54-wYE" id="EfI-q1-XAg"/>
            </connections>
            <point key="canvasLocation" x="293.89312977099235" y="149.29577464788733"/>
        </collectionViewCell>
    </objects>
</document>
WanPai/Root/Home/VC/HomeVC.swift
New file
@@ -0,0 +1,83 @@
//
//  HomeVC.swift
//  WanPai
//
//  Created by 杨锴 on 2023/6/8.
//
import UIKit
class HomeVC: BaseVC {
    @IBOutlet weak var collectionView: UICollectionView!
    private var layout:WaterFallFlowLayout!
    private var items = Array<String>()
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    override func setUI() {
        view.backgroundColor = UIColor(hexStr: "EEF0F3")
        layout = WaterFallFlowLayout()
        layout.cols = 2
        layout.sectionInset = UIEdgeInsets(top: 14, left: 34, bottom: 14, right: 34)
        layout.delegate = self
        collectionView.collectionViewLayout = layout
        collectionView.delegate = self
        collectionView.dataSource = self
        collectionView.register(UINib(nibName: "HomeCCell", bundle: nil), forCellWithReuseIdentifier: "_HomeCCell")
        for index in 1...8{
            items.append("b_\(index)")
        }
        collectionView.reloadData()
    }
    @IBAction func joinMemberAction(_ sender: UIButton) {
        let joinMemberVC = JoinMemberIntroduceVC()
        push(vc: joinMemberVC)
    }
    override var preferredStatusBarStyle: UIStatusBarStyle{
        return .lightContent
    }
}
extension HomeVC:UICollectionViewDelegate{
}
extension HomeVC:UICollectionViewDataSource{
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_HomeCCell", for: indexPath) as! HomeCCell
        cell.img.image = UIImage(named: items[indexPath.row])
        return cell
    }
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return items.count
    }
}
extension HomeVC: WaterFallLayoutDelegate{
    func waterFlowLayout(_ waterFlowLayout: WaterFallFlowLayout, itemHeight indexPath: IndexPath) -> CGFloat {
        if let tempImg = UIImage(named: items[indexPath.row]){
            let radio = tempImg.size.width / tempImg.size.height
            if radio >= 0.8{
                return 185
            }else{
                return 288
            }
        }
        return 288
    }
}
WanPai/Root/Home/VC/HomeVC.xib
New file
@@ -0,0 +1,162 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21507" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <device id="retina6_12" orientation="portrait" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21505"/>
        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
        <capability name="System colors in document resources" minToolsVersion="11.0"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <objects>
        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="HomeVC" customModule="WanPai" customModuleProvider="target">
            <connections>
                <outlet property="collectionView" destination="ysy-N3-BCh" id="3mf-b9-Tj4"/>
                <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/>
            </connections>
        </placeholder>
        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
        <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT">
            <rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
            <subviews>
                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="WGQ-UH-Uvg">
                    <rect key="frame" x="0.0" y="0.0" width="393" height="290.33333333333331"/>
                    <subviews>
                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="bg_home" translatesAutoresizingMaskIntoConstraints="NO" id="l0X-uU-o8F">
                            <rect key="frame" x="0.0" y="0.0" width="393" height="237.66666666666666"/>
                            <constraints>
                                <constraint firstAttribute="width" secondItem="l0X-uU-o8F" secondAttribute="height" multiplier="1:0.605" id="zJ9-xI-msc"/>
                            </constraints>
                        </imageView>
                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="CWt-Cn-ccL">
                            <rect key="frame" x="38" y="207.66666666666666" width="317" height="59.999999999999972"/>
                            <subviews>
                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_map" translatesAutoresizingMaskIntoConstraints="NO" id="0cp-Cu-32h">
                                    <rect key="frame" x="4" y="3" width="55" height="55"/>
                                    <constraints>
                                        <constraint firstAttribute="width" secondItem="0cp-Cu-32h" secondAttribute="height" multiplier="1:1" id="0Uj-am-gjP"/>
                                    </constraints>
                                </imageView>
                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_arrow" translatesAutoresizingMaskIntoConstraints="NO" id="Q3K-qR-eSC">
                                    <rect key="frame" x="279" y="26" width="23" height="9"/>
                                    <constraints>
                                        <constraint firstAttribute="height" constant="9" id="4i4-Rp-as9"/>
                                        <constraint firstAttribute="width" constant="23" id="90D-DW-LT3"/>
                                    </constraints>
                                </imageView>
                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="定位获取中..." textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="VD5-cz-3Fs">
                                    <rect key="frame" x="73" y="21" width="194" height="19.333333333333329"/>
                                    <fontDescription key="fontDescription" type="system" pointSize="16"/>
                                    <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.56999999999999995" colorSpace="calibratedRGB"/>
                                    <nil key="highlightedColor"/>
                                </label>
                            </subviews>
                            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                            <constraints>
                                <constraint firstAttribute="trailing" secondItem="Q3K-qR-eSC" secondAttribute="trailing" constant="15" id="4nL-oq-du4"/>
                                <constraint firstItem="Q3K-qR-eSC" firstAttribute="centerY" secondItem="0cp-Cu-32h" secondAttribute="centerY" id="6Lx-rc-l5r"/>
                                <constraint firstItem="VD5-cz-3Fs" firstAttribute="leading" secondItem="0cp-Cu-32h" secondAttribute="trailing" constant="14" id="73i-cc-eW6"/>
                                <constraint firstItem="0cp-Cu-32h" firstAttribute="top" secondItem="CWt-Cn-ccL" secondAttribute="top" constant="3" id="INE-T1-saw"/>
                                <constraint firstAttribute="bottom" secondItem="0cp-Cu-32h" secondAttribute="bottom" constant="2" id="Si9-c2-tQu"/>
                                <constraint firstAttribute="height" constant="60" id="pZv-yr-IEA"/>
                                <constraint firstItem="Q3K-qR-eSC" firstAttribute="leading" secondItem="VD5-cz-3Fs" secondAttribute="trailing" constant="12" id="rIr-ix-CFW"/>
                                <constraint firstItem="0cp-Cu-32h" firstAttribute="leading" secondItem="CWt-Cn-ccL" secondAttribute="leading" constant="4" id="vcf-jd-LTf"/>
                                <constraint firstItem="VD5-cz-3Fs" firstAttribute="centerY" secondItem="0cp-Cu-32h" secondAttribute="centerY" id="yH4-Bt-Vgp"/>
                            </constraints>
                            <userDefinedRuntimeAttributes>
                                <userDefinedRuntimeAttribute type="number" keyPath="shadowOpacity">
                                    <real key="value" value="1"/>
                                </userDefinedRuntimeAttribute>
                                <userDefinedRuntimeAttribute type="color" keyPath="shadowColor">
                                    <color key="value" red="0.80000000000000004" green="0.80000000000000004" blue="0.80000000000000004" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/>
                                </userDefinedRuntimeAttribute>
                                <userDefinedRuntimeAttribute type="size" keyPath="shadowOffset">
                                    <size key="value" width="0.0" height="2"/>
                                </userDefinedRuntimeAttribute>
                                <userDefinedRuntimeAttribute type="number" keyPath="shadowRadius">
                                    <real key="value" value="13"/>
                                </userDefinedRuntimeAttribute>
                                <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
                                    <real key="value" value="13"/>
                                </userDefinedRuntimeAttribute>
                                <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="NO"/>
                            </userDefinedRuntimeAttributes>
                        </view>
                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Y4w-3W-3I4">
                            <rect key="frame" x="18" y="126.66666666666669" width="206.33333333333334" height="43"/>
                            <string key="text">欢迎来到 快乐运动俱乐部
加入我们 成为会员</string>
                            <fontDescription key="fontDescription" type="system" pointSize="18"/>
                            <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                            <nil key="highlightedColor"/>
                        </label>
                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Welcome!" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Rlx-Vs-UDB">
                            <rect key="frame" x="18.999999999999993" y="89.666666666666671" width="102.33333333333331" height="31"/>
                            <constraints>
                                <constraint firstAttribute="height" constant="31" id="uJ5-bz-dlr"/>
                            </constraints>
                            <fontDescription key="fontDescription" type="boldSystem" pointSize="22"/>
                            <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                            <nil key="highlightedColor"/>
                        </label>
                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="poJ-Yp-Ex1">
                            <rect key="frame" x="18" y="126.66666666666669" width="206.33333333333334" height="43"/>
                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                            <connections>
                                <action selector="joinMemberAction:" destination="-1" eventType="touchUpInside" id="wxy-tX-qp7"/>
                            </connections>
                        </button>
                    </subviews>
                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                    <constraints>
                        <constraint firstItem="poJ-Yp-Ex1" firstAttribute="bottom" secondItem="Y4w-3W-3I4" secondAttribute="bottom" id="0dJ-Uy-p2O"/>
                        <constraint firstItem="l0X-uU-o8F" firstAttribute="leading" secondItem="WGQ-UH-Uvg" secondAttribute="leading" id="1As-Ff-Vb8"/>
                        <constraint firstItem="poJ-Yp-Ex1" firstAttribute="leading" secondItem="Y4w-3W-3I4" secondAttribute="leading" id="1no-qk-cqp"/>
                        <constraint firstItem="Y4w-3W-3I4" firstAttribute="leading" secondItem="WGQ-UH-Uvg" secondAttribute="leading" constant="18" id="4fW-84-sl4"/>
                        <constraint firstItem="poJ-Yp-Ex1" firstAttribute="trailing" secondItem="Y4w-3W-3I4" secondAttribute="trailing" id="ETv-qQ-Nj5"/>
                        <constraint firstAttribute="trailing" secondItem="l0X-uU-o8F" secondAttribute="trailing" id="H6K-8w-T50"/>
                        <constraint firstItem="l0X-uU-o8F" firstAttribute="top" secondItem="WGQ-UH-Uvg" secondAttribute="top" id="LhD-ha-3wJ"/>
                        <constraint firstItem="Rlx-Vs-UDB" firstAttribute="leading" secondItem="WGQ-UH-Uvg" secondAttribute="leading" constant="19" id="T3m-16-HD2"/>
                        <constraint firstAttribute="trailing" secondItem="CWt-Cn-ccL" secondAttribute="trailing" constant="38" id="W35-gE-yoZ"/>
                        <constraint firstAttribute="width" secondItem="WGQ-UH-Uvg" secondAttribute="height" multiplier="1:0.7384" id="ayQ-vi-dn2"/>
                        <constraint firstItem="poJ-Yp-Ex1" firstAttribute="top" secondItem="Y4w-3W-3I4" secondAttribute="top" id="c2v-L3-vtt"/>
                        <constraint firstItem="CWt-Cn-ccL" firstAttribute="leading" secondItem="WGQ-UH-Uvg" secondAttribute="leading" constant="38" id="fMC-5l-99c"/>
                        <constraint firstItem="Y4w-3W-3I4" firstAttribute="top" secondItem="Rlx-Vs-UDB" secondAttribute="bottom" constant="6" id="jcE-MI-qgw"/>
                        <constraint firstItem="CWt-Cn-ccL" firstAttribute="top" secondItem="l0X-uU-o8F" secondAttribute="bottom" constant="-30" id="qe2-5A-ExK"/>
                        <constraint firstItem="CWt-Cn-ccL" firstAttribute="top" secondItem="Y4w-3W-3I4" secondAttribute="bottom" constant="38" id="vwl-2A-Xaa"/>
                    </constraints>
                </view>
                <collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" dataMode="none" translatesAutoresizingMaskIntoConstraints="NO" id="ysy-N3-BCh">
                    <rect key="frame" x="0.0" y="290.33333333333331" width="393" height="527.66666666666674"/>
                    <collectionViewFlowLayout key="collectionViewLayout" minimumLineSpacing="10" minimumInteritemSpacing="10" id="Hvc-jj-SAe">
                        <size key="itemSize" width="128" height="128"/>
                        <size key="headerReferenceSize" width="0.0" height="0.0"/>
                        <size key="footerReferenceSize" width="0.0" height="0.0"/>
                        <inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/>
                    </collectionViewFlowLayout>
                </collectionView>
            </subviews>
            <viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/>
            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
            <constraints>
                <constraint firstItem="ysy-N3-BCh" firstAttribute="top" secondItem="WGQ-UH-Uvg" secondAttribute="bottom" id="GWq-es-hPt"/>
                <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="WGQ-UH-Uvg" secondAttribute="trailing" id="NHO-DL-gAi"/>
                <constraint firstItem="ysy-N3-BCh" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" id="VDv-z1-iGx"/>
                <constraint firstItem="WGQ-UH-Uvg" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" id="WOX-4y-Yuk"/>
                <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="ysy-N3-BCh" secondAttribute="trailing" id="iny-tC-K46"/>
                <constraint firstItem="fnl-2z-Ty3" firstAttribute="bottom" secondItem="ysy-N3-BCh" secondAttribute="bottom" id="jgP-5H-akR"/>
                <constraint firstItem="WGQ-UH-Uvg" firstAttribute="top" secondItem="i5M-Pr-FkT" secondAttribute="top" id="sgb-fE-wnZ"/>
            </constraints>
            <point key="canvasLocation" x="29.770992366412212" y="20.422535211267608"/>
        </view>
    </objects>
    <resources>
        <image name="bg_home" width="390" height="236"/>
        <image name="icon_arrow" width="23" height="9"/>
        <image name="icon_map" width="55" height="55"/>
        <systemColor name="systemBackgroundColor">
            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
        </systemColor>
    </resources>
</document>
WanPai/Root/Home/VC/JoinMemberIntroduceVC.swift
New file
@@ -0,0 +1,35 @@
//
//  JoinMemberIntroduceVC.swift
//  WanPai
//
//  Created by 杨锴 on 2023/6/8.
//
import UIKit
import QMUIKit
class JoinMemberIntroduceVC: BaseVC {
    @IBOutlet weak var btn_join: QMUIButton!
    override func viewDidLoad() {
        super.viewDidLoad()
        title = "成为会员"
    }
    override func setUI() {
        btn_join.spacingBetweenImageAndTitle = 3
        btn_join.imagePosition = .left
    }
    @IBAction func joinAction(_ sender: QMUIButton) {
        PaymentView.show { status in
            let paymentState:PaymentResultVC.PaymentResult = status ? .success:.fail
            let vc = PaymentResultVC(result: paymentState)
            vc.modalPresentationStyle = .fullScreen
            self.present(vc, animated: true)
        }
    }
}
WanPai/Root/Home/VC/JoinMemberIntroduceVC.xib
New file
@@ -0,0 +1,70 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21507" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <device id="retina6_12" orientation="portrait" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21505"/>
        <capability name="Named colors" minToolsVersion="9.0"/>
        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
        <capability name="System colors in document resources" minToolsVersion="11.0"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <objects>
        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="JoinMemberIntroduceVC" customModule="WanPai" customModuleProvider="target">
            <connections>
                <outlet property="btn_join" destination="GjB-uh-zMR" id="lhq-Ch-tAZ"/>
                <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/>
            </connections>
        </placeholder>
        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
        <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT">
            <rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
            <subviews>
                <wkWebView contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Hpl-hX-ZzE">
                    <rect key="frame" x="0.0" y="59" width="393" height="759"/>
                    <wkWebViewConfiguration key="configuration">
                        <audiovisualMediaTypes key="mediaTypesRequiringUserActionForPlayback" none="YES"/>
                        <wkPreferences key="preferences"/>
                    </wkWebViewConfiguration>
                </wkWebView>
                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="GjB-uh-zMR" customClass="QMUIButton">
                    <rect key="frame" x="0.0" y="770" width="393" height="48"/>
                    <color key="backgroundColor" name="FE6E0D"/>
                    <constraints>
                        <constraint firstAttribute="height" constant="48" id="cor-iv-k2L"/>
                    </constraints>
                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="18"/>
                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                    <state key="normal" title="加入年度会员" image="btn_add">
                        <color key="titleColor" red="0.94901960784313721" green="0.97647058823529409" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                    </state>
                    <connections>
                        <action selector="joinAction:" destination="-1" eventType="touchUpInside" id="vtO-Zw-2xW"/>
                    </connections>
                </button>
            </subviews>
            <viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/>
            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
            <constraints>
                <constraint firstItem="Hpl-hX-ZzE" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" id="7VF-r3-Yar"/>
                <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="Hpl-hX-ZzE" secondAttribute="trailing" id="Ax7-HK-yi9"/>
                <constraint firstItem="fnl-2z-Ty3" firstAttribute="bottom" secondItem="Hpl-hX-ZzE" secondAttribute="bottom" id="RiD-Rz-Uyy"/>
                <constraint firstItem="GjB-uh-zMR" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" id="Uyd-nn-6X1"/>
                <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="GjB-uh-zMR" secondAttribute="trailing" id="bdf-CQ-Uf4"/>
                <constraint firstItem="Hpl-hX-ZzE" firstAttribute="top" secondItem="fnl-2z-Ty3" secondAttribute="top" id="dce-pA-PVN"/>
                <constraint firstItem="fnl-2z-Ty3" firstAttribute="bottom" secondItem="GjB-uh-zMR" secondAttribute="bottom" id="m0F-H8-e5w"/>
            </constraints>
            <point key="canvasLocation" x="138" y="21"/>
        </view>
    </objects>
    <resources>
        <image name="btn_add" width="20" height="20"/>
        <namedColor name="FE6E0D">
            <color red="0.99599999189376831" green="0.4309999942779541" blue="0.050999999046325684" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
        </namedColor>
        <systemColor name="systemBackgroundColor">
            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
        </systemColor>
    </resources>
</document>
WanPai/Root/Login/VC/LoginRegOrForgotVC.swift
New file
@@ -0,0 +1,40 @@
//
//  LoginRegOrForgotVC.swift
//  WanPai
//
//  Created by 杨锴 on 2023/6/8.
//
import UIKit
class LoginRegOrForgotVC: BaseVC {
    enum UpdateType:String{
        case forgot = "忘记密码"
        case update = "修改密码"
        case register = "注册"
    }
    private var type:UpdateType!
    required init(type:UpdateType) {
        super.init(nibName: nil, bundle: nil)
        self.type = type
    }
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        title = type.rawValue
    }
    override var preferredStatusBarStyle: UIStatusBarStyle{
        return .default
    }
}
WanPai/Root/Login/VC/LoginRegOrForgotVC.xib
New file
@@ -0,0 +1,207 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21507" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <device id="retina6_12" orientation="portrait" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21505"/>
        <capability name="Named colors" minToolsVersion="9.0"/>
        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
        <capability name="System colors in document resources" minToolsVersion="11.0"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <objects>
        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="LoginRegOrForgotVC" customModule="WanPai" customModuleProvider="target">
            <connections>
                <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/>
            </connections>
        </placeholder>
        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
        <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT">
            <rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
            <subviews>
                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_LOGO" translatesAutoresizingMaskIntoConstraints="NO" id="ju4-6O-Lwi">
                    <rect key="frame" x="122.66666666666669" y="79" width="148" height="72"/>
                </imageView>
                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="H0l-HL-WQ6">
                    <rect key="frame" x="40" y="190" width="313" height="40"/>
                    <subviews>
                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_login_phone" translatesAutoresizingMaskIntoConstraints="NO" id="ksw-uN-X0q">
                            <rect key="frame" x="31" y="11" width="16" height="18"/>
                        </imageView>
                        <textField opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="请输入手机号" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="t2b-ES-vps" customClass="QMUITextField">
                            <rect key="frame" x="75" y="0.0" width="228" height="40"/>
                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
                            <textInputTraits key="textInputTraits" keyboardType="numberPad"/>
                            <userDefinedRuntimeAttributes>
                                <userDefinedRuntimeAttribute type="number" keyPath="maximumTextLength">
                                    <integer key="value" value="11"/>
                                </userDefinedRuntimeAttribute>
                                <userDefinedRuntimeAttribute type="color" keyPath="placeholderColor">
                                    <color key="value" red="0.0" green="0.0" blue="0.0" alpha="0.40000000000000002" colorSpace="custom" customColorSpace="sRGB"/>
                                </userDefinedRuntimeAttribute>
                            </userDefinedRuntimeAttributes>
                        </textField>
                    </subviews>
                    <color key="backgroundColor" red="0.96470588239999999" green="0.96470588239999999" blue="0.96470588239999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                    <constraints>
                        <constraint firstItem="t2b-ES-vps" firstAttribute="leading" secondItem="ksw-uN-X0q" secondAttribute="trailing" constant="28" id="1ls-IE-PHX"/>
                        <constraint firstItem="ksw-uN-X0q" firstAttribute="leading" secondItem="H0l-HL-WQ6" secondAttribute="leading" constant="31" id="48W-7t-nKb"/>
                        <constraint firstItem="t2b-ES-vps" firstAttribute="top" secondItem="H0l-HL-WQ6" secondAttribute="top" id="5Py-AC-nG8"/>
                        <constraint firstAttribute="trailing" secondItem="t2b-ES-vps" secondAttribute="trailing" constant="10" id="8na-8U-eKt"/>
                        <constraint firstAttribute="height" constant="40" id="9z5-Qt-ZGg"/>
                        <constraint firstItem="ksw-uN-X0q" firstAttribute="centerY" secondItem="H0l-HL-WQ6" secondAttribute="centerY" id="PiL-jy-PCF"/>
                        <constraint firstAttribute="bottom" secondItem="t2b-ES-vps" secondAttribute="bottom" id="QcC-TC-rhR"/>
                    </constraints>
                    <userDefinedRuntimeAttributes>
                        <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                        <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                            <real key="value" value="20"/>
                        </userDefinedRuntimeAttribute>
                    </userDefinedRuntimeAttributes>
                </view>
                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="AjG-PX-mug">
                    <rect key="frame" x="40" y="250" width="313" height="40"/>
                    <subviews>
                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_login_code" translatesAutoresizingMaskIntoConstraints="NO" id="GmS-FY-i5D">
                            <rect key="frame" x="31" y="11" width="15" height="18"/>
                        </imageView>
                        <textField opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="请输入验证码" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="gNj-6t-p9o" customClass="QMUITextField">
                            <rect key="frame" x="74" y="0.0" width="98" height="40"/>
                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
                            <textInputTraits key="textInputTraits" spellCheckingType="no" keyboardType="numberPad" enablesReturnKeyAutomatically="YES" smartQuotesType="no"/>
                            <userDefinedRuntimeAttributes>
                                <userDefinedRuntimeAttribute type="number" keyPath="maximumTextLength">
                                    <integer key="value" value="6"/>
                                </userDefinedRuntimeAttribute>
                                <userDefinedRuntimeAttribute type="color" keyPath="placeholderColor">
                                    <color key="value" red="0.0" green="0.0" blue="0.0" alpha="0.40000000000000002" colorSpace="custom" customColorSpace="sRGB"/>
                                </userDefinedRuntimeAttribute>
                            </userDefinedRuntimeAttributes>
                        </textField>
                        <button hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="8ND-Q2-rU3">
                            <rect key="frame" x="231" y="6.6666666666666856" width="62" height="27"/>
                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/>
                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                            <state key="normal" title="获取验证码">
                                <color key="titleColor" red="0.38823529410000002" green="0.74117647060000003" blue="0.85882352939999995" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                            </state>
                        </button>
                    </subviews>
                    <color key="backgroundColor" red="0.96470588239999999" green="0.96470588239999999" blue="0.96470588239999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                    <constraints>
                        <constraint firstAttribute="height" constant="40" id="A8Z-NM-OhZ"/>
                        <constraint firstAttribute="trailing" secondItem="8ND-Q2-rU3" secondAttribute="trailing" constant="20" id="G90-A2-VBu"/>
                        <constraint firstItem="GmS-FY-i5D" firstAttribute="leading" secondItem="AjG-PX-mug" secondAttribute="leading" constant="31" id="N5S-wR-Zed"/>
                        <constraint firstItem="gNj-6t-p9o" firstAttribute="top" secondItem="AjG-PX-mug" secondAttribute="top" id="NEM-5g-CfC"/>
                        <constraint firstAttribute="bottom" secondItem="gNj-6t-p9o" secondAttribute="bottom" id="brJ-JF-o8b"/>
                        <constraint firstItem="gNj-6t-p9o" firstAttribute="leading" secondItem="GmS-FY-i5D" secondAttribute="trailing" constant="28" id="iqu-4E-pvB"/>
                        <constraint firstItem="8ND-Q2-rU3" firstAttribute="centerY" secondItem="AjG-PX-mug" secondAttribute="centerY" id="the-dX-IUr"/>
                        <constraint firstItem="GmS-FY-i5D" firstAttribute="centerY" secondItem="AjG-PX-mug" secondAttribute="centerY" id="vlJ-yW-mvX"/>
                    </constraints>
                    <userDefinedRuntimeAttributes>
                        <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                        <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                            <real key="value" value="20"/>
                        </userDefinedRuntimeAttribute>
                    </userDefinedRuntimeAttributes>
                </view>
                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="gqc-3H-F7Y">
                    <rect key="frame" x="40" y="314" width="313" height="40"/>
                    <subviews>
                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_login_code" translatesAutoresizingMaskIntoConstraints="NO" id="DwZ-DK-k3H">
                            <rect key="frame" x="31" y="11" width="15" height="18"/>
                        </imageView>
                        <textField opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="请输入密码" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="xxp-hE-Y3y" customClass="QMUITextField">
                            <rect key="frame" x="74" y="0.0" width="190" height="40"/>
                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
                            <textInputTraits key="textInputTraits" spellCheckingType="no" keyboardType="alphabet" enablesReturnKeyAutomatically="YES" secureTextEntry="YES" smartQuotesType="no"/>
                            <userDefinedRuntimeAttributes>
                                <userDefinedRuntimeAttribute type="number" keyPath="maximumTextLength">
                                    <integer key="value" value="30"/>
                                </userDefinedRuntimeAttribute>
                                <userDefinedRuntimeAttribute type="color" keyPath="placeholderColor">
                                    <color key="value" red="0.0" green="0.0" blue="0.0" alpha="0.40000000000000002" colorSpace="custom" customColorSpace="sRGB"/>
                                </userDefinedRuntimeAttribute>
                            </userDefinedRuntimeAttributes>
                        </textField>
                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="aTn-ag-HTb">
                            <rect key="frame" x="274" y="9" width="22" height="22"/>
                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                            <state key="normal" image="icon_login_eye_c"/>
                            <state key="selected" image="icon_login_eye"/>
                        </button>
                    </subviews>
                    <color key="backgroundColor" red="0.96470588239999999" green="0.96470588239999999" blue="0.96470588239999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                    <constraints>
                        <constraint firstItem="aTn-ag-HTb" firstAttribute="leading" secondItem="xxp-hE-Y3y" secondAttribute="trailing" constant="10" id="0x7-Qk-1RR"/>
                        <constraint firstItem="aTn-ag-HTb" firstAttribute="centerY" secondItem="DwZ-DK-k3H" secondAttribute="centerY" id="ARk-CM-UR5"/>
                        <constraint firstItem="DwZ-DK-k3H" firstAttribute="leading" secondItem="gqc-3H-F7Y" secondAttribute="leading" constant="31" id="LTu-wD-daQ"/>
                        <constraint firstItem="DwZ-DK-k3H" firstAttribute="centerY" secondItem="gqc-3H-F7Y" secondAttribute="centerY" id="VaL-F6-Dzb"/>
                        <constraint firstItem="xxp-hE-Y3y" firstAttribute="leading" secondItem="DwZ-DK-k3H" secondAttribute="trailing" constant="28" id="Xhf-Ud-6Mn"/>
                        <constraint firstItem="xxp-hE-Y3y" firstAttribute="top" secondItem="gqc-3H-F7Y" secondAttribute="top" id="cOG-RP-AOA"/>
                        <constraint firstAttribute="trailing" secondItem="aTn-ag-HTb" secondAttribute="trailing" constant="17" id="mAG-ND-EAC"/>
                        <constraint firstAttribute="bottom" secondItem="xxp-hE-Y3y" secondAttribute="bottom" id="mou-7K-ymd"/>
                        <constraint firstAttribute="height" constant="40" id="sMw-Ms-giP"/>
                    </constraints>
                    <userDefinedRuntimeAttributes>
                        <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                        <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                            <real key="value" value="20"/>
                        </userDefinedRuntimeAttribute>
                    </userDefinedRuntimeAttributes>
                </view>
                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="vri-pP-hU6">
                    <rect key="frame" x="100" y="393" width="193" height="40"/>
                    <color key="backgroundColor" name="FE6E0D"/>
                    <constraints>
                        <constraint firstAttribute="height" constant="40" id="9Zu-bi-eqQ"/>
                    </constraints>
                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="15"/>
                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                    <state key="normal" title="确定"/>
                    <userDefinedRuntimeAttributes>
                        <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                        <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                            <real key="value" value="20"/>
                        </userDefinedRuntimeAttribute>
                    </userDefinedRuntimeAttributes>
                </button>
            </subviews>
            <viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/>
            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
            <constraints>
                <constraint firstItem="vri-pP-hU6" firstAttribute="top" secondItem="gqc-3H-F7Y" secondAttribute="bottom" constant="39" id="1bl-mL-MaS"/>
                <constraint firstItem="gqc-3H-F7Y" firstAttribute="trailing" secondItem="H0l-HL-WQ6" secondAttribute="trailing" id="27v-LX-ziP"/>
                <constraint firstItem="ju4-6O-Lwi" firstAttribute="centerX" secondItem="fnl-2z-Ty3" secondAttribute="centerX" id="5vk-us-g5I"/>
                <constraint firstItem="H0l-HL-WQ6" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="40" id="6Ty-7f-3BQ"/>
                <constraint firstItem="gqc-3H-F7Y" firstAttribute="leading" secondItem="H0l-HL-WQ6" secondAttribute="leading" id="7uk-b4-MBZ"/>
                <constraint firstItem="H0l-HL-WQ6" firstAttribute="top" secondItem="ju4-6O-Lwi" secondAttribute="bottom" constant="39" id="8h5-5e-QFi"/>
                <constraint firstItem="vri-pP-hU6" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="100" id="BaK-gW-Gtx"/>
                <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="H0l-HL-WQ6" secondAttribute="trailing" constant="40" id="IaL-rX-bcc"/>
                <constraint firstItem="AjG-PX-mug" firstAttribute="leading" secondItem="H0l-HL-WQ6" secondAttribute="leading" id="J9d-bS-7OG"/>
                <constraint firstItem="vri-pP-hU6" firstAttribute="centerX" secondItem="fnl-2z-Ty3" secondAttribute="centerX" id="Mmn-Zj-0z7"/>
                <constraint firstItem="ju4-6O-Lwi" firstAttribute="top" secondItem="fnl-2z-Ty3" secondAttribute="top" constant="20" id="ZoS-rs-UOK"/>
                <constraint firstItem="AjG-PX-mug" firstAttribute="trailing" secondItem="H0l-HL-WQ6" secondAttribute="trailing" id="aeA-76-2dC"/>
                <constraint firstItem="H0l-HL-WQ6" firstAttribute="centerX" secondItem="fnl-2z-Ty3" secondAttribute="centerX" id="bow-BN-4vw"/>
                <constraint firstItem="AjG-PX-mug" firstAttribute="top" secondItem="H0l-HL-WQ6" secondAttribute="bottom" constant="20" id="ewl-qX-Y7E"/>
                <constraint firstItem="gqc-3H-F7Y" firstAttribute="top" secondItem="AjG-PX-mug" secondAttribute="bottom" constant="24" id="mtp-Is-iBP"/>
                <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="vri-pP-hU6" secondAttribute="trailing" constant="100" id="wnH-HW-tKv"/>
            </constraints>
            <point key="canvasLocation" x="140" y="21"/>
        </view>
    </objects>
    <resources>
        <image name="icon_LOGO" width="148" height="72"/>
        <image name="icon_login_code" width="15" height="18"/>
        <image name="icon_login_eye" width="23" height="14"/>
        <image name="icon_login_eye_c" width="22" height="9"/>
        <image name="icon_login_phone" width="16" height="18"/>
        <namedColor name="FE6E0D">
            <color red="0.99599999189376831" green="0.4309999942779541" blue="0.050999999046325684" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
        </namedColor>
        <systemColor name="systemBackgroundColor">
            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
        </systemColor>
    </resources>
</document>
WanPai/Root/Login/VC/LoginVC.swift
New file
@@ -0,0 +1,196 @@
//
//  LoginVC.swift
//  WanPai
//
//  Created by 杨锴 on 2023/6/6.
//
import UIKit
import RxRelay
import QMUIKit
import JQTools
private enum LoginType{
    case pwd,smsCode
}
class LoginVC: BaseVC {
    @IBOutlet weak var btn_pwdLogin: UIButton!
    @IBOutlet weak var btn_smsCodeLogin: UIButton!
    @IBOutlet weak var tf_phone: QMUITextField!
    @IBOutlet weak var tf_verify: QMUITextField!
    @IBOutlet weak var btn_getCode: UIButton!
    @IBOutlet weak var btn_eye: UIButton!
    @IBOutlet weak var btn_wechat: QMUIButton!
    @IBOutlet weak var textView_treaty: UITextView!
    @IBOutlet weak var btn_login: UIButton!
    @IBOutlet weak var btn_register: UIButton!
    @IBOutlet weak var cons_registerCenterX: NSLayoutConstraint!
    @IBOutlet weak var cons_loginCenterX: NSLayoutConstraint!
    @IBOutlet weak var cons_loginWidth: NSLayoutConstraint!
    private let loginType = BehaviorRelay<LoginType>(value: .pwd)
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    override func setUI() {
        btn_wechat.imagePosition = .top
        btn_wechat.spacingBetweenImageAndTitle = 8
        textView_treaty.isEditable = false
        let paragraphStyle = NSMutableParagraphStyle()
        paragraphStyle.lineBreakMode = NSLineBreakMode.byCharWrapping
        let content = "我已阅读并同意《隐私协议》《用户协议》《运动安全告知书》"
        let attribute = NSMutableAttributedString(string: content)
        attribute.addAttributes([NSAttributedString.Key.link:URL(string: "tip://treaty")!], range: content.jq_subRange("《隐私协议》")!)
        attribute.addAttributes([NSAttributedString.Key.link:URL(string: "tip://user")!], range: content.jq_subRange("《用户协议》")!)
        attribute.addAttributes([NSAttributedString.Key.link:URL(string: "tip://sportSafety")!], range: content.jq_subRange("《运动安全告知书》")!)
        attribute.addAttributes([.paragraphStyle:paragraphStyle], range: _NSRange(location: 0, length: content.count))
        self.textView_treaty.attributedText = attribute
        self.textView_treaty.delegate = self
    }
    override func setRx() {
        loginType.subscribe(onNext: { [weak self] type in
            guard let weakSelf = self else {return}
            weakSelf.tf_verify.text = ""
            weakSelf.btn_getCode.isHidden = type == .pwd
            weakSelf.btn_eye.isHidden = type == .smsCode
            switch type {
            case .pwd:
                weakSelf.tf_verify.isSecureTextEntry = !weakSelf.btn_eye.isSelected
                weakSelf.tf_verify.keyboardType = .default
                weakSelf.tf_verify.maximumTextLength = 30
                weakSelf.tf_verify.placeholder = "请输入密码"
            case .smsCode:
                weakSelf.tf_verify.isSecureTextEntry = false
                weakSelf.tf_verify.keyboardType = .numberPad
                weakSelf.tf_verify.maximumTextLength = 6
                weakSelf.tf_verify.placeholder = "请输入验证码"
            }
        }).disposed(by: disposeBag)
    }
    @IBAction func exchangeLoginTypeAction(_ sender: UIButton) {
        btn_pwdLogin.isSelected = sender.tag == 10
        btn_smsCodeLogin.isSelected = sender.tag == 11
        let type:LoginType = sender.tag == 10 ? .pwd:.smsCode
        loginType.accept(type)
        cons_registerCenterX.constant = btn_pwdLogin.isSelected ? -82:0
        cons_loginCenterX.constant = btn_pwdLogin.isSelected ? 82:0
        cons_loginWidth.constant = btn_pwdLogin.isSelected ? 144:189
        let str = btn_pwdLogin.isSelected ? "登录":"注册/登录"
        UIView.animate(withDuration: 0.4) {
            self.view.layoutIfNeeded()
            self.btn_login.setTitle(str, for: .normal)
        }
    }
    @IBAction func eyeAction(_ sender: UIButton) {
        sender.isSelected = !sender.isSelected
        if loginType.value == .pwd{
            tf_verify.isSecureTextEntry = !sender.isSelected
        }
    }
    @IBAction func loginAction(_ sender: UIButton) {
        let snapView = screnDelegate?.window?.snapshotView(afterScreenUpdates: true)
        let tabBar = BaseTabBarVC()
        let homeNav = BaseNav(rootViewController: HomeVC())
        homeNav.tabBarItem = UITabBarItem(title: "加入玩湃", image: UIImage(named: "tabbar_home"), selectedImage: UIImage(named: "tabbar_home_s"))
        let clouseNav = BaseNav(rootViewController: CourseVC())
        clouseNav.tabBarItem = UITabBarItem(title: "开始上课", image: UIImage(named: "tabbar_course"), selectedImage: UIImage(named: "tabbar_course_s"))
        let welfareVCNav = BaseNav(rootViewController: WelfareVC())
        welfareVCNav.tabBarItem = UITabBarItem(title: "使用福利", image: UIImage(named: "tabbar_welfare"), selectedImage: UIImage(named: "tabbar_welfare_s"))
        let searchVCNav = BaseNav(rootViewController: SearchVC())
        searchVCNav.tabBarItem = UITabBarItem(title: "搜索玩湃", image: UIImage(named: "tabbar_search"), selectedImage: UIImage(named: "tabbar_search_s"))
        tabBar.viewControllers = [homeNav,clouseNav,welfareVCNav,searchVCNav]
        screnDelegate?.window?.rootViewController = tabBar
        screnDelegate?.window?.rootViewController?.view.addSubview(snapView!)
        screnDelegate?.window?.makeKeyAndVisible()
        UIView.animate(withDuration: 1.5) {
            snapView?.alpha = 0
            snapView?.transform3D = CATransform3DMakeScale(1.5, 1.5, 1.5)
        } completion: { _ in
            snapView?.removeFromSuperview()
        }
    }
    @IBAction func updatePwdAction(_ sender: UIButton) {
        let vc = LoginRegOrForgotVC(type: .update)
        push(vc: vc)
    }
    @IBAction func forgotPwdAction(_ sender: UIButton) {
        let vc = LoginRegOrForgotVC(type: .forgot)
        push(vc: vc)
    }
    @IBAction func registerAction(_ sender: UIButton) {
        let vc = LoginRegOrForgotVC(type: .register)
        push(vc: vc)
    }
    @IBAction func readAgreentAction(_ sender: UIButton) {
        sender.isSelected = !sender.isSelected
    }
    @IBAction func wechatLoginAcion(_ sender: QMUIButton) {
        CommonAlertView.show(title: "提示", content: "11231231231231231")
    }
    override var preferredStatusBarStyle: UIStatusBarStyle{
        return .default
    }
}
extension LoginVC:UITextViewDelegate{
    func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool {
        if #available(iOS 16.0, *) {
            if let str = URL.host(percentEncoded: true){
                switch str {
                case "treaty":
                    AgreentView.show(type: .privacy)
                case "user":
                    AgreentView.show(type: .user)
                case "sportSafety":
                    AgreentView.show(type: .safe)
                default:break
                }
                return true
            }
        } else {
            // Fallback on earlier versions
        }
        return false
    }
}
WanPai/Root/Login/VC/LoginVC.xib
New file
@@ -0,0 +1,380 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21507" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <device id="retina6_12" orientation="portrait" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21505"/>
        <capability name="Named colors" minToolsVersion="9.0"/>
        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
        <capability name="System colors in document resources" minToolsVersion="11.0"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <objects>
        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="LoginVC" customModule="WanPai" customModuleProvider="target">
            <connections>
                <outlet property="btn_eye" destination="bft-9v-fd2" id="6lv-dX-cmp"/>
                <outlet property="btn_getCode" destination="Peu-H2-2Bj" id="Tos-ZB-3it"/>
                <outlet property="btn_login" destination="NQ0-2r-DbZ" id="0lx-ai-KGD"/>
                <outlet property="btn_pwdLogin" destination="fEr-ZJ-pMj" id="adD-fy-ix2"/>
                <outlet property="btn_register" destination="A58-cL-JDg" id="6oc-zY-p32"/>
                <outlet property="btn_smsCodeLogin" destination="Bgw-Aw-FZm" id="Jde-9o-6wl"/>
                <outlet property="btn_wechat" destination="AA4-J4-8iR" id="Rdp-vy-GdD"/>
                <outlet property="cons_loginCenterX" destination="J5m-nY-42E" id="2NA-d1-PIL"/>
                <outlet property="cons_loginWidth" destination="MTM-NH-2de" id="0Sc-uM-zMe"/>
                <outlet property="cons_registerCenterX" destination="kcA-1H-itW" id="Uhx-AG-p46"/>
                <outlet property="textView_treaty" destination="BqB-Az-Ez1" id="zWC-fQ-SsK"/>
                <outlet property="tf_phone" destination="dXR-3c-p7o" id="7Dm-0N-TNe"/>
                <outlet property="tf_verify" destination="yYG-aW-Yzi" id="v9Z-15-f29"/>
                <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/>
            </connections>
        </placeholder>
        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
        <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT">
            <rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
            <subviews>
                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_LOGO" translatesAutoresizingMaskIntoConstraints="NO" id="38m-zi-L1d">
                    <rect key="frame" x="122.66666666666669" y="79" width="148" height="72"/>
                </imageView>
                <stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="cAB-q2-f9Z">
                    <rect key="frame" x="113.33333333333333" y="183" width="166.66666666666669" height="25"/>
                    <subviews>
                        <button opaque="NO" tag="10" contentMode="scaleToFill" selected="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="fEr-ZJ-pMj">
                            <rect key="frame" x="0.0" y="0.0" width="74" height="25"/>
                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="18"/>
                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                            <state key="normal" title="密码登录">
                                <color key="titleColor" name="515151"/>
                            </state>
                            <state key="selected">
                                <color key="titleColor" name="FE6E0D"/>
                            </state>
                            <connections>
                                <action selector="exchangeLoginTypeAction:" destination="-1" eventType="touchUpInside" id="12W-6X-lBL"/>
                            </connections>
                        </button>
                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="|" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="QH3-h0-THD">
                            <rect key="frame" x="74.000000000000014" y="0.0" width="18.666666666666671" height="25"/>
                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="18"/>
                            <color key="textColor" name="FE6E0D"/>
                            <nil key="highlightedColor"/>
                        </label>
                        <button opaque="NO" tag="11" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Bgw-Aw-FZm">
                            <rect key="frame" x="92.666666666666686" y="0.0" width="74" height="25"/>
                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="18"/>
                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                            <state key="normal" title="短信登录">
                                <color key="titleColor" name="515151"/>
                            </state>
                            <state key="selected">
                                <color key="titleColor" name="FE6E0D"/>
                            </state>
                            <connections>
                                <action selector="exchangeLoginTypeAction:" destination="-1" eventType="touchUpInside" id="yXg-QX-GZ4"/>
                            </connections>
                        </button>
                    </subviews>
                    <constraints>
                        <constraint firstAttribute="height" constant="25" id="xeG-sS-w3k"/>
                    </constraints>
                </stackView>
                <stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Ej3-Zy-UxP">
                    <rect key="frame" x="140.33333333333334" y="351" width="112.33333333333334" height="25"/>
                    <subviews>
                        <button opaque="NO" contentMode="scaleToFill" selected="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="hI1-WH-dqa">
                            <rect key="frame" x="0.0" y="0.0" width="50" height="25"/>
                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/>
                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                            <state key="normal" title="修改密码">
                                <color key="titleColor" name="515151"/>
                            </state>
                            <state key="selected">
                                <color key="titleColor" name="FE6E0D"/>
                            </state>
                            <connections>
                                <action selector="updatePwdAction:" destination="-1" eventType="touchUpInside" id="Emz-nv-NYG"/>
                            </connections>
                        </button>
                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="|" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Pxy-q7-vhk">
                            <rect key="frame" x="50" y="0.0" width="12.333333333333336" height="25"/>
                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/>
                            <color key="textColor" name="FE6E0D"/>
                            <nil key="highlightedColor"/>
                        </label>
                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="anK-cQ-sSd">
                            <rect key="frame" x="62.333333333333314" y="0.0" width="50" height="25"/>
                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/>
                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                            <state key="normal" title="忘记密码">
                                <color key="titleColor" name="FE6E0D"/>
                            </state>
                            <state key="selected">
                                <color key="titleColor" name="FE6E0D"/>
                            </state>
                            <connections>
                                <action selector="forgotPwdAction:" destination="-1" eventType="touchUpInside" id="Ifr-lU-p7J"/>
                            </connections>
                        </button>
                    </subviews>
                    <constraints>
                        <constraint firstAttribute="height" constant="25" id="fsW-mR-FHo"/>
                    </constraints>
                </stackView>
                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ixo-tJ-9cE">
                    <rect key="frame" x="40" y="238" width="313" height="40"/>
                    <subviews>
                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_login_phone" translatesAutoresizingMaskIntoConstraints="NO" id="HXD-J5-UNt">
                            <rect key="frame" x="31" y="11" width="16" height="18"/>
                        </imageView>
                        <textField opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="请输入手机号" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="dXR-3c-p7o" customClass="QMUITextField">
                            <rect key="frame" x="75" y="0.0" width="228" height="40"/>
                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
                            <textInputTraits key="textInputTraits" keyboardType="numberPad"/>
                            <userDefinedRuntimeAttributes>
                                <userDefinedRuntimeAttribute type="number" keyPath="maximumTextLength">
                                    <integer key="value" value="11"/>
                                </userDefinedRuntimeAttribute>
                                <userDefinedRuntimeAttribute type="color" keyPath="placeholderColor">
                                    <color key="value" red="0.0" green="0.0" blue="0.0" alpha="0.40000000000000002" colorSpace="custom" customColorSpace="sRGB"/>
                                </userDefinedRuntimeAttribute>
                            </userDefinedRuntimeAttributes>
                        </textField>
                    </subviews>
                    <color key="backgroundColor" red="0.96470588235294119" green="0.96470588235294119" blue="0.96470588235294119" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                    <constraints>
                        <constraint firstAttribute="height" constant="40" id="8k3-YG-84m"/>
                        <constraint firstItem="HXD-J5-UNt" firstAttribute="leading" secondItem="ixo-tJ-9cE" secondAttribute="leading" constant="31" id="LYf-PT-yCY"/>
                        <constraint firstAttribute="trailing" secondItem="dXR-3c-p7o" secondAttribute="trailing" constant="10" id="crG-8x-lY4"/>
                        <constraint firstItem="dXR-3c-p7o" firstAttribute="top" secondItem="ixo-tJ-9cE" secondAttribute="top" id="ctp-CL-yYd"/>
                        <constraint firstItem="HXD-J5-UNt" firstAttribute="centerY" secondItem="ixo-tJ-9cE" secondAttribute="centerY" id="tAB-wj-wWR"/>
                        <constraint firstItem="dXR-3c-p7o" firstAttribute="leading" secondItem="HXD-J5-UNt" secondAttribute="trailing" constant="28" id="wdm-3k-ttt"/>
                        <constraint firstAttribute="bottom" secondItem="dXR-3c-p7o" secondAttribute="bottom" id="xLe-cn-XTJ"/>
                    </constraints>
                    <userDefinedRuntimeAttributes>
                        <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                        <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                            <real key="value" value="20"/>
                        </userDefinedRuntimeAttribute>
                    </userDefinedRuntimeAttributes>
                </view>
                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="1LE-kf-RCn">
                    <rect key="frame" x="40" y="298" width="313" height="40"/>
                    <subviews>
                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_login_code" translatesAutoresizingMaskIntoConstraints="NO" id="0Nl-D8-jVF">
                            <rect key="frame" x="31" y="11" width="15" height="18"/>
                        </imageView>
                        <textField opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="请输入密码" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="yYG-aW-Yzi" customClass="QMUITextField">
                            <rect key="frame" x="74" y="0.0" width="190" height="40"/>
                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
                            <textInputTraits key="textInputTraits" spellCheckingType="no" keyboardType="alphabet" enablesReturnKeyAutomatically="YES" secureTextEntry="YES" smartQuotesType="no"/>
                            <userDefinedRuntimeAttributes>
                                <userDefinedRuntimeAttribute type="number" keyPath="maximumTextLength">
                                    <integer key="value" value="11"/>
                                </userDefinedRuntimeAttribute>
                                <userDefinedRuntimeAttribute type="color" keyPath="placeholderColor">
                                    <color key="value" red="0.0" green="0.0" blue="0.0" alpha="0.40000000000000002" colorSpace="custom" customColorSpace="sRGB"/>
                                </userDefinedRuntimeAttribute>
                            </userDefinedRuntimeAttributes>
                        </textField>
                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="bft-9v-fd2">
                            <rect key="frame" x="274" y="9" width="22" height="22"/>
                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                            <state key="normal" image="icon_login_eye_c"/>
                            <state key="selected" image="icon_login_eye"/>
                            <connections>
                                <action selector="eyeAction:" destination="-1" eventType="touchUpInside" id="tAb-bY-w9Q"/>
                            </connections>
                        </button>
                        <button hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Peu-H2-2Bj">
                            <rect key="frame" x="231" y="6.6666666666666856" width="62" height="27"/>
                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/>
                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                            <state key="normal" title="获取验证码">
                                <color key="titleColor" red="0.38823529411764707" green="0.74117647058823533" blue="0.85882352941176465" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                            </state>
                        </button>
                    </subviews>
                    <color key="backgroundColor" red="0.96470588239999999" green="0.96470588239999999" blue="0.96470588239999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                    <constraints>
                        <constraint firstItem="0Nl-D8-jVF" firstAttribute="leading" secondItem="1LE-kf-RCn" secondAttribute="leading" constant="31" id="0di-OZ-7cb"/>
                        <constraint firstItem="bft-9v-fd2" firstAttribute="centerY" secondItem="0Nl-D8-jVF" secondAttribute="centerY" id="1fW-nw-j1L"/>
                        <constraint firstItem="yYG-aW-Yzi" firstAttribute="leading" secondItem="0Nl-D8-jVF" secondAttribute="trailing" constant="28" id="DTC-n0-FXH"/>
                        <constraint firstAttribute="trailing" secondItem="Peu-H2-2Bj" secondAttribute="trailing" constant="20" id="G0A-B4-LL9"/>
                        <constraint firstItem="bft-9v-fd2" firstAttribute="leading" secondItem="yYG-aW-Yzi" secondAttribute="trailing" constant="10" id="M9d-MT-Vu5"/>
                        <constraint firstItem="yYG-aW-Yzi" firstAttribute="top" secondItem="1LE-kf-RCn" secondAttribute="top" id="NlC-lV-gcr"/>
                        <constraint firstAttribute="height" constant="40" id="Vlt-Kr-Hnl"/>
                        <constraint firstAttribute="trailing" secondItem="bft-9v-fd2" secondAttribute="trailing" constant="17" id="ZCV-Hr-1WF"/>
                        <constraint firstItem="Peu-H2-2Bj" firstAttribute="centerY" secondItem="1LE-kf-RCn" secondAttribute="centerY" id="nLX-2P-LLJ"/>
                        <constraint firstItem="0Nl-D8-jVF" firstAttribute="centerY" secondItem="1LE-kf-RCn" secondAttribute="centerY" id="nru-Vh-7U0"/>
                        <constraint firstAttribute="bottom" secondItem="yYG-aW-Yzi" secondAttribute="bottom" id="y4n-O8-i1l"/>
                    </constraints>
                    <userDefinedRuntimeAttributes>
                        <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                        <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                            <real key="value" value="20"/>
                        </userDefinedRuntimeAttribute>
                    </userDefinedRuntimeAttributes>
                </view>
                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="A58-cL-JDg">
                    <rect key="frame" x="42.666666666666657" y="404" width="144" height="40"/>
                    <constraints>
                        <constraint firstAttribute="height" constant="40" id="y9B-Xu-Q5i"/>
                    </constraints>
                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="15"/>
                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                    <state key="normal" title="注册">
                        <color key="titleColor" name="FE6E0D"/>
                    </state>
                    <userDefinedRuntimeAttributes>
                        <userDefinedRuntimeAttribute type="color" keyPath="ld_borderColorXIB">
                            <color key="value" name="FE6E0D"/>
                        </userDefinedRuntimeAttribute>
                        <userDefinedRuntimeAttribute type="number" keyPath="ld_borderWidthXIB">
                            <real key="value" value="1"/>
                        </userDefinedRuntimeAttribute>
                        <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                            <real key="value" value="20"/>
                        </userDefinedRuntimeAttribute>
                    </userDefinedRuntimeAttributes>
                    <connections>
                        <action selector="registerAction:" destination="-1" eventType="touchUpInside" id="LZ3-jL-IGj"/>
                    </connections>
                </button>
                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="NQ0-2r-DbZ">
                    <rect key="frame" x="206.66666666666663" y="404" width="144" height="40"/>
                    <color key="backgroundColor" name="FE6E0D"/>
                    <constraints>
                        <constraint firstAttribute="width" constant="144" id="MTM-NH-2de"/>
                        <constraint firstAttribute="height" constant="40" id="jrh-JX-bIa"/>
                    </constraints>
                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="15"/>
                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                    <state key="normal" title="登录">
                        <color key="titleColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                    </state>
                    <userDefinedRuntimeAttributes>
                        <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                            <real key="value" value="20"/>
                        </userDefinedRuntimeAttribute>
                    </userDefinedRuntimeAttributes>
                    <connections>
                        <action selector="loginAction:" destination="-1" eventType="touchUpInside" id="w5q-4Z-SHK"/>
                    </connections>
                </button>
                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="jpR-VA-PYM">
                    <rect key="frame" x="42" y="464" width="20" height="22"/>
                    <constraints>
                        <constraint firstAttribute="height" constant="22" id="2ZC-Li-D7d"/>
                        <constraint firstAttribute="width" constant="20" id="rRu-Ef-yCE"/>
                    </constraints>
                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                    <state key="normal" image="btn_select_u"/>
                    <state key="selected" image="btn_select"/>
                    <connections>
                        <action selector="readAgreentAction:" destination="-1" eventType="touchUpInside" id="c55-Qk-ocI"/>
                    </connections>
                </button>
                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="mZh-Vi-57o">
                    <rect key="frame" x="0.0" y="499" width="393" height="319"/>
                    <subviews>
                        <stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ikk-sm-4Sm">
                            <rect key="frame" x="146.66666666666666" y="179" width="100" height="50"/>
                            <subviews>
                                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="AA4-J4-8iR" customClass="QMUIButton">
                                    <rect key="frame" x="0.0" y="0.0" width="100" height="50"/>
                                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/>
                                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                                    <state key="normal" title="微信登录" image="btn_wechat">
                                        <color key="titleColor" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/>
                                    </state>
                                    <connections>
                                        <action selector="wechatLoginAcion:" destination="-1" eventType="touchUpInside" id="YOh-qo-ygR"/>
                                    </connections>
                                </button>
                            </subviews>
                        </stackView>
                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="其他登录方式" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="cqp-2p-rC6">
                            <rect key="frame" x="159.66666666666666" y="147" width="73.666666666666657" height="17"/>
                            <constraints>
                                <constraint firstAttribute="height" constant="17" id="DBH-wO-NS0"/>
                            </constraints>
                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/>
                            <color key="textColor" red="0.70196078431372544" green="0.70196078431372544" blue="0.70196078431372544" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                            <nil key="highlightedColor"/>
                        </label>
                    </subviews>
                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                    <constraints>
                        <constraint firstItem="ikk-sm-4Sm" firstAttribute="centerX" secondItem="cqp-2p-rC6" secondAttribute="centerX" id="0xX-m5-mrX"/>
                        <constraint firstAttribute="bottom" secondItem="ikk-sm-4Sm" secondAttribute="bottom" constant="90" id="egz-uu-9vA"/>
                        <constraint firstItem="ikk-sm-4Sm" firstAttribute="top" secondItem="cqp-2p-rC6" secondAttribute="bottom" constant="15" id="m32-Te-28i"/>
                        <constraint firstItem="ikk-sm-4Sm" firstAttribute="centerX" secondItem="mZh-Vi-57o" secondAttribute="centerX" id="sxJ-Mz-EGJ"/>
                    </constraints>
                </view>
                <textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" text="我已阅读并同意《隐私协议》《用户协议》《运动安全告知书》" textAlignment="natural" translatesAutoresizingMaskIntoConstraints="NO" id="BqB-Az-Ez1">
                    <rect key="frame" x="64" y="459" width="287" height="35"/>
                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                    <constraints>
                        <constraint firstAttribute="height" constant="35" id="rzR-7J-NJs"/>
                    </constraints>
                    <color key="textColor" systemColor="labelColor"/>
                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/>
                    <textInputTraits key="textInputTraits" autocapitalizationType="sentences"/>
                </textView>
            </subviews>
            <viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/>
            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
            <constraints>
                <constraint firstItem="Ej3-Zy-UxP" firstAttribute="centerX" secondItem="fnl-2z-Ty3" secondAttribute="centerX" id="06n-Gd-wg4"/>
                <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="mZh-Vi-57o" secondAttribute="trailing" id="5PZ-du-NJ4"/>
                <constraint firstItem="cAB-q2-f9Z" firstAttribute="top" secondItem="38m-zi-L1d" secondAttribute="bottom" constant="32" id="BJR-4U-Mqg"/>
                <constraint firstItem="1LE-kf-RCn" firstAttribute="leading" secondItem="ixo-tJ-9cE" secondAttribute="leading" id="C94-6l-8Sz"/>
                <constraint firstItem="NQ0-2r-DbZ" firstAttribute="centerY" secondItem="A58-cL-JDg" secondAttribute="centerY" id="ELW-lb-UMU"/>
                <constraint firstItem="cAB-q2-f9Z" firstAttribute="centerX" secondItem="fnl-2z-Ty3" secondAttribute="centerX" id="F8y-Ql-6Fl"/>
                <constraint firstItem="NQ0-2r-DbZ" firstAttribute="width" secondItem="A58-cL-JDg" secondAttribute="width" id="GKs-an-eCI"/>
                <constraint firstItem="NQ0-2r-DbZ" firstAttribute="centerX" secondItem="fnl-2z-Ty3" secondAttribute="centerX" constant="82" id="J5m-nY-42E"/>
                <constraint firstItem="1LE-kf-RCn" firstAttribute="trailing" secondItem="ixo-tJ-9cE" secondAttribute="trailing" id="LYX-CC-Ine"/>
                <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="BqB-Az-Ez1" secondAttribute="trailing" constant="42" id="MWC-RO-gsY"/>
                <constraint firstItem="fnl-2z-Ty3" firstAttribute="bottom" secondItem="mZh-Vi-57o" secondAttribute="bottom" id="MWu-3v-W4I"/>
                <constraint firstItem="mZh-Vi-57o" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" id="T42-Uk-S6N"/>
                <constraint firstItem="ixo-tJ-9cE" firstAttribute="top" secondItem="cAB-q2-f9Z" secondAttribute="bottom" constant="30" id="THc-e6-Bko"/>
                <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="ixo-tJ-9cE" secondAttribute="trailing" constant="40" id="TzU-Nh-o64"/>
                <constraint firstItem="jpR-VA-PYM" firstAttribute="top" secondItem="A58-cL-JDg" secondAttribute="bottom" constant="20" id="Ujc-Kg-bWe"/>
                <constraint firstItem="mZh-Vi-57o" firstAttribute="top" secondItem="BqB-Az-Ez1" secondAttribute="bottom" constant="5" id="dMK-2O-N4o"/>
                <constraint firstItem="1LE-kf-RCn" firstAttribute="top" secondItem="ixo-tJ-9cE" secondAttribute="bottom" constant="20" id="h5h-2F-FmM"/>
                <constraint firstItem="38m-zi-L1d" firstAttribute="top" secondItem="fnl-2z-Ty3" secondAttribute="top" constant="20" id="iPe-ep-hvl"/>
                <constraint firstItem="A58-cL-JDg" firstAttribute="top" secondItem="Ej3-Zy-UxP" secondAttribute="bottom" constant="28" id="j1g-QM-Spl"/>
                <constraint firstItem="A58-cL-JDg" firstAttribute="centerX" secondItem="fnl-2z-Ty3" secondAttribute="centerX" constant="-82" id="kcA-1H-itW"/>
                <constraint firstItem="Ej3-Zy-UxP" firstAttribute="top" secondItem="1LE-kf-RCn" secondAttribute="bottom" constant="13" id="lu7-1L-Dgy"/>
                <constraint firstItem="38m-zi-L1d" firstAttribute="centerX" secondItem="fnl-2z-Ty3" secondAttribute="centerX" id="vTc-mW-ZlI"/>
                <constraint firstItem="jpR-VA-PYM" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="42" id="vWq-ms-r59"/>
                <constraint firstItem="BqB-Az-Ez1" firstAttribute="leading" secondItem="jpR-VA-PYM" secondAttribute="trailing" constant="2" id="wEr-Lg-muD"/>
                <constraint firstItem="ixo-tJ-9cE" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="40" id="wT0-yN-RM8"/>
                <constraint firstItem="jpR-VA-PYM" firstAttribute="top" secondItem="BqB-Az-Ez1" secondAttribute="top" constant="5" id="x9D-NQ-ac9"/>
            </constraints>
            <point key="canvasLocation" x="136.64122137404578" y="20.422535211267608"/>
        </view>
    </objects>
    <resources>
        <image name="btn_select" width="20" height="20"/>
        <image name="btn_select_u" width="20" height="20"/>
        <image name="btn_wechat" width="50" height="50"/>
        <image name="icon_LOGO" width="148" height="72"/>
        <image name="icon_login_code" width="15" height="18"/>
        <image name="icon_login_eye" width="23" height="14"/>
        <image name="icon_login_eye_c" width="22" height="9"/>
        <image name="icon_login_phone" width="16" height="18"/>
        <namedColor name="515151">
            <color red="0.31799998879432678" green="0.31799998879432678" blue="0.31799998879432678" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
        </namedColor>
        <namedColor name="FE6E0D">
            <color red="0.99599999189376831" green="0.4309999942779541" blue="0.050999999046325684" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
        </namedColor>
        <systemColor name="labelColor">
            <color red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
        </systemColor>
        <systemColor name="systemBackgroundColor">
            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
        </systemColor>
    </resources>
</document>
WanPai/Root/Other/CCell/CouponCCell.swift
New file
@@ -0,0 +1,17 @@
//
//  CouponCCell.swift
//  WanPai
//
//  Created by 杨锴 on 2023/6/8.
//
import UIKit
class CouponCCell: UICollectionViewCell {
    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }
}
WanPai/Root/Other/CCell/CouponCCell.xib
New file
@@ -0,0 +1,131 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21507" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <device id="retina6_12" orientation="portrait" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21505"/>
        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
        <capability name="System colors in document resources" minToolsVersion="11.0"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <objects>
        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
        <collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" id="gTV-IL-0wX" customClass="CouponCCell" customModule="WanPai" customModuleProvider="target">
            <rect key="frame" x="0.0" y="0.0" width="417" height="123"/>
            <autoresizingMask key="autoresizingMask"/>
            <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
                <rect key="frame" x="0.0" y="0.0" width="417" height="123"/>
                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                <subviews>
                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="mnx-Jv-DFb">
                        <rect key="frame" x="14" y="10" width="389" height="103"/>
                        <subviews>
                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="1000" verticalHuggingPriority="251" image="icon_coupon_header" translatesAutoresizingMaskIntoConstraints="NO" id="OKL-S9-8uc">
                                <rect key="frame" x="0.0" y="0.0" width="100" height="103"/>
                            </imageView>
                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_coupon_footer" translatesAutoresizingMaskIntoConstraints="NO" id="s4d-Hy-Gra">
                                <rect key="frame" x="100" y="0.0" width="289" height="103"/>
                            </imageView>
                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0元" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="943-VV-dPw">
                                <rect key="frame" x="5" y="5" width="90" height="93"/>
                                <fontDescription key="fontDescription" type="system" weight="medium" pointSize="24"/>
                                <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                <nil key="highlightedColor"/>
                            </label>
                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="OYF-uW-SFs">
                                <rect key="frame" x="115" y="18" width="16.333333333333343" height="25"/>
                                <constraints>
                                    <constraint firstAttribute="height" constant="25" id="hj7-hG-ZQC"/>
                                </constraints>
                                <fontDescription key="fontDescription" type="system" weight="medium" pointSize="18"/>
                                <nil key="textColor"/>
                                <nil key="highlightedColor"/>
                            </label>
                            <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="3" translatesAutoresizingMaskIntoConstraints="NO" id="tzt-Qb-9Zd">
                                <rect key="frame" x="115.00000000000001" y="46" width="60.666666666666671" height="37"/>
                                <subviews>
                                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="满--元可用" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="gEm-JU-PoK">
                                        <rect key="frame" x="0.0" y="0.0" width="60.666666666666664" height="17"/>
                                        <constraints>
                                            <constraint firstAttribute="height" constant="17" id="YNJ-Sa-gNn"/>
                                        </constraints>
                                        <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/>
                                        <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
                                        <nil key="highlightedColor"/>
                                    </label>
                                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="有效期至--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="7Qw-dg-xym">
                                        <rect key="frame" x="0.0" y="20" width="60.666666666666664" height="17"/>
                                        <constraints>
                                            <constraint firstAttribute="height" constant="17" id="aQU-SY-iID"/>
                                        </constraints>
                                        <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/>
                                        <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
                                        <nil key="highlightedColor"/>
                                    </label>
                                </subviews>
                            </stackView>
                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="DLn-XT-0Qj">
                                <rect key="frame" x="319" y="40" width="61" height="23"/>
                                <constraints>
                                    <constraint firstAttribute="width" constant="61" id="fb9-Ui-Jxu"/>
                                    <constraint firstAttribute="height" constant="23" id="uWO-P5-dgm"/>
                                </constraints>
                                <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/>
                                <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                                <state key="normal" title="查看详情">
                                    <color key="titleColor" red="0.99215686274509807" green="0.52941176470588236" blue="0.0078431372549019607" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                </state>
                                <userDefinedRuntimeAttributes>
                                    <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                                    <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                                        <real key="value" value="1"/>
                                    </userDefinedRuntimeAttribute>
                                    <userDefinedRuntimeAttribute type="number" keyPath="jq_xibCornerRadius">
                                        <real key="value" value="2"/>
                                    </userDefinedRuntimeAttribute>
                                </userDefinedRuntimeAttributes>
                            </button>
                        </subviews>
                        <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                        <constraints>
                            <constraint firstItem="tzt-Qb-9Zd" firstAttribute="top" secondItem="OYF-uW-SFs" secondAttribute="bottom" constant="3" id="3T7-Gn-mJc"/>
                            <constraint firstItem="tzt-Qb-9Zd" firstAttribute="leading" secondItem="OYF-uW-SFs" secondAttribute="leading" id="5Xl-ko-The"/>
                            <constraint firstAttribute="trailing" secondItem="s4d-Hy-Gra" secondAttribute="trailing" id="7Pe-n1-Bgi"/>
                            <constraint firstItem="OKL-S9-8uc" firstAttribute="leading" secondItem="mnx-Jv-DFb" secondAttribute="leading" id="8o8-p8-KaY"/>
                            <constraint firstItem="943-VV-dPw" firstAttribute="top" secondItem="OKL-S9-8uc" secondAttribute="top" constant="5" id="CYz-xI-ZqO"/>
                            <constraint firstItem="OYF-uW-SFs" firstAttribute="top" secondItem="mnx-Jv-DFb" secondAttribute="top" constant="18" id="Hju-WD-yhZ"/>
                            <constraint firstItem="s4d-Hy-Gra" firstAttribute="top" secondItem="mnx-Jv-DFb" secondAttribute="top" id="MJ4-G1-ATN"/>
                            <constraint firstItem="OYF-uW-SFs" firstAttribute="leading" secondItem="OKL-S9-8uc" secondAttribute="trailing" constant="15" id="MXj-wy-eU3"/>
                            <constraint firstAttribute="bottom" secondItem="OKL-S9-8uc" secondAttribute="bottom" id="Nc3-7H-Jib"/>
                            <constraint firstAttribute="trailing" secondItem="DLn-XT-0Qj" secondAttribute="trailing" constant="9" id="ONW-N8-KWx"/>
                            <constraint firstItem="943-VV-dPw" firstAttribute="trailing" secondItem="OKL-S9-8uc" secondAttribute="trailing" constant="-5" id="WDa-vh-Zz9"/>
                            <constraint firstItem="s4d-Hy-Gra" firstAttribute="leading" secondItem="OKL-S9-8uc" secondAttribute="trailing" id="bZg-Yq-qYQ"/>
                            <constraint firstItem="OKL-S9-8uc" firstAttribute="top" secondItem="mnx-Jv-DFb" secondAttribute="top" id="ctI-2Y-KVB"/>
                            <constraint firstItem="DLn-XT-0Qj" firstAttribute="centerY" secondItem="943-VV-dPw" secondAttribute="centerY" id="fg2-s8-8hM"/>
                            <constraint firstItem="943-VV-dPw" firstAttribute="bottom" secondItem="OKL-S9-8uc" secondAttribute="bottom" constant="-5" id="gDi-cg-pJq"/>
                            <constraint firstAttribute="bottom" secondItem="s4d-Hy-Gra" secondAttribute="bottom" id="pBu-iF-fVd"/>
                            <constraint firstItem="943-VV-dPw" firstAttribute="leading" secondItem="OKL-S9-8uc" secondAttribute="leading" constant="5" id="zzE-HG-7TH"/>
                        </constraints>
                    </view>
                </subviews>
            </view>
            <viewLayoutGuide key="safeArea" id="ZTg-uK-7eu"/>
            <constraints>
                <constraint firstAttribute="bottom" secondItem="mnx-Jv-DFb" secondAttribute="bottom" constant="10" id="3cB-eS-ZPb"/>
                <constraint firstItem="mnx-Jv-DFb" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" constant="14" id="JbK-3A-8yF"/>
                <constraint firstAttribute="trailing" secondItem="mnx-Jv-DFb" secondAttribute="trailing" constant="14" id="LAi-Gn-60b"/>
                <constraint firstItem="mnx-Jv-DFb" firstAttribute="top" secondItem="gTV-IL-0wX" secondAttribute="top" constant="10" id="jcL-zh-Hb4"/>
            </constraints>
            <size key="customSize" width="417" height="123"/>
            <point key="canvasLocation" x="319.84732824427482" y="44.014084507042256"/>
        </collectionViewCell>
    </objects>
    <resources>
        <image name="icon_coupon_footer" width="262" height="100"/>
        <image name="icon_coupon_header" width="100" height="100"/>
        <systemColor name="systemBackgroundColor">
            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
        </systemColor>
    </resources>
</document>
WanPai/Root/Other/VC/PaymentResultVC.swift
New file
@@ -0,0 +1,97 @@
//
//  PaymentResultVC.swift
//  WanPai
//
//  Created by 杨锴 on 2023/6/8.
//
import UIKit
import JQTools
class PaymentResultVC: BaseVC {
    enum PaymentResult{case success,fail}
    @IBOutlet weak var img_paymentState: UIImageView!
    @IBOutlet weak var label_content: UILabel!
    @IBOutlet weak var collectionView: UICollectionView!
    @IBOutlet weak var btn_backHome: UIButton!
    @IBOutlet weak var btn_again: UIButton!
    @IBOutlet weak var btn_back: UIButton!
    private var result:PaymentResult!
    required init(result:PaymentResult) {
        super.init(nibName: nil, bundle: nil)
        self.result = result
    }
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        title = "成为会员"
        btn_again.isHidden = result == .success
        btn_back.isHidden = result == .success
        btn_backHome.isHidden = result == .fail
        collectionView.isHidden =  result == .fail
        switch result {
        case .fail:
            img_paymentState.image = UIImage(named: "icon_fail")
            label_content.text = "支付失败,这是失败原因!"
        case .success:
            img_paymentState.image = UIImage(named: "icon_success")
            label_content.text = "支付成功,恭喜您成为玩湃会员!并获得优惠券!"
        case .none:break
        }
        collectionView.delegate = self
        collectionView.dataSource = self
        collectionView.contentInset = UIEdgeInsets(top: 0, left: 14, bottom: 0, right: 14)
        collectionView.register(UINib(nibName: "CouponCCell", bundle: nil), forCellWithReuseIdentifier: "_CouponCCell")
    }
    @IBAction func paymentAgainAction(_ sender: UIButton) {
    }
    @IBAction func backAction(_ sender: UIButton) {
        dismiss(animated: true)
    }
}
extension PaymentResultVC:UICollectionViewDelegate{
}
extension PaymentResultVC:UICollectionViewDataSource{
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return 5
    }
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_CouponCCell", for: indexPath) as! CouponCCell
        return cell
    }
}
extension PaymentResultVC:UICollectionViewDelegateFlowLayout{
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
        return 5
    }
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
        return 5
    }
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        return CGSize(width: JQ_ScreenW, height: 110)
    }
}
WanPai/Root/Other/VC/PaymentResultVC.xib
New file
@@ -0,0 +1,151 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21507" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <device id="retina6_12" orientation="portrait" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21505"/>
        <capability name="Named colors" minToolsVersion="9.0"/>
        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
        <capability name="System colors in document resources" minToolsVersion="11.0"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <objects>
        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="PaymentResultVC" customModule="WanPai" customModuleProvider="target">
            <connections>
                <outlet property="btn_again" destination="Puy-qr-lEb" id="ivp-V2-TLE"/>
                <outlet property="btn_back" destination="Lh5-H4-LBg" id="qWq-aq-38a"/>
                <outlet property="btn_backHome" destination="meY-wl-nNE" id="apQ-VS-afU"/>
                <outlet property="collectionView" destination="6ci-0V-ZT4" id="BTE-zu-4xN"/>
                <outlet property="img_paymentState" destination="Fv7-HV-ioC" id="kvE-hr-cVH"/>
                <outlet property="label_content" destination="RK0-X7-xSS" id="lD8-Jd-A6o"/>
                <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/>
            </connections>
        </placeholder>
        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
        <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT">
            <rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
            <subviews>
                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_success" translatesAutoresizingMaskIntoConstraints="NO" id="Fv7-HV-ioC">
                    <rect key="frame" x="176.66666666666666" y="108" width="40" height="40"/>
                </imageView>
                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="支付成功,恭喜您成为玩湃会员!并获得优惠券!" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="RK0-X7-xSS">
                    <rect key="frame" x="39.333333333333343" y="168" width="314.33333333333326" height="17"/>
                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
                    <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                    <nil key="highlightedColor"/>
                </label>
                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Puy-qr-lEb">
                    <rect key="frame" x="206.66666666666663" y="239" width="145.33333333333337" height="40"/>
                    <color key="backgroundColor" name="FE6E0D"/>
                    <constraints>
                        <constraint firstAttribute="height" constant="40" id="Sck-36-Bvo"/>
                    </constraints>
                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="15"/>
                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                    <state key="normal" title="再次支付"/>
                    <userDefinedRuntimeAttributes>
                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
                            <real key="value" value="20"/>
                        </userDefinedRuntimeAttribute>
                    </userDefinedRuntimeAttributes>
                    <connections>
                        <action selector="paymentAgainAction:" destination="-1" eventType="touchUpInside" id="upo-4e-3CK"/>
                    </connections>
                </button>
                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Lh5-H4-LBg">
                    <rect key="frame" x="41" y="239" width="145.66666666666666" height="40"/>
                    <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                    <constraints>
                        <constraint firstAttribute="height" constant="40" id="eFd-1o-twz"/>
                    </constraints>
                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="15"/>
                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                    <state key="normal" title="返回">
                        <color key="titleColor" name="FE6E0D"/>
                    </state>
                    <userDefinedRuntimeAttributes>
                        <userDefinedRuntimeAttribute type="color" keyPath="borderColor">
                            <color key="value" name="FE6E0D"/>
                        </userDefinedRuntimeAttribute>
                        <userDefinedRuntimeAttribute type="number" keyPath="borderWidth">
                            <real key="value" value="1"/>
                        </userDefinedRuntimeAttribute>
                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
                            <real key="value" value="20"/>
                        </userDefinedRuntimeAttribute>
                    </userDefinedRuntimeAttributes>
                    <connections>
                        <action selector="backAction:" destination="-1" eventType="touchUpInside" id="jV4-km-MpA"/>
                    </connections>
                </button>
                <collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" dataMode="none" translatesAutoresizingMaskIntoConstraints="NO" id="6ci-0V-ZT4">
                    <rect key="frame" x="0.0" y="228" width="393" height="471"/>
                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                    <collectionViewFlowLayout key="collectionViewLayout" minimumLineSpacing="10" minimumInteritemSpacing="10" id="7br-70-TUT">
                        <size key="itemSize" width="128" height="128"/>
                        <size key="headerReferenceSize" width="0.0" height="0.0"/>
                        <size key="footerReferenceSize" width="0.0" height="0.0"/>
                        <inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/>
                    </collectionViewFlowLayout>
                </collectionView>
                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="meY-wl-nNE">
                    <rect key="frame" x="149" y="709" width="95" height="38"/>
                    <constraints>
                        <constraint firstAttribute="width" constant="95" id="5rh-Ui-gwV"/>
                        <constraint firstAttribute="height" constant="38" id="nHo-hR-hM3"/>
                    </constraints>
                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                    <state key="normal" title="返回主页">
                        <color key="titleColor" red="0.36862745098039218" green="0.36862745098039218" blue="0.36862745098039218" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                    </state>
                    <userDefinedRuntimeAttributes>
                        <userDefinedRuntimeAttribute type="number" keyPath="jq_xibBorderWidth">
                            <real key="value" value="1"/>
                        </userDefinedRuntimeAttribute>
                        <userDefinedRuntimeAttribute type="color" keyPath="jq_xibBorderColor">
                            <color key="value" red="0.83921568627450982" green="0.83529411764705885" blue="0.83529411764705885" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        </userDefinedRuntimeAttribute>
                        <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                            <real key="value" value="2"/>
                        </userDefinedRuntimeAttribute>
                    </userDefinedRuntimeAttributes>
                    <connections>
                        <action selector="backAction:" destination="-1" eventType="touchUpInside" id="4GW-1U-42J"/>
                    </connections>
                </button>
            </subviews>
            <viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/>
            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
            <constraints>
                <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="6ci-0V-ZT4" secondAttribute="trailing" id="5Yg-0m-KVU"/>
                <constraint firstItem="Puy-qr-lEb" firstAttribute="width" secondItem="Lh5-H4-LBg" secondAttribute="width" id="6Ej-a1-YEW"/>
                <constraint firstItem="RK0-X7-xSS" firstAttribute="top" secondItem="Fv7-HV-ioC" secondAttribute="bottom" constant="20" id="6Ii-mh-axn"/>
                <constraint firstItem="Lh5-H4-LBg" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="41" id="76U-vk-a1r"/>
                <constraint firstItem="Fv7-HV-ioC" firstAttribute="top" secondItem="fnl-2z-Ty3" secondAttribute="top" constant="49" id="Fj8-kC-rK8"/>
                <constraint firstItem="meY-wl-nNE" firstAttribute="centerX" secondItem="fnl-2z-Ty3" secondAttribute="centerX" id="JNm-aR-XPU"/>
                <constraint firstItem="Puy-qr-lEb" firstAttribute="top" secondItem="Lh5-H4-LBg" secondAttribute="top" id="LTz-7E-ixS"/>
                <constraint firstItem="6ci-0V-ZT4" firstAttribute="top" secondItem="RK0-X7-xSS" secondAttribute="bottom" constant="43" id="SRc-4G-F63"/>
                <constraint firstItem="fnl-2z-Ty3" firstAttribute="bottom" secondItem="meY-wl-nNE" secondAttribute="bottom" constant="71" id="UnI-Ey-Pc1"/>
                <constraint firstItem="RK0-X7-xSS" firstAttribute="centerX" secondItem="Fv7-HV-ioC" secondAttribute="centerX" id="XBX-DI-MSD"/>
                <constraint firstItem="meY-wl-nNE" firstAttribute="top" secondItem="6ci-0V-ZT4" secondAttribute="bottom" constant="10" id="Y9C-4j-R40"/>
                <constraint firstItem="Fv7-HV-ioC" firstAttribute="centerX" secondItem="fnl-2z-Ty3" secondAttribute="centerX" id="aaQ-gG-s1W"/>
                <constraint firstItem="Puy-qr-lEb" firstAttribute="leading" secondItem="Lh5-H4-LBg" secondAttribute="trailing" constant="20" id="ayk-fO-rlg"/>
                <constraint firstItem="6ci-0V-ZT4" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" id="gBF-6S-2xb"/>
                <constraint firstItem="Puy-qr-lEb" firstAttribute="top" secondItem="RK0-X7-xSS" secondAttribute="bottom" constant="54" id="hHF-Uh-qJK"/>
                <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="Puy-qr-lEb" secondAttribute="trailing" constant="41" id="quk-KF-5Kt"/>
            </constraints>
            <point key="canvasLocation" x="104" y="21"/>
        </view>
    </objects>
    <resources>
        <image name="icon_success" width="40" height="40"/>
        <namedColor name="FE6E0D">
            <color red="0.99599999189376831" green="0.4309999942779541" blue="0.050999999046325684" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
        </namedColor>
        <systemColor name="systemBackgroundColor">
            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
        </systemColor>
    </resources>
</document>
WanPai/Root/Search/VC/SearchVC.swift
New file
@@ -0,0 +1,30 @@
//
//  SearchVC.swift
//  WanPai
//
//  Created by 杨锴 on 2023/6/8.
//
import UIKit
import JQTools
class SearchVC: BaseVC {
    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .jq_randomColor
    }
    /*
    // MARK: - Navigation
    // In a storyboard-based application, you will often want to do a little preparation before navigation
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        // Get the new view controller using segue.destination.
        // Pass the selected object to the new view controller.
    }
    */
}
WanPai/Root/Search/VC/SearchVC.xib
New file
@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="13142" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <dependencies>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12042"/>
        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <objects>
        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="SearchVC" customModuleProvider="target">
            <connections>
                <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/>
            </connections>
        </placeholder>
        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
        <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT">
            <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
            <color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
            <viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/>
        </view>
    </objects>
</document>
WanPai/Root/Welfare/VC/WelfareVC.swift
New file
@@ -0,0 +1,20 @@
//
//  WelfareVC.swift
//  WanPai
//
//  Created by 杨锴 on 2023/6/8.
//
import UIKit
import JQTools
class WelfareVC: BaseVC {
    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .jq_randomColor
    }
}
WanPai/Root/Welfare/VC/WelfareVC.xib
New file
@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="13142" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <dependencies>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12042"/>
        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <objects>
        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="WelfareVC" customModuleProvider="target">
            <connections>
                <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/>
            </connections>
        </placeholder>
        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
        <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT">
            <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
            <color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
            <viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/>
        </view>
    </objects>
</document>
WanPai/SceneDelegate.swift
@@ -15,10 +15,13 @@
        guard let windowScene = (scene as? UIWindowScene) else { return }
        window = UIWindow(windowScene: windowScene)
        window?.frame = windowScene.coordinateSpace.bounds
        let nav = BaseNav(rootViewController: LoginVC())
        let nav = LoginNav(rootViewController: LoginVC())
        window?.rootViewController =  nav
        window?.makeKeyAndVisible()
        
        if #available(iOS 13.0, *) {
            self.window?.overrideUserInterfaceStyle = .light
        }
        
    }