فهرست منبع

首页UI完成;
商品列表布局70%

iOS-Abel 2 سال پیش
والد
کامیت
3287943b23
100فایلهای تغییر یافته به همراه3953 افزوده شده و 19 حذف شده
  1. 270 0
      Asteria.xcodeproj/project.pbxproj
  2. 22 0
      Asteria/ASUI/ASUI.xcassets/nav/nav_back.imageset/Contents.json
  3. BIN
      Asteria/ASUI/ASUI.xcassets/nav/nav_back.imageset/组 8043@2x.png
  4. BIN
      Asteria/ASUI/ASUI.xcassets/nav/nav_back.imageset/组 8043@3x.png
  5. 6 0
      Asteria/ASUI/ColorDefine.h
  6. 2 2
      Asteria/ASUI/CustomView/productView/ASProductBaseModel.m
  7. 5 0
      Asteria/ASUI/CustomView/productView/ASProductItemView.h
  8. 1 5
      Asteria/ASUI/CustomView/productView/ASProductItemView.m
  9. 2 0
      Asteria/ASUI/CustomView/someView/KWScrollOffsetView.h
  10. 1 1
      Asteria/ASUI/CustomView/someView/KWScrollOffsetView.m
  11. 1 1
      Asteria/ASUI/Extensions/UITableView+ASBase.m
  12. 2 0
      Asteria/ASUI/Extensions/UIView+PublicInit.h
  13. 12 0
      Asteria/ASUI/Extensions/UIView+PublicInit.m
  14. 2 0
      Asteria/ASUI/SimpleBase/ASBaseViewController.h
  15. 62 2
      Asteria/ASUI/SimpleBase/ASBaseViewController.m
  16. 17 0
      Asteria/Fuction/Home/ASHomeViewController.h
  17. 275 0
      Asteria/Fuction/Home/ASHomeViewController.m
  18. 16 0
      Asteria/Fuction/Home/ASProductListViewController.h
  19. 235 0
      Asteria/Fuction/Home/ASProductListViewController.m
  20. 6 0
      Asteria/Fuction/Home/Home.xcassets/Contents.json
  21. 6 0
      Asteria/Fuction/Home/Home.xcassets/home_tips/Contents.json
  22. 22 0
      Asteria/Fuction/Home/Home.xcassets/home_tips/air_tip.imageset/Contents.json
  23. BIN
      Asteria/Fuction/Home/Home.xcassets/home_tips/air_tip.imageset/组 10692@2x.png
  24. BIN
      Asteria/Fuction/Home/Home.xcassets/home_tips/air_tip.imageset/组 10692@3x.png
  25. 22 0
      Asteria/Fuction/Home/Home.xcassets/home_tips/box_tip.imageset/Contents.json
  26. BIN
      Asteria/Fuction/Home/Home.xcassets/home_tips/box_tip.imageset/组 10690@2x.png
  27. BIN
      Asteria/Fuction/Home/Home.xcassets/home_tips/box_tip.imageset/组 10690@3x.png
  28. 22 0
      Asteria/Fuction/Home/Home.xcassets/home_tips/pay_tip.imageset/Contents.json
  29. BIN
      Asteria/Fuction/Home/Home.xcassets/home_tips/pay_tip.imageset/组 10688@2x.png
  30. BIN
      Asteria/Fuction/Home/Home.xcassets/home_tips/pay_tip.imageset/组 10688@3x.png
  31. 22 0
      Asteria/Fuction/Home/Home.xcassets/home_tips/trade_tip.imageset/Contents.json
  32. BIN
      Asteria/Fuction/Home/Home.xcassets/home_tips/trade_tip.imageset/组 8990@2x.png
  33. BIN
      Asteria/Fuction/Home/Home.xcassets/home_tips/trade_tip.imageset/组 8990@3x.png
  34. 6 0
      Asteria/Fuction/Home/Home.xcassets/newin/Contents.json
  35. 22 0
      Asteria/Fuction/Home/Home.xcassets/newin/home_newin_addCart.imageset/Contents.json
  36. BIN
      Asteria/Fuction/Home/Home.xcassets/newin/home_newin_addCart.imageset/btn@2x.png
  37. BIN
      Asteria/Fuction/Home/Home.xcassets/newin/home_newin_addCart.imageset/btn@3x.png
  38. 44 0
      Asteria/Fuction/Home/Home.xcassets/newin/home_newin_priceBg.imageset/Contents.json
  39. BIN
      Asteria/Fuction/Home/Home.xcassets/newin/home_newin_priceBg.imageset/组 10636@2x.png
  40. BIN
      Asteria/Fuction/Home/Home.xcassets/newin/home_newin_priceBg.imageset/组 10636@3x.png
  41. 6 0
      Asteria/Fuction/Home/Home.xcassets/productlist/Contents.json
  42. 22 0
      Asteria/Fuction/Home/Home.xcassets/productlist/productList_menu.imageset/Contents.json
  43. BIN
      Asteria/Fuction/Home/Home.xcassets/productlist/productList_menu.imageset/组 7515@2x.png
  44. BIN
      Asteria/Fuction/Home/Home.xcassets/productlist/productList_menu.imageset/组 7515@3x.png
  45. 24 0
      Asteria/Fuction/Home/Models/ASHomeBannerModel.h
  46. 22 0
      Asteria/Fuction/Home/Models/ASHomeBannerModel.m
  47. 23 0
      Asteria/Fuction/Home/Models/ASHomeCategoryModel.h
  48. 20 0
      Asteria/Fuction/Home/Models/ASHomeCategoryModel.m
  49. 34 0
      Asteria/Fuction/Home/Models/ASHomeMainListModel.h
  50. 124 0
      Asteria/Fuction/Home/Models/ASHomeMainListModel.m
  51. 18 0
      Asteria/Fuction/Home/Target_Home.h
  52. 18 0
      Asteria/Fuction/Home/Target_Home.m
  53. 20 0
      Asteria/Fuction/Home/Views/ASCategaryListCell.h
  54. 99 0
      Asteria/Fuction/Home/Views/ASCategaryListCell.m
  55. 21 0
      Asteria/Fuction/Home/Views/ASHomeActiveView.h
  56. 98 0
      Asteria/Fuction/Home/Views/ASHomeActiveView.m
  57. 21 0
      Asteria/Fuction/Home/Views/ASHomeBannerCell.h
  58. 135 0
      Asteria/Fuction/Home/Views/ASHomeBannerCell.m
  59. 24 0
      Asteria/Fuction/Home/Views/ASHomeBestSellCell.h
  60. 213 0
      Asteria/Fuction/Home/Views/ASHomeBestSellCell.m
  61. 18 0
      Asteria/Fuction/Home/Views/ASHomeFlashDealCell.h
  62. 138 0
      Asteria/Fuction/Home/Views/ASHomeFlashDealCell.m
  63. 20 0
      Asteria/Fuction/Home/Views/ASHomeImgCell.h
  64. 83 0
      Asteria/Fuction/Home/Views/ASHomeImgCell.m
  65. 21 0
      Asteria/Fuction/Home/Views/ASHomeLookingCell.h
  66. 199 0
      Asteria/Fuction/Home/Views/ASHomeLookingCell.m
  67. 22 0
      Asteria/Fuction/Home/Views/ASHomeNewInCellTableViewCell.h
  68. 266 0
      Asteria/Fuction/Home/Views/ASHomeNewInCellTableViewCell.m
  69. 16 0
      Asteria/Fuction/Home/Views/ASHomeTipCell.h
  70. 105 0
      Asteria/Fuction/Home/Views/ASHomeTipCell.m
  71. 21 0
      Asteria/Fuction/Home/Views/productList/ASProductListActiveHeaderView.h
  72. 49 0
      Asteria/Fuction/Home/Views/productList/ASProductListActiveHeaderView.m
  73. 20 0
      Asteria/Fuction/Home/Views/productList/ASProductListMenuHeaderView.h
  74. 93 0
      Asteria/Fuction/Home/Views/productList/ASProductListMenuHeaderView.m
  75. 19 0
      Asteria/Fuction/Home/Views/someViews/ASCategaryCollectCell.h
  76. 60 0
      Asteria/Fuction/Home/Views/someViews/ASCategaryCollectCell.m
  77. 21 0
      Asteria/Fuction/Home/Views/someViews/ASHomeLookingCollCell.h
  78. 73 0
      Asteria/Fuction/Home/Views/someViews/ASHomeLookingCollCell.m
  79. 20 0
      Asteria/Fuction/Home/Views/someViews/ASHomeNewInProductItemView.h
  80. 78 0
      Asteria/Fuction/Home/Views/someViews/ASHomeNewInProductItemView.m
  81. 21 0
      Asteria/Fuction/Home/Views/someViews/ASHomeNewInSubCollectCell.h
  82. 44 0
      Asteria/Fuction/Home/Views/someViews/ASHomeNewInSubCollectCell.m
  83. 19 0
      Asteria/Fuction/Home/Views/someViews/ASHomeTipCollectCell.h
  84. 69 0
      Asteria/Fuction/Home/Views/someViews/ASHomeTipCollectCell.m
  85. 19 0
      Asteria/Fuction/Home/vm/ASProductListViewModel.h
  86. 23 0
      Asteria/Fuction/Home/vm/ASProductListViewModel.m
  87. 1 1
      Asteria/Fuction/UserCenter/views/KWMineMoreProductsCell.h
  88. 2 1
      Asteria/PreFixHeader.h
  89. 1 2
      Asteria/Product/CTMediatoaTargets/CTMediator+ASTargerts.h
  90. 1 3
      Asteria/Product/CTMediatoaTargets/CTMediator+ASTargerts.m
  91. 18 0
      Asteria/Product/CTMediatoaTargets/CTMediator+Home.h
  92. 16 0
      Asteria/Product/CTMediatoaTargets/CTMediator+Home.m
  93. 19 0
      Asteria/Product/CTMediatoaTargets/CTMediator+UserCenter.h
  94. 16 0
      Asteria/Product/CTMediatoaTargets/CTMediator+UserCenter.m
  95. 1 1
      Asteria/Tabber/AS_TabBarViewController.m
  96. 26 0
      Asteria/Third/TextRollIngView/VerScrollTextView.h
  97. 137 0
      Asteria/Third/TextRollIngView/VerScrollTextView.m
  98. 107 0
      Asteria/Third/WMZBanner/WMZBannerConfig.h
  99. 26 0
      Asteria/Third/WMZBanner/WMZBannerControl.h
  100. 0 0
      Asteria/Third/WMZBanner/WMZBannerControl.m

+ 270 - 0
Asteria.xcodeproj/project.pbxproj

@@ -42,6 +42,26 @@
 		814F5D0F2A11B76F003847A9 /* Roboto-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 814F5D022A11B76F003847A9 /* Roboto-Bold.ttf */; };
 		814F5D102A11B76F003847A9 /* Roboto-Thin.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 814F5D032A11B76F003847A9 /* Roboto-Thin.ttf */; };
 		814F5D112A11B76F003847A9 /* Roboto-Black.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 814F5D042A11B76F003847A9 /* Roboto-Black.ttf */; };
+		81601FE62A2DB19300E4A8F1 /* ASHomeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 81601FE52A2DB19300E4A8F1 /* ASHomeViewController.m */; };
+		81601FF62A2DC78300E4A8F1 /* WMZBannerFlowLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 81601FE92A2DC78300E4A8F1 /* WMZBannerFlowLayout.m */; };
+		81601FF72A2DC78300E4A8F1 /* WMZBannerParam.m in Sources */ = {isa = PBXBuildFile; fileRef = 81601FEC2A2DC78300E4A8F1 /* WMZBannerParam.m */; };
+		81601FF82A2DC78300E4A8F1 /* WMZBannerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 81601FEE2A2DC78300E4A8F1 /* WMZBannerView.m */; };
+		81601FF92A2DC78300E4A8F1 /* WMZBannerControl.m in Sources */ = {isa = PBXBuildFile; fileRef = 81601FEF2A2DC78300E4A8F1 /* WMZBannerControl.m */; };
+		81601FFA2A2DC78300E4A8F1 /* WMZBannerFadeLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 81601FF12A2DC78300E4A8F1 /* WMZBannerFadeLayout.m */; };
+		81601FFB2A2DC78300E4A8F1 /* WMZBannerOverLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 81601FF52A2DC78300E4A8F1 /* WMZBannerOverLayout.m */; };
+		81601FFF2A2DC8E700E4A8F1 /* ASHomeBannerCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 81601FFE2A2DC8E700E4A8F1 /* ASHomeBannerCell.m */; };
+		816020042A2DCC0200E4A8F1 /* ASHomeBannerModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 816020022A2DCB5600E4A8F1 /* ASHomeBannerModel.m */; };
+		816020072A2DD4FB00E4A8F1 /* Target_Home.m in Sources */ = {isa = PBXBuildFile; fileRef = 816020062A2DD4FB00E4A8F1 /* Target_Home.m */; };
+		8160200A2A2DD59E00E4A8F1 /* CTMediator+Home.m in Sources */ = {isa = PBXBuildFile; fileRef = 816020092A2DD59E00E4A8F1 /* CTMediator+Home.m */; };
+		8160200D2A2DD5C000E4A8F1 /* CTMediator+UserCenter.m in Sources */ = {isa = PBXBuildFile; fileRef = 8160200C2A2DD5C000E4A8F1 /* CTMediator+UserCenter.m */; };
+		816020102A2EE55F00E4A8F1 /* ASCategaryListCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 8160200F2A2EE55F00E4A8F1 /* ASCategaryListCell.m */; };
+		816020132A2EE5A200E4A8F1 /* ASCategaryCollectCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 816020122A2EE5A200E4A8F1 /* ASCategaryCollectCell.m */; };
+		816020152A2F065700E4A8F1 /* Home.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 816020142A2F065700E4A8F1 /* Home.xcassets */; };
+		816020182A2F070B00E4A8F1 /* ASHomeCategoryModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 816020172A2F070B00E4A8F1 /* ASHomeCategoryModel.m */; };
+		8160201C2A2F101C00E4A8F1 /* ASHomeTipCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 8160201B2A2F101C00E4A8F1 /* ASHomeTipCell.m */; };
+		8160201F2A2F11AB00E4A8F1 /* ASHomeTipCollectCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 8160201E2A2F11AB00E4A8F1 /* ASHomeTipCollectCell.m */; };
+		816020222A2F1C6A00E4A8F1 /* ASHomeBestSellCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 816020212A2F1C6A00E4A8F1 /* ASHomeBestSellCell.m */; };
+		816020252A2F1C9E00E4A8F1 /* ASHomeMainListModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 816020242A2F1C9E00E4A8F1 /* ASHomeMainListModel.m */; };
 		8172449F29F3B2ED005FA9C9 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 8172449E29F3B2ED005FA9C9 /* AppDelegate.m */; };
 		817244AA29F3B2EE005FA9C9 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 817244A929F3B2EE005FA9C9 /* Assets.xcassets */; };
 		817244AD29F3B2EE005FA9C9 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 817244AB29F3B2EE005FA9C9 /* LaunchScreen.storyboard */; };
@@ -51,6 +71,12 @@
 		81932E2B29F7539B007C37AF /* UIColor+AS.m in Sources */ = {isa = PBXBuildFile; fileRef = 81932E2A29F7539B007C37AF /* UIColor+AS.m */; };
 		819900222A020A6F006FE68C /* LYTools.m in Sources */ = {isa = PBXBuildFile; fileRef = 819900212A020A6F006FE68C /* LYTools.m */; };
 		81BEA6832A2D7CF3009D36C4 /* UITableView+ASBase.m in Sources */ = {isa = PBXBuildFile; fileRef = 81BEA6822A2D7CF3009D36C4 /* UITableView+ASBase.m */; };
+		81C3265F2A36B284002EF442 /* ASProductListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 81C3265E2A36B284002EF442 /* ASProductListViewController.m */; };
+		81C326622A36B33B002EF442 /* ASHomeActiveView.m in Sources */ = {isa = PBXBuildFile; fileRef = 81C326612A36B33B002EF442 /* ASHomeActiveView.m */; };
+		81C326662A36B794002EF442 /* VerScrollTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 81C326642A36B794002EF442 /* VerScrollTextView.m */; };
+		81C3266A2A36F035002EF442 /* ASProductListViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 81C326692A36F035002EF442 /* ASProductListViewModel.m */; };
+		81C3266E2A36FF2B002EF442 /* ASProductListActiveHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 81C3266D2A36FF2B002EF442 /* ASProductListActiveHeaderView.m */; };
+		81C326712A37020A002EF442 /* ASProductListMenuHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 81C326702A37020A002EF442 /* ASProductListMenuHeaderView.m */; };
 		81C3B44429F6612800D79294 /* ASBaseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 81C3B44329F6612800D79294 /* ASBaseViewController.m */; };
 		81C3B44A29F6661500D79294 /* ASBaseNavController.m in Sources */ = {isa = PBXBuildFile; fileRef = 81C3B44929F6661500D79294 /* ASBaseNavController.m */; };
 		81C3B45529F66C1700D79294 /* UIView+PublicInit.m in Sources */ = {isa = PBXBuildFile; fileRef = 81C3B45429F66C1700D79294 /* UIView+PublicInit.m */; };
@@ -59,6 +85,13 @@
 		81E257F62A12259B004EEF71 /* UserCenter.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 81E257F52A12259B004EEF71 /* UserCenter.xcassets */; };
 		81E257F92A122AC6004EEF71 /* ASUI.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 81E257F82A122AC6004EEF71 /* ASUI.xcassets */; };
 		81E257FD2A12340E004EEF71 /* ASEnterItemV.m in Sources */ = {isa = PBXBuildFile; fileRef = 81E257FC2A12340E004EEF71 /* ASEnterItemV.m */; };
+		81EC47662A33035D00516573 /* ASHomeNewInCellTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 81EC47652A33035D00516573 /* ASHomeNewInCellTableViewCell.m */; };
+		81EC47692A33073100516573 /* ASHomeNewInProductItemView.m in Sources */ = {isa = PBXBuildFile; fileRef = 81EC47682A33073100516573 /* ASHomeNewInProductItemView.m */; };
+		81EC476C2A33131100516573 /* ASHomeNewInSubCollectCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 81EC476B2A33131100516573 /* ASHomeNewInSubCollectCell.m */; };
+		81EC476F2A33F82C00516573 /* ASHomeImgCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 81EC476E2A33F82C00516573 /* ASHomeImgCell.m */; };
+		81EC47722A3402CA00516573 /* ASHomeFlashDealCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 81EC47712A3402CA00516573 /* ASHomeFlashDealCell.m */; };
+		81EC47752A3423FC00516573 /* ASHomeLookingCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 81EC47742A3423FC00516573 /* ASHomeLookingCell.m */; };
+		81EC47782A3426CE00516573 /* ASHomeLookingCollCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 81EC47772A3426CE00516573 /* ASHomeLookingCollCell.m */; };
 		8C24ECE114420CDEE7B9B22B /* Pods_Asteria.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 54DCE8001991D89B696E7D44 /* Pods_Asteria.framework */; };
 		9A1247942A1B082300126226 /* Fuction_Tool.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A1247932A1B082300126226 /* Fuction_Tool.m */; };
 		9A1247972A1B0A2800126226 /* AS_ForgotC.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A1247962A1B0A2800126226 /* AS_ForgotC.m */; };
@@ -210,6 +243,46 @@
 		814F5D022A11B76F003847A9 /* Roboto-Bold.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Roboto-Bold.ttf"; sourceTree = "<group>"; };
 		814F5D032A11B76F003847A9 /* Roboto-Thin.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Roboto-Thin.ttf"; sourceTree = "<group>"; };
 		814F5D042A11B76F003847A9 /* Roboto-Black.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Roboto-Black.ttf"; sourceTree = "<group>"; };
+		81601FE42A2DB19300E4A8F1 /* ASHomeViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ASHomeViewController.h; sourceTree = "<group>"; };
+		81601FE52A2DB19300E4A8F1 /* ASHomeViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ASHomeViewController.m; sourceTree = "<group>"; };
+		81601FE92A2DC78300E4A8F1 /* WMZBannerFlowLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WMZBannerFlowLayout.m; sourceTree = "<group>"; };
+		81601FEA2A2DC78300E4A8F1 /* WMZBannerControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMZBannerControl.h; sourceTree = "<group>"; };
+		81601FEB2A2DC78300E4A8F1 /* WMZBannerFadeLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMZBannerFadeLayout.h; sourceTree = "<group>"; };
+		81601FEC2A2DC78300E4A8F1 /* WMZBannerParam.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WMZBannerParam.m; sourceTree = "<group>"; };
+		81601FED2A2DC78300E4A8F1 /* WMZBannerOverLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMZBannerOverLayout.h; sourceTree = "<group>"; };
+		81601FEE2A2DC78300E4A8F1 /* WMZBannerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WMZBannerView.m; sourceTree = "<group>"; };
+		81601FEF2A2DC78300E4A8F1 /* WMZBannerControl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WMZBannerControl.m; sourceTree = "<group>"; };
+		81601FF02A2DC78300E4A8F1 /* WMZBannerFlowLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMZBannerFlowLayout.h; sourceTree = "<group>"; };
+		81601FF12A2DC78300E4A8F1 /* WMZBannerFadeLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WMZBannerFadeLayout.m; sourceTree = "<group>"; };
+		81601FF22A2DC78300E4A8F1 /* WMZBannerConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMZBannerConfig.h; sourceTree = "<group>"; };
+		81601FF32A2DC78300E4A8F1 /* WMZBannerParam.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMZBannerParam.h; sourceTree = "<group>"; };
+		81601FF42A2DC78300E4A8F1 /* WMZBannerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMZBannerView.h; sourceTree = "<group>"; };
+		81601FF52A2DC78300E4A8F1 /* WMZBannerOverLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WMZBannerOverLayout.m; sourceTree = "<group>"; };
+		81601FFD2A2DC8E700E4A8F1 /* ASHomeBannerCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ASHomeBannerCell.h; sourceTree = "<group>"; };
+		81601FFE2A2DC8E700E4A8F1 /* ASHomeBannerCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ASHomeBannerCell.m; sourceTree = "<group>"; };
+		816020012A2DCB5600E4A8F1 /* ASHomeBannerModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ASHomeBannerModel.h; sourceTree = "<group>"; };
+		816020022A2DCB5600E4A8F1 /* ASHomeBannerModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ASHomeBannerModel.m; sourceTree = "<group>"; };
+		816020052A2DD4FB00E4A8F1 /* Target_Home.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Target_Home.h; sourceTree = "<group>"; };
+		816020062A2DD4FB00E4A8F1 /* Target_Home.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Target_Home.m; sourceTree = "<group>"; };
+		816020082A2DD59E00E4A8F1 /* CTMediator+Home.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "CTMediator+Home.h"; sourceTree = "<group>"; };
+		816020092A2DD59E00E4A8F1 /* CTMediator+Home.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "CTMediator+Home.m"; sourceTree = "<group>"; };
+		8160200B2A2DD5C000E4A8F1 /* CTMediator+UserCenter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "CTMediator+UserCenter.h"; sourceTree = "<group>"; };
+		8160200C2A2DD5C000E4A8F1 /* CTMediator+UserCenter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "CTMediator+UserCenter.m"; sourceTree = "<group>"; };
+		8160200E2A2EE55F00E4A8F1 /* ASCategaryListCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ASCategaryListCell.h; sourceTree = "<group>"; };
+		8160200F2A2EE55F00E4A8F1 /* ASCategaryListCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ASCategaryListCell.m; sourceTree = "<group>"; };
+		816020112A2EE5A200E4A8F1 /* ASCategaryCollectCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ASCategaryCollectCell.h; sourceTree = "<group>"; };
+		816020122A2EE5A200E4A8F1 /* ASCategaryCollectCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ASCategaryCollectCell.m; sourceTree = "<group>"; };
+		816020142A2F065700E4A8F1 /* Home.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Home.xcassets; sourceTree = "<group>"; };
+		816020162A2F070B00E4A8F1 /* ASHomeCategoryModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ASHomeCategoryModel.h; sourceTree = "<group>"; };
+		816020172A2F070B00E4A8F1 /* ASHomeCategoryModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ASHomeCategoryModel.m; sourceTree = "<group>"; };
+		8160201A2A2F101C00E4A8F1 /* ASHomeTipCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ASHomeTipCell.h; sourceTree = "<group>"; };
+		8160201B2A2F101C00E4A8F1 /* ASHomeTipCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ASHomeTipCell.m; sourceTree = "<group>"; };
+		8160201D2A2F11AB00E4A8F1 /* ASHomeTipCollectCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ASHomeTipCollectCell.h; sourceTree = "<group>"; };
+		8160201E2A2F11AB00E4A8F1 /* ASHomeTipCollectCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ASHomeTipCollectCell.m; sourceTree = "<group>"; };
+		816020202A2F1C6A00E4A8F1 /* ASHomeBestSellCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ASHomeBestSellCell.h; sourceTree = "<group>"; };
+		816020212A2F1C6A00E4A8F1 /* ASHomeBestSellCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ASHomeBestSellCell.m; sourceTree = "<group>"; };
+		816020232A2F1C9E00E4A8F1 /* ASHomeMainListModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ASHomeMainListModel.h; sourceTree = "<group>"; };
+		816020242A2F1C9E00E4A8F1 /* ASHomeMainListModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ASHomeMainListModel.m; sourceTree = "<group>"; };
 		8172449A29F3B2ED005FA9C9 /* Asteria.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Asteria.app; sourceTree = BUILT_PRODUCTS_DIR; };
 		8172449D29F3B2ED005FA9C9 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
 		8172449E29F3B2ED005FA9C9 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
@@ -228,6 +301,18 @@
 		819900212A020A6F006FE68C /* LYTools.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LYTools.m; sourceTree = "<group>"; };
 		81BEA6812A2D7CF3009D36C4 /* UITableView+ASBase.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UITableView+ASBase.h"; sourceTree = "<group>"; };
 		81BEA6822A2D7CF3009D36C4 /* UITableView+ASBase.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UITableView+ASBase.m"; sourceTree = "<group>"; };
+		81C3265D2A36B284002EF442 /* ASProductListViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ASProductListViewController.h; sourceTree = "<group>"; };
+		81C3265E2A36B284002EF442 /* ASProductListViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ASProductListViewController.m; sourceTree = "<group>"; };
+		81C326602A36B33B002EF442 /* ASHomeActiveView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ASHomeActiveView.h; sourceTree = "<group>"; };
+		81C326612A36B33B002EF442 /* ASHomeActiveView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ASHomeActiveView.m; sourceTree = "<group>"; };
+		81C326642A36B794002EF442 /* VerScrollTextView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VerScrollTextView.m; sourceTree = "<group>"; };
+		81C326652A36B794002EF442 /* VerScrollTextView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VerScrollTextView.h; sourceTree = "<group>"; };
+		81C326682A36F035002EF442 /* ASProductListViewModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ASProductListViewModel.h; sourceTree = "<group>"; };
+		81C326692A36F035002EF442 /* ASProductListViewModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ASProductListViewModel.m; sourceTree = "<group>"; };
+		81C3266C2A36FF2B002EF442 /* ASProductListActiveHeaderView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ASProductListActiveHeaderView.h; sourceTree = "<group>"; };
+		81C3266D2A36FF2B002EF442 /* ASProductListActiveHeaderView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ASProductListActiveHeaderView.m; sourceTree = "<group>"; };
+		81C3266F2A37020A002EF442 /* ASProductListMenuHeaderView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ASProductListMenuHeaderView.h; sourceTree = "<group>"; };
+		81C326702A37020A002EF442 /* ASProductListMenuHeaderView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ASProductListMenuHeaderView.m; sourceTree = "<group>"; };
 		81C3B44229F6612800D79294 /* ASBaseViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ASBaseViewController.h; sourceTree = "<group>"; };
 		81C3B44329F6612800D79294 /* ASBaseViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ASBaseViewController.m; sourceTree = "<group>"; };
 		81C3B44829F6661500D79294 /* ASBaseNavController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ASBaseNavController.h; sourceTree = "<group>"; };
@@ -244,6 +329,20 @@
 		81E257F82A122AC6004EEF71 /* ASUI.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = ASUI.xcassets; sourceTree = "<group>"; };
 		81E257FB2A12340E004EEF71 /* ASEnterItemV.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ASEnterItemV.h; sourceTree = "<group>"; };
 		81E257FC2A12340E004EEF71 /* ASEnterItemV.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ASEnterItemV.m; sourceTree = "<group>"; };
+		81EC47642A33035D00516573 /* ASHomeNewInCellTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ASHomeNewInCellTableViewCell.h; sourceTree = "<group>"; };
+		81EC47652A33035D00516573 /* ASHomeNewInCellTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ASHomeNewInCellTableViewCell.m; sourceTree = "<group>"; };
+		81EC47672A33073100516573 /* ASHomeNewInProductItemView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ASHomeNewInProductItemView.h; sourceTree = "<group>"; };
+		81EC47682A33073100516573 /* ASHomeNewInProductItemView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ASHomeNewInProductItemView.m; sourceTree = "<group>"; };
+		81EC476A2A33131100516573 /* ASHomeNewInSubCollectCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ASHomeNewInSubCollectCell.h; sourceTree = "<group>"; };
+		81EC476B2A33131100516573 /* ASHomeNewInSubCollectCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ASHomeNewInSubCollectCell.m; sourceTree = "<group>"; };
+		81EC476D2A33F82C00516573 /* ASHomeImgCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ASHomeImgCell.h; sourceTree = "<group>"; };
+		81EC476E2A33F82C00516573 /* ASHomeImgCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ASHomeImgCell.m; sourceTree = "<group>"; };
+		81EC47702A3402CA00516573 /* ASHomeFlashDealCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ASHomeFlashDealCell.h; sourceTree = "<group>"; };
+		81EC47712A3402CA00516573 /* ASHomeFlashDealCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ASHomeFlashDealCell.m; sourceTree = "<group>"; };
+		81EC47732A3423FC00516573 /* ASHomeLookingCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ASHomeLookingCell.h; sourceTree = "<group>"; };
+		81EC47742A3423FC00516573 /* ASHomeLookingCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ASHomeLookingCell.m; sourceTree = "<group>"; };
+		81EC47762A3426CD00516573 /* ASHomeLookingCollCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ASHomeLookingCollCell.h; sourceTree = "<group>"; };
+		81EC47772A3426CE00516573 /* ASHomeLookingCollCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ASHomeLookingCollCell.m; sourceTree = "<group>"; };
 		9A1247922A1B082300126226 /* Fuction_Tool.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Fuction_Tool.h; sourceTree = "<group>"; };
 		9A1247932A1B082300126226 /* Fuction_Tool.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Fuction_Tool.m; sourceTree = "<group>"; };
 		9A1247952A1B0A2800126226 /* AS_ForgotC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AS_ForgotC.h; sourceTree = "<group>"; };
@@ -532,6 +631,109 @@
 			path = Roboto;
 			sourceTree = "<group>";
 		};
+		81601FE32A2D938B00E4A8F1 /* Home */ = {
+			isa = PBXGroup;
+			children = (
+				81C326672A36F019002EF442 /* vm */,
+				816020142A2F065700E4A8F1 /* Home.xcassets */,
+				81601FE42A2DB19300E4A8F1 /* ASHomeViewController.h */,
+				81601FE52A2DB19300E4A8F1 /* ASHomeViewController.m */,
+				81C3265D2A36B284002EF442 /* ASProductListViewController.h */,
+				81C3265E2A36B284002EF442 /* ASProductListViewController.m */,
+				816020052A2DD4FB00E4A8F1 /* Target_Home.h */,
+				816020062A2DD4FB00E4A8F1 /* Target_Home.m */,
+				816020002A2DCB3B00E4A8F1 /* Models */,
+				81601FFC2A2DC8C400E4A8F1 /* Views */,
+			);
+			path = Home;
+			sourceTree = "<group>";
+		};
+		81601FE72A2DC76C00E4A8F1 /* Third */ = {
+			isa = PBXGroup;
+			children = (
+				81C326632A36B6D9002EF442 /* TextRollIngView */,
+				81601FE82A2DC78300E4A8F1 /* WMZBanner */,
+			);
+			path = Third;
+			sourceTree = "<group>";
+		};
+		81601FE82A2DC78300E4A8F1 /* WMZBanner */ = {
+			isa = PBXGroup;
+			children = (
+				81601FE92A2DC78300E4A8F1 /* WMZBannerFlowLayout.m */,
+				81601FEA2A2DC78300E4A8F1 /* WMZBannerControl.h */,
+				81601FEB2A2DC78300E4A8F1 /* WMZBannerFadeLayout.h */,
+				81601FEC2A2DC78300E4A8F1 /* WMZBannerParam.m */,
+				81601FED2A2DC78300E4A8F1 /* WMZBannerOverLayout.h */,
+				81601FEE2A2DC78300E4A8F1 /* WMZBannerView.m */,
+				81601FEF2A2DC78300E4A8F1 /* WMZBannerControl.m */,
+				81601FF02A2DC78300E4A8F1 /* WMZBannerFlowLayout.h */,
+				81601FF12A2DC78300E4A8F1 /* WMZBannerFadeLayout.m */,
+				81601FF22A2DC78300E4A8F1 /* WMZBannerConfig.h */,
+				81601FF32A2DC78300E4A8F1 /* WMZBannerParam.h */,
+				81601FF42A2DC78300E4A8F1 /* WMZBannerView.h */,
+				81601FF52A2DC78300E4A8F1 /* WMZBannerOverLayout.m */,
+			);
+			path = WMZBanner;
+			sourceTree = "<group>";
+		};
+		81601FFC2A2DC8C400E4A8F1 /* Views */ = {
+			isa = PBXGroup;
+			children = (
+				81C3266B2A36FEEC002EF442 /* productList */,
+				81601FFD2A2DC8E700E4A8F1 /* ASHomeBannerCell.h */,
+				81601FFE2A2DC8E700E4A8F1 /* ASHomeBannerCell.m */,
+				8160200E2A2EE55F00E4A8F1 /* ASCategaryListCell.h */,
+				8160200F2A2EE55F00E4A8F1 /* ASCategaryListCell.m */,
+				8160201A2A2F101C00E4A8F1 /* ASHomeTipCell.h */,
+				8160201B2A2F101C00E4A8F1 /* ASHomeTipCell.m */,
+				816020202A2F1C6A00E4A8F1 /* ASHomeBestSellCell.h */,
+				816020212A2F1C6A00E4A8F1 /* ASHomeBestSellCell.m */,
+				81EC47642A33035D00516573 /* ASHomeNewInCellTableViewCell.h */,
+				81EC47652A33035D00516573 /* ASHomeNewInCellTableViewCell.m */,
+				81EC476D2A33F82C00516573 /* ASHomeImgCell.h */,
+				81EC476E2A33F82C00516573 /* ASHomeImgCell.m */,
+				81EC47702A3402CA00516573 /* ASHomeFlashDealCell.h */,
+				81EC47712A3402CA00516573 /* ASHomeFlashDealCell.m */,
+				81EC47732A3423FC00516573 /* ASHomeLookingCell.h */,
+				81EC47742A3423FC00516573 /* ASHomeLookingCell.m */,
+				816020192A2F0C8400E4A8F1 /* someViews */,
+				81C326602A36B33B002EF442 /* ASHomeActiveView.h */,
+				81C326612A36B33B002EF442 /* ASHomeActiveView.m */,
+			);
+			path = Views;
+			sourceTree = "<group>";
+		};
+		816020002A2DCB3B00E4A8F1 /* Models */ = {
+			isa = PBXGroup;
+			children = (
+				816020012A2DCB5600E4A8F1 /* ASHomeBannerModel.h */,
+				816020022A2DCB5600E4A8F1 /* ASHomeBannerModel.m */,
+				816020162A2F070B00E4A8F1 /* ASHomeCategoryModel.h */,
+				816020172A2F070B00E4A8F1 /* ASHomeCategoryModel.m */,
+				816020232A2F1C9E00E4A8F1 /* ASHomeMainListModel.h */,
+				816020242A2F1C9E00E4A8F1 /* ASHomeMainListModel.m */,
+			);
+			path = Models;
+			sourceTree = "<group>";
+		};
+		816020192A2F0C8400E4A8F1 /* someViews */ = {
+			isa = PBXGroup;
+			children = (
+				816020112A2EE5A200E4A8F1 /* ASCategaryCollectCell.h */,
+				816020122A2EE5A200E4A8F1 /* ASCategaryCollectCell.m */,
+				8160201D2A2F11AB00E4A8F1 /* ASHomeTipCollectCell.h */,
+				8160201E2A2F11AB00E4A8F1 /* ASHomeTipCollectCell.m */,
+				81EC47672A33073100516573 /* ASHomeNewInProductItemView.h */,
+				81EC47682A33073100516573 /* ASHomeNewInProductItemView.m */,
+				81EC476A2A33131100516573 /* ASHomeNewInSubCollectCell.h */,
+				81EC476B2A33131100516573 /* ASHomeNewInSubCollectCell.m */,
+				81EC47762A3426CD00516573 /* ASHomeLookingCollCell.h */,
+				81EC47772A3426CE00516573 /* ASHomeLookingCollCell.m */,
+			);
+			path = someViews;
+			sourceTree = "<group>";
+		};
 		8172449129F3B2EC005FA9C9 = {
 			isa = PBXGroup;
 			children = (
@@ -555,6 +757,7 @@
 		8172449C29F3B2ED005FA9C9 /* Asteria */ = {
 			isa = PBXGroup;
 			children = (
+				81601FE72A2DC76C00E4A8F1 /* Third */,
 				9A2646BA2A187B6100CBFBDC /* Product */,
 				9A2027F32A137B6A00FF4DAF /* Asteria.entitlements */,
 				81C3B44F29F6699900D79294 /* PreFixHeader.h */,
@@ -593,6 +796,35 @@
 			path = Tools;
 			sourceTree = "<group>";
 		};
+		81C326632A36B6D9002EF442 /* TextRollIngView */ = {
+			isa = PBXGroup;
+			children = (
+				81C326652A36B794002EF442 /* VerScrollTextView.h */,
+				81C326642A36B794002EF442 /* VerScrollTextView.m */,
+			);
+			path = TextRollIngView;
+			sourceTree = "<group>";
+		};
+		81C326672A36F019002EF442 /* vm */ = {
+			isa = PBXGroup;
+			children = (
+				81C326682A36F035002EF442 /* ASProductListViewModel.h */,
+				81C326692A36F035002EF442 /* ASProductListViewModel.m */,
+			);
+			path = vm;
+			sourceTree = "<group>";
+		};
+		81C3266B2A36FEEC002EF442 /* productList */ = {
+			isa = PBXGroup;
+			children = (
+				81C3266C2A36FF2B002EF442 /* ASProductListActiveHeaderView.h */,
+				81C3266D2A36FF2B002EF442 /* ASProductListActiveHeaderView.m */,
+				81C3266F2A37020A002EF442 /* ASProductListMenuHeaderView.h */,
+				81C326702A37020A002EF442 /* ASProductListMenuHeaderView.m */,
+			);
+			path = productList;
+			sourceTree = "<group>";
+		};
 		81C3B44B29F6691300D79294 /* Extensions */ = {
 			isa = PBXGroup;
 			children = (
@@ -782,6 +1014,10 @@
 			children = (
 				9ACBEC1F2A14585300A8F97A /* CTMediator+ASTargerts.h */,
 				9ACBEC202A14585300A8F97A /* CTMediator+ASTargerts.m */,
+				816020082A2DD59E00E4A8F1 /* CTMediator+Home.h */,
+				816020092A2DD59E00E4A8F1 /* CTMediator+Home.m */,
+				8160200B2A2DD5C000E4A8F1 /* CTMediator+UserCenter.h */,
+				8160200C2A2DD5C000E4A8F1 /* CTMediator+UserCenter.m */,
 			);
 			path = CTMediatoaTargets;
 			sourceTree = "<group>";
@@ -982,6 +1218,7 @@
 		9AD364CC2A05EBE800452C7A /* Fuction */ = {
 			isa = PBXGroup;
 			children = (
+				81601FE32A2D938B00E4A8F1 /* Home */,
 				9A5C64522A11E58F00CBB185 /* Login */,
 				81D484DD2A0F40510075DC43 /* UserCenter */,
 				9A337E4F2A04FA0A00D058A5 /* Goods */,
@@ -1135,6 +1372,7 @@
 			buildActionMask = 2147483647;
 			files = (
 				814F5D102A11B76F003847A9 /* Roboto-Thin.ttf in Resources */,
+				816020152A2F065700E4A8F1 /* Home.xcassets in Resources */,
 				814F5D052A11B76F003847A9 /* Roboto-Medium.ttf in Resources */,
 				814F5D0C2A11B76F003847A9 /* Roboto-Italic.ttf in Resources */,
 				814F5D0F2A11B76F003847A9 /* Roboto-Bold.ttf in Resources */,
@@ -1272,29 +1510,47 @@
 			buildActionMask = 2147483647;
 			files = (
 				81354BEE2A287AB50082C93A /* KWMineHomeOrderListCell.m in Sources */,
+				81601FE62A2DB19300E4A8F1 /* ASHomeViewController.m in Sources */,
 				81354BF22A287B120082C93A /* KWMineHomeOrderModel.m in Sources */,
 				9AD345F82A08D60F005CA070 /* ZFPlayerGestureControl.m in Sources */,
+				81C326712A37020A002EF442 /* ASProductListMenuHeaderView.m in Sources */,
+				81601FF92A2DC78300E4A8F1 /* WMZBannerControl.m in Sources */,
 				9AD345FA2A08D60F005CA070 /* ZFLandscapeWindow.m in Sources */,
 				81E257EE2A120756004EEF71 /* ASUserCenterTopView.m in Sources */,
+				81C326622A36B33B002EF442 /* ASHomeActiveView.m in Sources */,
 				9AD346042A08D60F005CA070 /* ZFKVOController.m in Sources */,
+				81C326662A36B794002EF442 /* VerScrollTextView.m in Sources */,
 				9A8DD8C82A0B93F700573324 /* GoodsDetailsVM.m in Sources */,
 				9AD346132A08D60F005CA070 /* ZFLoadingView.m in Sources */,
 				9ACBEC212A14585300A8F97A /* CTMediator+ASTargerts.m in Sources */,
 				8134C1AD2A13094F006EB0EC /* Target_userCenter.m in Sources */,
 				81E257F32A120975004EEF71 /* ASUserBaseInfoView.m in Sources */,
 				8172449F29F3B2ED005FA9C9 /* AppDelegate.m in Sources */,
+				816020222A2F1C6A00E4A8F1 /* ASHomeBestSellCell.m in Sources */,
+				81C3266E2A36FF2B002EF442 /* ASProductListActiveHeaderView.m in Sources */,
+				81EC47722A3402CA00516573 /* ASHomeFlashDealCell.m in Sources */,
+				81601FF82A2DC78300E4A8F1 /* WMZBannerView.m in Sources */,
 				817244B029F3B2EE005FA9C9 /* main.m in Sources */,
+				816020252A2F1C9E00E4A8F1 /* ASHomeMainListModel.m in Sources */,
 				9AD346102A08D60F005CA070 /* ZFSliderView.m in Sources */,
 				9A337E4E2A04F46600D058A5 /* AViewController.m in Sources */,
+				81601FFA2A2DC78300E4A8F1 /* WMZBannerFadeLayout.m in Sources */,
+				816020182A2F070B00E4A8F1 /* ASHomeCategoryModel.m in Sources */,
 				8134C1B72A1359E6006EB0EC /* ASSignDayView.m in Sources */,
+				81601FF72A2DC78300E4A8F1 /* WMZBannerParam.m in Sources */,
 				9AD346112A08D60F005CA070 /* ZFPlayerControlView.m in Sources */,
 				9AD345B12A08D5ED005CA070 /* GoodsBannerCollectionViewCell.m in Sources */,
 				9AD345B22A08D5ED005CA070 /* GoodsVideoCollectionViewCell.m in Sources */,
 				814F5CEF2A11B1F2003847A9 /* ASUserCenterViewController.m in Sources */,
+				8160201F2A2F11AB00E4A8F1 /* ASHomeTipCollectCell.m in Sources */,
+				816020042A2DCC0200E4A8F1 /* ASHomeBannerModel.m in Sources */,
 				819900222A020A6F006FE68C /* LYTools.m in Sources */,
+				816020072A2DD4FB00E4A8F1 /* Target_Home.m in Sources */,
+				816020132A2EE5A200E4A8F1 /* ASCategaryCollectCell.m in Sources */,
 				9AD346012A08D60F005CA070 /* ZFFloatView.m in Sources */,
 				9AD345F92A08D60F005CA070 /* ZFPlayerController.m in Sources */,
 				9AD345AC2A08D59A005CA070 /* WKM_goodsBanner.m in Sources */,
+				81EC476F2A33F82C00516573 /* ASHomeImgCell.m in Sources */,
 				81354BE72A28786C0082C93A /* ASProductBaseModel.m in Sources */,
 				9A8DD8C52A0B8F1700573324 /* As_GoodsSizeC.m in Sources */,
 				8134C1BD2A1372D5006EB0EC /* ASUserCenterTableHeadView.m in Sources */,
@@ -1311,22 +1567,29 @@
 				9AD346022A08D60F005CA070 /* ZFPlayerView.m in Sources */,
 				81BEA6832A2D7CF3009D36C4 /* UITableView+ASBase.m in Sources */,
 				81C3B44429F6612800D79294 /* ASBaseViewController.m in Sources */,
+				81C3266A2A36F035002EF442 /* ASProductListViewModel.m in Sources */,
 				9A1247942A1B082300126226 /* Fuction_Tool.m in Sources */,
+				81601FFF2A2DC8E700E4A8F1 /* ASHomeBannerCell.m in Sources */,
 				9AD6A5442A1218E8001DE3D9 /* PassWordSecureBtnV.m in Sources */,
 				81C3B44A29F6661500D79294 /* ASBaseNavController.m in Sources */,
 				9AD3460C2A08D60F005CA070 /* ZFVolumeBrightnessView.m in Sources */,
 				9AD346072A08D60F005CA070 /* UIViewController+ZFPlayerRotation.m in Sources */,
+				8160200D2A2DD5C000E4A8F1 /* CTMediator+UserCenter.m in Sources */,
 				9ACBEC2B2A14CCA300A8F97A /* ThirdPartService.m in Sources */,
+				81C3265F2A36B284002EF442 /* ASProductListViewController.m in Sources */,
 				9AD346142A08D60F005CA070 /* ZFSpeedLoadingView.m in Sources */,
 				9AD346062A08D60F005CA070 /* ZFReachabilityManager.m in Sources */,
 				9AD345FE2A08D60F005CA070 /* UIScrollView+ZFPlayer.m in Sources */,
 				9A65DE512A132FB700BB1269 /* LoginThirdAuthV.m in Sources */,
 				9A788C442A08A663003E0025 /* Target_Goods.m in Sources */,
+				81EC47692A33073100516573 /* ASHomeNewInProductItemView.m in Sources */,
 				9AD3461D2A08D6F0005CA070 /* GoodsInformationM.m in Sources */,
 				9A1247972A1B0A2800126226 /* AS_ForgotC.m in Sources */,
+				81EC476C2A33131100516573 /* ASHomeNewInSubCollectCell.m in Sources */,
 				81354BF52A287BED0082C93A /* KWMineHomeOrderSubView.m in Sources */,
 				9AD345A82A08D571005CA070 /* TYCyclePagerView.m in Sources */,
 				9AD346202A08E30E005CA070 /* SelectVCollectionViewCell.m in Sources */,
+				81601FFB2A2DC78300E4A8F1 /* WMZBannerOverLayout.m in Sources */,
 				81354C002A2899CB0082C93A /* KWMineMoreProductModel.m in Sources */,
 				8134C1BA2A1372A7006EB0EC /* ASUserCenterEnterItemV.m in Sources */,
 				9AD3460A2A08D60F005CA070 /* ZFUtilities.m in Sources */,
@@ -1338,24 +1601,31 @@
 				9AD346092A08D60F005CA070 /* ZFAVPlayerManager.m in Sources */,
 				8134C1B42A1358F3006EB0EC /* ASSginView.m in Sources */,
 				9AD346122A08D60F005CA070 /* ZFSmallFloatControlView.m in Sources */,
+				81EC47752A3423FC00516573 /* ASHomeLookingCell.m in Sources */,
 				9AD3460E2A08D60F005CA070 /* ZFNetworkSpeedMonitor.m in Sources */,
 				9AD346052A08D60F005CA070 /* ZFLandscapeViewController.m in Sources */,
+				81601FF62A2DC78300E4A8F1 /* WMZBannerFlowLayout.m in Sources */,
 				814F5CF52A11B37E003847A9 /* ASUserAvaterView.m in Sources */,
 				81354C0B2A289C350082C93A /* KWTimeEndView.m in Sources */,
 				9AD346032A08D60F005CA070 /* ZFPortraitViewController.m in Sources */,
 				81354BED2A287AB50082C93A /* KWMineHomeOrderHeadView.m in Sources */,
 				9AD3460D2A08D60F005CA070 /* ZFLandScapeControlView.m in Sources */,
 				9AD364C62A05E73E00452C7A /* AS_GoodsDetailsC.m in Sources */,
+				816020102A2EE55F00E4A8F1 /* ASCategaryListCell.m in Sources */,
 				9AD3460B2A08D60F005CA070 /* UIView+ZFFrame.m in Sources */,
 				81E257FD2A12340E004EEF71 /* ASEnterItemV.m in Sources */,
 				81C3B45529F66C1700D79294 /* UIView+PublicInit.m in Sources */,
 				8134C1C52A145172006EB0EC /* ASProductItemView.m in Sources */,
 				9A5C64582A12064300CBB185 /* AS_LoginC.m in Sources */,
 				9AD345FD2A08D60F005CA070 /* ZFPersentInteractiveTransition.m in Sources */,
+				8160200A2A2DD59E00E4A8F1 /* CTMediator+Home.m in Sources */,
 				9AD345FC2A08D60F005CA070 /* ZFPlayerLogManager.m in Sources */,
 				81354C0E2A297D6A0082C93A /* HomeFlashDealSubCollectCell.m in Sources */,
 				81354BFD2A28998B0082C93A /* KWMineMoreProductsCell.m in Sources */,
 				9ACBEC252A14707400A8F97A /* AS_SignUpC.m in Sources */,
+				81EC47782A3426CE00516573 /* ASHomeLookingCollCell.m in Sources */,
+				8160201C2A2F101C00E4A8F1 /* ASHomeTipCell.m in Sources */,
+				81EC47662A33035D00516573 /* ASHomeNewInCellTableViewCell.m in Sources */,
 				9AD346162A08D60F005CA070 /* UIImageView+ZFCache.m in Sources */,
 				9AD345A92A08D571005CA070 /* TYCyclePagerTransformLayout.m in Sources */,
 				81932E2B29F7539B007C37AF /* UIColor+AS.m in Sources */,

+ 22 - 0
Asteria/ASUI/ASUI.xcassets/nav/nav_back.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "组 8043@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "组 8043@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
Asteria/ASUI/ASUI.xcassets/nav/nav_back.imageset/组 8043@2x.png


BIN
Asteria/ASUI/ASUI.xcassets/nav/nav_back.imageset/组 8043@3x.png


+ 6 - 0
Asteria/ASUI/ColorDefine.h

@@ -37,6 +37,12 @@
 #define _E5E5E5 ([UIColor colorWithHexString:@"#E5E5E5"])
 #define _F5F5F5 ([UIColor colorWithHexString:@"#F5F5F5"])
 
+#define _0E0E0F ([UIColor colorWithHexString:@"#0E0E0F"])
+#define _043632 ([UIColor colorWithHexString:@"#043632"])
+
+#define _B1B1B1 ([UIColor colorWithHexString:@"#B1B1B1"])
+#define _E0FFF5 ([UIColor colorWithHexString:@"#E0FFF5"])
+
 // as主题色 绿色
 #define _32CFB0 ([UIColor colorWithHexString:@"#32CFB0"])
 

+ 2 - 2
Asteria/ASUI/CustomView/productView/ASProductBaseModel.m

@@ -11,8 +11,8 @@
 
 + (ASProductBaseModel*)demoModel {
     ASProductBaseModel *m = [[ASProductBaseModel alloc] init];
-    m.img = @"https://media.glamour.com/photos/5f3e9ad26ed7249924aba0c7/1:1/w_1234,h_1234,c_limit/IMG_2772.jpg";
-    m.title = @"HD Lace";
+    m.img = @"https://marketplace.canva.cn/O0eQI/MADvnEO0eQI/1/screen_2x/canva-surprised-asian-girl-with-pretty-smile-in-pinup-makeup-style-MADvnEO0eQI.jpg";
+    m.title = @"Transparent Wigs Brazilian Front Wigs Straight Hair Transparent Wigs Brazilian Front Wigs Straight Hair ";
     m.sketchy_app = @"Transparent Wigs Brazilian Front Wigs Straight Hair Body Wave…";
     m.discount_app = @"10%";
     if (arc4random()%2 == 1) {

+ 5 - 0
Asteria/ASUI/CustomView/productView/ASProductItemView.h

@@ -12,6 +12,11 @@ NS_ASSUME_NONNULL_BEGIN
 static CGFloat productHWithOutImg = 102;
 @interface ASProductItemView : UIView
 
+@property (nonatomic, strong) UILabel *titleLb;
+
+@property (nonatomic, strong) UILabel *nowPriceLb;
+@property (nonatomic, strong) UILabel *oldPriceLb;
+@property (nonatomic,strong) UILabel *hotLb;
 @property (nonatomic,strong) UIButton *addCartBt;
 @property (nonatomic, strong)  ASProductBaseModel*model;
 @property (nonatomic, copy, nullable) void(^addCartBlock)(ASProductBaseModel* m);

+ 1 - 5
Asteria/ASUI/CustomView/productView/ASProductItemView.m

@@ -10,15 +10,11 @@
 @interface ASProductItemView ()
 
 @property (nonatomic, strong) UIImageView *imgV;
-@property (nonatomic, strong) UILabel *titleLb;
 
-@property (nonatomic, strong) UILabel *nowPriceLb;
-@property (nonatomic, strong) UILabel *oldPriceLb;
 
-@property (nonatomic,strong) UILabel *hotLb;
 
 
-@property (nonatomic,strong) UIStackView *lbStackV;
+
 
 @end
 

+ 2 - 0
Asteria/ASUI/CustomView/someView/KWScrollOffsetView.h

@@ -11,6 +11,8 @@ NS_ASSUME_NONNULL_BEGIN
 
 @interface KWScrollOffsetView : UIView
 
+@property (nonatomic, strong) UIView *offsetV;
+
 @property (nonatomic,assign) CGFloat offWidth;
 
 /// 0-1

+ 1 - 1
Asteria/ASUI/CustomView/someView/KWScrollOffsetView.m

@@ -9,7 +9,7 @@
 
 @interface KWScrollOffsetView ()
 
-@property (nonatomic, strong) UIView *offsetV;
+
 
 
 @end

+ 1 - 1
Asteria/ASUI/Extensions/UITableView+ASBase.m

@@ -12,7 +12,7 @@
 - (void)baseSet {
     
     self.separatorStyle = UITableViewCellSeparatorStyleNone;
-    
+    self.showsVerticalScrollIndicator = false;
     self.rowHeight = UITableViewAutomaticDimension;
     self.estimatedRowHeight = 100;
     self.separatorStyle = UITableViewCellSeparatorStyleNone;

+ 2 - 0
Asteria/ASUI/Extensions/UIView+PublicInit.h

@@ -28,6 +28,8 @@ NS_ASSUME_NONNULL_BEGIN
 
 + (UIVisualEffectView*)getBlurV:(CGRect)frame;
 
++ (void)viewAddHorColorBg:(UIView *)bgV colorArr:(NSArray *)colors startP:(CGPoint)start endP:(CGPoint)end;
+
 @end
 
 NS_ASSUME_NONNULL_END

+ 12 - 0
Asteria/ASUI/Extensions/UIView+PublicInit.m

@@ -64,6 +64,18 @@
     [bgV.layer addSublayer:layer];
 }
 
++ (void)viewAddHorColorBg:(UIView *)bgV colorArr:(NSArray *)colors startP:(CGPoint)start endP:(CGPoint)end {
+    CAGradientLayer *layer = [[CAGradientLayer alloc] init];
+    layer.frame = bgV.bounds;
+    layer.colors = colors;
+    layer.startPoint = start;
+    layer.endPoint = end;
+    layer.locations = @[@0,@1.0f];
+    layer.name = @"colorLayer";
+//    layer.cornerRadius = 4;
+    [bgV.layer addSublayer:layer];
+}
+
 + (UIImage *)snapshotWithView:(UIView *)view {
     UIGraphicsBeginImageContextWithOptions(view.bounds.size, NO, [UIScreen mainScreen].scale);
     [view.layer renderInContext:UIGraphicsGetCurrentContext()];

+ 2 - 0
Asteria/ASUI/SimpleBase/ASBaseViewController.h

@@ -19,6 +19,8 @@ NS_ASSUME_NONNULL_BEGIN
 @property (nonatomic, strong) UIView *leftV;
 @property (nonatomic, strong) UIView *rightV;
 
+@property (nonatomic, strong) UILabel *nav_titleLB;
+
 - (void)ucHomeStyle:(btnClickBlock)tapSearch;
 
 @end

+ 62 - 2
Asteria/ASUI/SimpleBase/ASBaseViewController.m

@@ -16,23 +16,41 @@
 
 @property (nonatomic, strong) UIView *nav_bottomLineV;
 
+@property (nonatomic, strong) UIButton *backBt;
+
+
+
 @end
 
 @implementation ASBaseViewController
 
+- (void)setTitleStr:(NSString *)titleStr {
+    _titleStr = titleStr;
+    self.nav_titleLB.text = _titleStr;
+}
+
+
 - (void)viewDidLoad {
     [super viewDidLoad];
     [self addBaseNav];
     
     self.navigationController.navigationBar.hidden = true;
     
+    self.customNavBar.backgroundColor = Col_FFF;
     self.view.backgroundColor = _F8F8F8;
+}
+
+- (void)viewWillAppear:(BOOL)animated {
+    [super viewWillAppear:animated];
+    self.tabBarController.tabBar.hidden = self.navigationController.viewControllers.count > 1;
+}
+
+- (void)viewWillDisappear:(BOOL)animated {
+    [super viewWillAppear:animated];
     
 }
 
 - (void)ucHomeStyle:(btnClickBlock)tapSearch {
-    self.statusBgV.backgroundColor = Col_FFF;
-    self.customNavBar.backgroundColor = Col_FFF;
     self.tapSearchBlock = tapSearch;
     [self.customNavBar addSubview:self.leftImgV];
     [self.customNavBar addSubview:self.searchTf];
@@ -65,6 +83,24 @@
     self.statusBgV.frame = CGRectMake(0, 0, KScreenWidth, kStatusBarH);
     self.customNavBar.frame = CGRectMake(0, kStatusBarH, KScreenWidth, kCustomNavBarH);
     self.nav_bottomLineV.frame = CGRectMake(0, kCustomNavBarH-1, KScreenWidth, 1);
+    
+    [self.customNavBar addSubview:self.backBt];
+    [self.customNavBar addSubview:self.nav_titleLB];
+    [self.backBt mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.leading.equalTo(self.customNavBar).offset(10);
+        make.centerY.equalTo(self.customNavBar);
+        make.width.height.equalTo(@44);
+    }];
+    
+    [self.nav_titleLB mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.center.equalTo(self.customNavBar);
+        make.width.equalTo(self.customNavBar).offset(-120);
+        make.height.equalTo(@40);
+    }];
+    self.backBt.hidden = true;
+    if (self.navigationController.viewControllers.count > 1) {
+        self.backBt.hidden = false;
+    }
 }
 
 // MARK: - actions
@@ -144,5 +180,29 @@
     return _tfBt;
 }
 
+- (UIButton *)backBt {
+    if (!_backBt) {
+        UIButton *bt = [UIButton buttonWithType:UIButtonTypeCustom];
+        [bt setImage:[UIImage imageNamed:@"nav_back"] forState:UIControlStateNormal];
+        [bt addTarget:self action:@selector(backAction) forControlEvents:UIControlEventTouchUpInside];
+        _backBt = bt;
+    }
+    return _backBt;
+}
+
+- (UILabel *)nav_titleLB {
+    if (!_nav_titleLB) {
+        UILabel *lb = [[UILabel alloc] init];
+        lb.font = [UIFont fontWithName:Rob_Regular size:20];
+        lb.textAlignment = NSTextAlignmentCenter;
+        lb.textColor = Col_000;
+        _nav_titleLB = lb;
+    }
+    return _nav_titleLB;
+}
+
+- (void)backAction {
+    [self.navigationController popViewControllerAnimated:true];
+}
 
 @end

+ 17 - 0
Asteria/Fuction/Home/ASHomeViewController.h

@@ -0,0 +1,17 @@
+//
+//  ASHomeViewController.h
+//  Asteria
+//
+//  Created by iOS on 2023/6/5.
+//
+
+#import "ASBaseViewController.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface ASHomeViewController : ASBaseViewController
+
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 275 - 0
Asteria/Fuction/Home/ASHomeViewController.m

@@ -0,0 +1,275 @@
+//
+//  ASHomeViewController.m
+//  Asteria
+//
+//  Created by iOS on 2023/6/5.
+//
+
+#import "ASHomeViewController.h"
+#import "ASHomeBannerCell.h"
+#import "ASCategaryListCell.h"
+#import "ASHomeTipCell.h"
+#import "ASHomeBestSellCell.h"
+#import "ASHomeNewInCellTableViewCell.h"
+#import "ASHomeImgCell.h"
+#import "ASHomeFlashDealCell.h"
+#import "ASHomeLookingCell.h"
+#import "ASHomeActiveView.h"
+#import "ASProductListViewController.h"
+
+@interface ASHomeViewController ()<UITableViewDelegate,UITableViewDataSource>
+
+@property (nonatomic, strong) UITableView *tableV;
+@property (nonatomic, strong) NSArray <ASHomeMainListModel*>*listArr;
+
+@property (nonatomic, strong) NSArray <ASHomeBannerModel *>*topLinkArr;
+@property (nonatomic, strong, nullable) ASHomeActiveView *activeV;
+
+@end
+
+@implementation ASHomeViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    __block typeof(self) wSelf = self;
+    [self ucHomeStyle:^{
+        // TODO: 跳转搜索模块
+    }];
+    [self addSubV];
+    [self demoData];
+    [self.tableV reloadData];
+    
+    if (self.topLinkArr.count > 0) {
+        self.activeV = [[ASHomeActiveView alloc] initWithFrame:CGRectZero];
+        self.activeV.tapBlock = ^(ASHomeBannerModel * _Nullable m) {
+            
+        };
+        self.tableV.tableHeaderView = self.activeV;
+        [self.activeV setData:self.topLinkArr];
+        
+    } else {
+        self.activeV.tapBlock = nil;
+        self.activeV = nil;
+        self.tableV.tableHeaderView = nil;
+    }
+}
+
+
+- (void)demoData {
+    _listArr = [ASHomeMainListModel homeDemoDatas];
+    NSMutableArray *tempArr = [NSMutableArray array];
+    for (int i=0;i < (arc4random()%6); i++) {
+        ASHomeBannerModel *m = [ASHomeBannerModel demoModelWithType:i%3+1];
+        [tempArr addObject:m];
+    }
+    self.topLinkArr = tempArr;
+}
+
+- (void)addSubV {
+    [self.view addSubview:self.tableV];
+    [self.tableV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.customNavBar.mas_bottom);
+        make.leading.trailing.equalTo(self.view);
+        make.bottom.equalTo(self.view);
+    }];
+    self.tableV.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
+        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1), dispatch_get_main_queue(), ^{
+            [self.tableV.mj_header endRefreshing];
+            [self.tableV reloadData];
+        });
+    }];
+}
+
+// MARK: - UITableViewDelegate
+
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
+{
+    if (indexPath.section == 0) { // banner
+        return;
+    }
+    
+}
+
+// MARK: - UITableViewDataSource
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
+{
+    return self.listArr.count + 1;
+}
+
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
+{
+    
+    switch (section) {
+        default:
+            return 1;
+    }
+    return 1;
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    if (indexPath.section == 0) { // banner
+        ASHomeBannerCell *bcell = [tableView dequeueReusableCellWithIdentifier:@"ASHomeBannerCell" forIndexPath:indexPath];
+        @weakify(self);
+        bcell.selectCallBack = ^(NSInteger index, NSString * _Nonnull title, NSString * _Nonnull typeId, id  _Nonnull model) {
+            if (model == nil || ![model isKindOfClass:[ASHomeBannerModel class]]) {
+                return;
+            }
+            ASHomeBannerModel *m = (ASHomeBannerModel *)model;
+            if (m.type == 1) {
+//                [self goto_WKM_GoodsDetailsC:m.tapUrl];
+                return;
+            }
+            if (m.type == 2) {
+//                NSString *typeId = m.tapUrl;
+//                [self pushToProductList:@"Products" typeid:typeId];
+                return;
+            }
+            if ([m.tapUrl.lowercaseString hasPrefix:@"http"]) {
+//                [self toWebVC:m.tapUrl name:@"Alipearl"];
+            }
+        };
+        NSMutableArray *arr = [NSMutableArray array];
+        for (int i=0; i<6; i++) {
+            ASHomeBannerModel *m = [ASHomeBannerModel demoModelWithType:i%3];
+            [arr addObject:m];
+        }
+        [bcell showData:arr];
+        return  bcell;
+    }
+    if (self.listArr.count <= indexPath.row) {
+        return [UITableViewCell new];
+    }
+    ASHomeMainListModel *m = self.listArr[indexPath.section-1];
+    switch (m.showType) {
+        case 1: { // 分类
+            ASCategaryListCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ASCategaryListCell" forIndexPath:indexPath];
+            cell.arr = m.titleArr;
+            cell.selectCategory = ^(ASHomeCategoryModel * _Nonnull model, NSIndexPath * _Nonnull index) {
+                // TODO: - to productlist
+                [self pushToProductList:model.typeId title:model.title];
+            };
+            return cell;
+        }
+        case 2: { // tips
+            ASHomeTipCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ASHomeTipCell" forIndexPath:indexPath];
+            return cell;
+        }
+        case 3: {// bestSell
+            ASHomeBestSellCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ASHomeBestSellCell" forIndexPath:indexPath];
+            cell.productClick = ^(NSInteger i, ASProductBaseModel * _Nonnull m) {
+                
+            };
+            cell.model = m;
+            return cell;
+        }
+        case 4: {
+            ASHomeNewInCellTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ASHomeNewInCellTableViewCell" forIndexPath:indexPath];
+            [cell setData:m];
+            return cell;
+        }
+        case 5: {
+            ASHomeImgCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ASHomeImgCell" forIndexPath:indexPath];
+            cell.tapImgBlock = ^{
+                // TODO: -
+            };
+            [cell setImgStr:m.imgUrl];
+            return cell;
+        }
+        case 6: {
+            ASHomeFlashDealCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ASHomeFlashDealCell" forIndexPath:indexPath];
+            cell.productClick = ^(NSInteger i, ASProductBaseModel * _Nonnull m) {
+                
+            };
+            cell.proAddCartClick = ^(NSInteger i, ASProductBaseModel * _Nonnull m) {
+                
+            };
+            cell.model = m;
+            return cell;
+        }
+        case 7: {
+            ASHomeLookingCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ASHomeLookingCell" forIndexPath:indexPath];
+            cell.itemClick = ^(NSInteger i, ASHomeCategoryModel * _Nonnull m) {
+                
+            };
+            cell.model = m;
+            return cell;
+        }
+        default:
+            break;
+    }
+    
+    return [UITableViewCell new];
+    
+}
+
+- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {
+    return 40;
+}
+
+
+
+
+- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
+    return  UITableViewAutomaticDimension;
+}
+
+-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
+    return 0.01;
+    
+}
+-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
+    
+    UIView *footer = [[UIView alloc] initWithFrame:CGRectZero];
+    footer.backgroundColor = [UIColor clearColor];
+    return footer;
+}
+
+- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
+    return 0.01;
+}
+- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
+    UIView *footer = [[UIView alloc] initWithFrame:CGRectZero];
+    footer.backgroundColor = [UIColor clearColor];
+    return footer;
+}
+
+-(void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
+    
+}
+
+
+// MARK: - nextViews
+
+- (void)pushToProductList:(NSString *)typeId title:(NSString *)title {
+    ASProductListViewController *vc = [ASProductListViewController new];
+    vc.titleStr = title;
+    [self.navigationController pushViewController:vc animated:true];
+}
+
+
+
+
+
+// MARK: - subVs
+-(UITableView *)tableV {
+    if (!_tableV) {
+        UITableView *tabV = [[UITableView alloc] initWithFrame:self.view.bounds];
+        tabV.delegate = self;
+        tabV.dataSource = self;
+        [tabV baseSet];
+        tabV.backgroundColor = UIColor.whiteColor;
+        tabV.separatorStyle = UITableViewCellSeparatorStyleNone;
+        [tabV registerClass:[ASHomeBannerCell class] forCellReuseIdentifier:@"ASHomeBannerCell"];
+        [tabV registerClass:[ASCategaryListCell class] forCellReuseIdentifier:@"ASCategaryListCell"];
+        [tabV registerClass:[ASHomeTipCell class] forCellReuseIdentifier:@"ASHomeTipCell"];
+        [tabV registerClass:[ASHomeBestSellCell class] forCellReuseIdentifier:@"ASHomeBestSellCell"];
+        [tabV registerClass:[ASHomeNewInCellTableViewCell class] forCellReuseIdentifier:@"ASHomeNewInCellTableViewCell"];
+        [tabV registerClass:[ASHomeImgCell class] forCellReuseIdentifier:@"ASHomeImgCell"];
+        [tabV registerClass:[ASHomeFlashDealCell class] forCellReuseIdentifier:@"ASHomeFlashDealCell"];
+        [tabV registerClass:[ASHomeLookingCell class] forCellReuseIdentifier:@"ASHomeLookingCell"];
+        _tableV = tabV;
+    }
+    return  _tableV;
+}
+
+@end

+ 16 - 0
Asteria/Fuction/Home/ASProductListViewController.h

@@ -0,0 +1,16 @@
+//
+//  ASProductListViewController.h
+//  Asteria
+//
+//  Created by iOS on 2023/6/12.
+//
+
+#import "ASBaseViewController.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface ASProductListViewController : ASBaseViewController
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 235 - 0
Asteria/Fuction/Home/ASProductListViewController.m

@@ -0,0 +1,235 @@
+//
+//  ASProductListViewController.m
+//  Asteria
+//
+//  Created by iOS on 2023/6/12.
+//
+
+#import "ASProductListViewController.h"
+#import "HomeFlashDealSubCollectCell.h"
+#import "ASProductListViewModel.h"
+#import "ASProductListMenuHeaderView.h"
+#import "ASProductListActiveHeaderView.h"
+
+@interface ASProductListViewController ()<UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout>
+
+@property (nonatomic, strong) NSArray <ASHomeBannerModel *>*topLinkArr;
+
+
+
+
+@property (nonatomic, strong) ASProductListViewModel *vm;
+@property (nonatomic, strong) UICollectionView *collectV;
+@property (nonatomic, strong) UIView *bottomV;
+@property (nonatomic, strong) UIButton *moreBt;
+
+@property (nonatomic, strong) UIButton *searchNavBt;
+
+@end
+
+@implementation ASProductListViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [self loadSubVs];
+    [self loasActiveDataAndV];
+    self.vm = [ASProductListViewModel new];
+    [self.collectV reloadData];
+    
+    
+    
+}
+
+- (void)loadSubVs {
+    
+    [self.view addSubview:self.collectV];
+    [self.customNavBar addSubview:self.searchNavBt];
+    
+    [self.searchNavBt mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.width.height.equalTo(@44);
+        make.trailing.equalTo(self.customNavBar).offset(-10);
+        make.centerY.equalTo(self.customNavBar);
+    }];
+    
+    [self.collectV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.customNavBar.mas_bottom);
+        make.leading.trailing.equalTo(self.view);
+        make.bottom.equalTo(self.view);
+    }];
+    
+}
+
+- (void)loasActiveDataAndV {
+    NSMutableArray *tempArr = [NSMutableArray array];
+    for (int i=0;i < (arc4random()%6); i++) {
+        ASHomeBannerModel *m = [ASHomeBannerModel demoModelWithType:i%3+1];
+        [tempArr addObject:m];
+    }
+    self.topLinkArr = tempArr;
+    
+    [self.collectV reloadData];
+}
+
+// MARK: - delegate datasource
+- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
+    
+    
+}
+
+// MARK: - UICollectionViewDataSource
+- (nonnull __kindof UICollectionViewCell *)collectionView:(nonnull UICollectionView *)collectionView cellForItemAtIndexPath:(nonnull NSIndexPath *)indexPath {
+    
+    HomeFlashDealSubCollectCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"HomeFlashDealSubCollectCell" forIndexPath:indexPath];
+    if (self.vm.productList.count <= indexPath.row)
+    {
+        return cell;
+    }
+   
+    ASProductBaseModel *m = self.vm.productList[indexPath.row];
+    cell.model = m;
+    cell.contView.addCartBt.hidden = true;
+    return cell;
+}
+
+- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
+    return 3;
+}
+
+- (NSInteger)collectionView:(nonnull UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
+    if (section == 0 || section == 1) {
+        return 0;
+    }
+    return self.vm.productList.count;
+}
+
+- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section {
+    if (section == 0) {
+        CGSize size = CGSizeZero;
+        if (self.topLinkArr.count > 0) {
+            size = CGSizeMake(KScreenWidth, 40);
+        }
+        return size;
+    }
+    if (section == 1) {
+        return CGSizeMake(KScreenWidth, 60);
+    }
+    return CGSizeZero;
+}
+
+- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath {
+    if (indexPath.section == 0 && [kind isEqualToString:UICollectionElementKindSectionHeader]) {
+        ASProductListActiveHeaderView *v = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"ASProductListActiveHeaderView" forIndexPath:indexPath];
+        [v setData:self.topLinkArr tapBlock:^(ASHomeBannerModel * _Nullable m) {
+            
+        }];
+        return v;
+    }
+    if (indexPath.section == 1 && [kind isEqualToString:UICollectionElementKindSectionHeader]) {
+        ASProductListMenuHeaderView *v = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"ASProductListMenuHeaderView" forIndexPath:indexPath];
+        [v setData:@"SORT BY" sortBlock:^{
+            
+        } menuBlock:^{
+            
+        }];
+        return v;
+    }
+    return nil;
+}
+
+- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
+    
+    CGFloat marg = 10;
+    CGFloat w = (KScreenWidth-3*marg)/2;
+    CGFloat collH = (KScreenWidth-30)/2 + productHWithOutImg;
+    return CGSizeMake(w, collH);
+}
+
+-(CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section {
+    return 10;
+}
+
+-(CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section {
+    return 10;
+}
+
+- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section {
+    if (section == 0 || section == 1) {
+        return UIEdgeInsetsZero;
+    }
+    return UIEdgeInsetsMake(10, 10, 10, 10);
+}
+
+// MARK: - actions
+- (void)search_navAction {
+    // TODO: to searchVC
+}
+
+
+
+
+// MARK: - subvs
+
+-(UICollectionView *)collectV {
+    if (!_collectV) {
+        UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
+        layout.sectionInset = UIEdgeInsetsMake(10, 0, 10, 0);
+        layout.scrollDirection = UICollectionViewScrollDirectionVertical;
+        CGFloat collH = (KScreenWidth-30)/2 + 126;
+        layout.itemSize = CGSizeMake((KScreenWidth - 30)/2, collH);
+        UICollectionView *collV = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, collH) collectionViewLayout:layout];
+        collV.backgroundColor = [UIColor whiteColor];
+        collV.alwaysBounceVertical = true;
+        collV.scrollEnabled = true;
+        collV.delegate = self;
+        collV.dataSource = self;
+        collV.showsHorizontalScrollIndicator = false;
+        collV.showsVerticalScrollIndicator = false;
+        [collV registerClass:[HomeFlashDealSubCollectCell class] forCellWithReuseIdentifier:@"HomeFlashDealSubCollectCell"];
+        [collV registerClass:[ASProductListActiveHeaderView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"ASProductListActiveHeaderView"];
+        [collV registerClass:[ASProductListMenuHeaderView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"ASProductListMenuHeaderView"];
+        _collectV = collV;
+    }
+    return  _collectV;
+}
+
+-(UIView *)bottomV {
+    if (!_bottomV) {
+        UIView *v = [UIView baseV];
+        v.backgroundColor = Col_FFF;
+        v.clipsToBounds = true;
+        _bottomV = v;
+    }
+    return _bottomV;
+}
+
+- (UIButton *)moreBt {
+    if (!_moreBt) {
+        UIButton *bt = [UIButton buttonWithType:UIButtonTypeCustom];
+        [bt setTitle:@"VIEW MORE" forState:UIControlStateNormal];
+        [bt setTitleColor:Col_000 forState:UIControlStateNormal];
+        bt.titleLabel.font = [UIFont fontWithName:Rob_Regular size:16];
+        bt.layer.cornerRadius = 4;
+        bt.layer.borderColor = Col_000.CGColor;
+        bt.layer.borderWidth = 1;
+        bt.layer.masksToBounds = true;
+        _moreBt = bt;
+    }
+    return _moreBt;
+}
+
+- (UIButton *)searchNavBt {
+    if (!_searchNavBt) {
+        UIButton *bt = [UIButton buttonWithType:UIButtonTypeCustom];
+        [bt setImage:[UIImage imageNamed:@"nav_search"] forState:UIControlStateNormal];
+        [bt addTarget:self action:@selector(search_navAction) forControlEvents:UIControlEventTouchUpInside];
+        _searchNavBt = bt;
+    }
+    return _searchNavBt;
+}
+
+
+
+
+
+
+@end

+ 6 - 0
Asteria/Fuction/Home/Home.xcassets/Contents.json

@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 6 - 0
Asteria/Fuction/Home/Home.xcassets/home_tips/Contents.json

@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 22 - 0
Asteria/Fuction/Home/Home.xcassets/home_tips/air_tip.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "组 10692@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "组 10692@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
Asteria/Fuction/Home/Home.xcassets/home_tips/air_tip.imageset/组 10692@2x.png


BIN
Asteria/Fuction/Home/Home.xcassets/home_tips/air_tip.imageset/组 10692@3x.png


+ 22 - 0
Asteria/Fuction/Home/Home.xcassets/home_tips/box_tip.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "组 10690@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "组 10690@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
Asteria/Fuction/Home/Home.xcassets/home_tips/box_tip.imageset/组 10690@2x.png


BIN
Asteria/Fuction/Home/Home.xcassets/home_tips/box_tip.imageset/组 10690@3x.png


+ 22 - 0
Asteria/Fuction/Home/Home.xcassets/home_tips/pay_tip.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "组 10688@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "组 10688@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
Asteria/Fuction/Home/Home.xcassets/home_tips/pay_tip.imageset/组 10688@2x.png


BIN
Asteria/Fuction/Home/Home.xcassets/home_tips/pay_tip.imageset/组 10688@3x.png


+ 22 - 0
Asteria/Fuction/Home/Home.xcassets/home_tips/trade_tip.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "组 8990@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "组 8990@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
Asteria/Fuction/Home/Home.xcassets/home_tips/trade_tip.imageset/组 8990@2x.png


BIN
Asteria/Fuction/Home/Home.xcassets/home_tips/trade_tip.imageset/组 8990@3x.png


+ 6 - 0
Asteria/Fuction/Home/Home.xcassets/newin/Contents.json

@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 22 - 0
Asteria/Fuction/Home/Home.xcassets/newin/home_newin_addCart.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "btn@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "btn@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
Asteria/Fuction/Home/Home.xcassets/newin/home_newin_addCart.imageset/btn@2x.png


BIN
Asteria/Fuction/Home/Home.xcassets/newin/home_newin_addCart.imageset/btn@3x.png


+ 44 - 0
Asteria/Fuction/Home/Home.xcassets/newin/home_newin_priceBg.imageset/Contents.json

@@ -0,0 +1,44 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "组 10636@2x.png",
+      "idiom" : "universal",
+      "resizing" : {
+        "cap-insets" : {
+          "left" : 42,
+          "right" : 48
+        },
+        "center" : {
+          "mode" : "tile",
+          "width" : 7
+        },
+        "mode" : "3-part-horizontal"
+      },
+      "scale" : "2x"
+    },
+    {
+      "filename" : "组 10636@3x.png",
+      "idiom" : "universal",
+      "resizing" : {
+        "cap-insets" : {
+          "left" : 63,
+          "right" : 80
+        },
+        "center" : {
+          "mode" : "tile",
+          "width" : 9
+        },
+        "mode" : "3-part-horizontal"
+      },
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
Asteria/Fuction/Home/Home.xcassets/newin/home_newin_priceBg.imageset/组 10636@2x.png


BIN
Asteria/Fuction/Home/Home.xcassets/newin/home_newin_priceBg.imageset/组 10636@3x.png


+ 6 - 0
Asteria/Fuction/Home/Home.xcassets/productlist/Contents.json

@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 22 - 0
Asteria/Fuction/Home/Home.xcassets/productlist/productList_menu.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "组 7515@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "组 7515@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
Asteria/Fuction/Home/Home.xcassets/productlist/productList_menu.imageset/组 7515@2x.png


BIN
Asteria/Fuction/Home/Home.xcassets/productlist/productList_menu.imageset/组 7515@3x.png


+ 24 - 0
Asteria/Fuction/Home/Models/ASHomeBannerModel.h

@@ -0,0 +1,24 @@
+//
+//  ASHomeBannerModels.h
+//  Asteria
+//
+//  Created by iOS on 2023/6/5.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface ASHomeBannerModel : NSObject
+
+@property (nonatomic, copy) NSString *imgUrl;
+/// 1 商品 2 类别 3weburl
+@property (nonatomic, assign) int type;
+@property (nonatomic, copy) NSString *tapUrl;
+@property (nonatomic, copy) NSString *title;
+
++ (ASHomeBannerModel *)demoModelWithType:(int)type;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 22 - 0
Asteria/Fuction/Home/Models/ASHomeBannerModel.m

@@ -0,0 +1,22 @@
+//
+//  ASHomeBannerModels.m
+//  Asteria
+//
+//  Created by iOS on 2023/6/5.
+//
+
+#import "ASHomeBannerModel.h"
+
+@implementation ASHomeBannerModel
+
++ (ASHomeBannerModel *)demoModelWithType:(int)type {
+    ASHomeBannerModel *m = [[ASHomeBannerModel alloc] init];
+    m.type = type;
+    m.title = [NSString stringWithFormat:@"custom_%d",type];
+    m.imgUrl = @"https://5b0988e595225.cdn.sohucs.com/images/20180105/91cec947a2904ebd9eda2943880069bd.jpeg";
+    m.tapUrl = @"https://baidu.com";
+    
+    return  m;
+}
+
+@end

+ 23 - 0
Asteria/Fuction/Home/Models/ASHomeCategoryModel.h

@@ -0,0 +1,23 @@
+//
+//  ASHomeCategoryModel.h
+//  Asteria
+//
+//  Created by iOS on 2023/6/6.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface ASHomeCategoryModel : NSObject
+
+@property (nonatomic, copy) NSString *title;
+@property (nonatomic, copy) NSString *imgUrl;
+@property (nonatomic, copy) NSString *webUrl;
+@property (nonatomic, copy) NSString *typeId;
+
++ (ASHomeCategoryModel *)demoModel;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 20 - 0
Asteria/Fuction/Home/Models/ASHomeCategoryModel.m

@@ -0,0 +1,20 @@
+//
+//  ASHomeCategoryModel.m
+//  Asteria
+//
+//  Created by iOS on 2023/6/6.
+//
+
+#import "ASHomeCategoryModel.h"
+
+@implementation ASHomeCategoryModel
+
++ (ASHomeCategoryModel *)demoModel {
+    ASHomeCategoryModel *m = [ASHomeCategoryModel new];
+    m.title = @"Hot Selling";
+    m.typeId = [NSString stringWithFormat:@"%u", arc4random()%120221];
+    m.imgUrl = @"https://www.short-haircut.com/wp-content/uploads/2019/01/9-short-layered-haircuts-for-black-women-1001201920019.jpg";
+    return m;
+}
+
+@end

+ 34 - 0
Asteria/Fuction/Home/Models/ASHomeMainListModel.h

@@ -0,0 +1,34 @@
+//
+//  ASHomeMainListModel.h
+//  Asteria
+//
+//  Created by iOS on 2023/6/6.
+//
+
+#import <Foundation/Foundation.h>
+#import "ASProductBaseModel.h"
+#import "ASHomeCategoryModel.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface ASHomeMainListModel : NSObject
+
+@property (nonatomic,copy) NSString *title;
+@property (nonatomic,assign) NSInteger showType;
+@property (nonatomic,copy) NSString *subtitle;
+@property (nonatomic,copy) NSString *imgUrl;
+@property (nonatomic,copy) NSString *typeId;
+@property (nonatomic,copy) NSString *webUrl;
+@property (nonatomic,copy) NSString *videoUrl;
+@property (nonatomic,assign) NSTimeInterval endtime;
+@property (nonatomic,strong) NSArray<ASProductBaseModel *> *productList;
+@property (nonatomic,strong) NSMutableArray<ASHomeCategoryModel *> *titleArr;
+
+
+
++ (NSArray <ASHomeMainListModel *>*)homeDemoDatas;
+
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 124 - 0
Asteria/Fuction/Home/Models/ASHomeMainListModel.m

@@ -0,0 +1,124 @@
+//
+//  ASHomeMainListModel.m
+//  Asteria
+//
+//  Created by iOS on 2023/6/6.
+//
+
+#import "ASHomeMainListModel.h"
+
+@implementation ASHomeMainListModel
+
++ (NSArray <ASHomeMainListModel *>*)homeDemoDatas {
+    ASHomeMainListModel *cateM = [ASHomeMainListModel cateList];
+    ASHomeMainListModel *tipM = [ASHomeMainListModel tipList];
+    ASHomeMainListModel *bestSellM = [ASHomeMainListModel bestSellList];
+    ASHomeMainListModel *newinM = [ASHomeMainListModel newInList];
+    ASHomeMainListModel *imgM = [ASHomeMainListModel imgModel];
+    ASHomeMainListModel *flashM = [ASHomeMainListModel flashdealList];
+    ASHomeMainListModel *contactM = [ASHomeMainListModel contactModel];
+    ASHomeMainListModel *lookM = [ASHomeMainListModel lookM];
+    ASHomeMainListModel *imgM2 = [ASHomeMainListModel imgModel];
+    return @[cateM,tipM,bestSellM,newinM,imgM,flashM,contactM,lookM,imgM2];
+}
+
++ (ASHomeMainListModel *)cateList {
+    ASHomeMainListModel *model = [ASHomeMainListModel new];
+    model.showType = 1;
+    NSMutableArray *arr = [NSMutableArray array];
+    for (int i=0; i<6; i++) {
+        ASHomeCategoryModel *m = [ASHomeCategoryModel demoModel];
+        [arr addObject:m];
+    }
+    model.titleArr = arr;
+    return model;
+}
+
++ (ASHomeMainListModel *)tipList {
+    ASHomeMainListModel *model = [ASHomeMainListModel new];
+    model.showType = 2;
+    return model;
+}
+
++ (ASHomeMainListModel *)bestSellList {
+    ASHomeMainListModel *model = [ASHomeMainListModel new];
+    model.showType = 3;
+    model.title = @"BEST SELLER";
+    NSMutableArray *arr = [NSMutableArray array];
+    for (int i=0; i<4; i++) {
+        ASProductBaseModel *m = [ASProductBaseModel demoModel];
+        [arr addObject:m];
+    }
+    model.productList = arr;
+    return model;
+}
+
++ (ASHomeMainListModel *)newInList {
+    ASHomeMainListModel *model = [ASHomeMainListModel new];
+    model.showType = 4;
+    model.title = @"New In";
+    NSMutableArray *arr = [NSMutableArray array];
+    for (int i=0; i<8; i++) {
+        ASProductBaseModel *m = [ASProductBaseModel demoModel];
+        [arr addObject:m];
+    }
+    model.productList = arr;
+    return model;
+}
+
++ (ASHomeMainListModel *)imgModel {
+    ASHomeMainListModel *model = [ASHomeMainListModel new];
+    model.showType = 5;
+    model.title = @"";
+    model.typeId = @"325";
+    model.imgUrl = @"https://img.pptjia.com/image/20200604/d9bd62a1a41bae8a7a60b579887e2cc1.jpg";
+    return model;
+}
+
++ (ASHomeMainListModel *)flashdealList {
+    ASHomeMainListModel *model = [ASHomeMainListModel new];
+    model.showType = 6;
+    model.title = @"FLASH DEAL";
+    NSDate *now = [[NSDate alloc] init];
+    NSDate *todayStart = [NSCalendar.currentCalendar startOfDayForDate:now];
+    NSDate *nextStart = [NSDate dateWithTimeIntervalSince1970:todayStart.timeIntervalSince1970 + 24*60*60];
+    model.endtime = nextStart.timeIntervalSince1970;
+    NSMutableArray *arr = [NSMutableArray array];
+    for (int i=0; i<8; i++) {
+        ASProductBaseModel *m = [ASProductBaseModel demoModel];
+        [arr addObject:m];
+    }
+    model.productList = arr;
+    return model;
+}
+
++ (ASHomeMainListModel *)contactModel {
+    ASHomeMainListModel *model = [ASHomeMainListModel new];
+    model.showType = 5;
+    model.title = @"wholesale";
+    model.webUrl = @"https://www.asteriahair.com/wholesale";
+    model.imgUrl = @"https://img-qn.51miz.com/Element/00/64/88/86/ecec8108_E648886_37e0b3c6.jpg";
+    return model;
+}
+
+
++ (ASHomeMainListModel *)lookM {
+    ASHomeMainListModel *model = [ASHomeMainListModel new];
+    model.showType = 7;
+    model.title = @"SHOP BY LOOKING";
+    NSMutableArray *arr = [NSMutableArray array];
+    for (int i=0; i<8; i++) {
+        ASHomeCategoryModel *m = [ASHomeCategoryModel demoModel];
+        m.webUrl = @"https://baidu.com";
+        m.imgUrl = @"https://img2.baidu.com/it/u=3089287678,3179663495&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=500";
+        [arr addObject:m];
+    }
+    model.titleArr = arr;
+    return model;
+}
+
+
+
+
+
+@end

+ 18 - 0
Asteria/Fuction/Home/Target_Home.h

@@ -0,0 +1,18 @@
+//
+//  Target_Home.h
+//  Asteria
+//
+//  Created by iOS on 2023/6/5.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface Target_Home : NSObject
+
+- (UIViewController *)Action_getHomeVc:(NSDictionary *)params;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 18 - 0
Asteria/Fuction/Home/Target_Home.m

@@ -0,0 +1,18 @@
+//
+//  Target_Home.m
+//  Asteria
+//
+//  Created by iOS on 2023/6/5.
+//
+
+#import "Target_Home.h"
+#import "ASHomeViewController.h"
+
+@implementation Target_Home
+
+- (UIViewController *)Action_getHomeVc:(NSDictionary *)params {
+    ASHomeViewController *vc = [[ASHomeViewController alloc] init];
+    return  vc;
+}
+
+@end

+ 20 - 0
Asteria/Fuction/Home/Views/ASCategaryListCell.h

@@ -0,0 +1,20 @@
+//
+//  ASCategaryListCell.h
+//  Asteria
+//
+//  Created by iOS on 2023/6/6.
+//
+
+#import <UIKit/UIKit.h>
+#import "ASHomeCategoryModel.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface ASCategaryListCell : UITableViewCell
+
+@property (nonatomic, strong) NSArray <ASHomeCategoryModel *>*arr;
+@property (nonatomic, copy) void(^selectCategory)(ASHomeCategoryModel *model,NSIndexPath *index);
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 99 - 0
Asteria/Fuction/Home/Views/ASCategaryListCell.m

@@ -0,0 +1,99 @@
+//
+//  ASCategaryListCell.m
+//  Asteria
+//
+//  Created by iOS on 2023/6/6.
+//
+
+#import "ASCategaryListCell.h"
+#import "ASCategaryCollectCell.h"
+
+@interface ASCategaryListCell () <UICollectionViewDelegate,UICollectionViewDataSource>
+
+@property (nonatomic, strong) UICollectionView *collV;
+
+@end
+
+@implementation ASCategaryListCell
+
+- (void)setArr:(NSArray<ASHomeCategoryModel *> *)arr {
+    _arr = arr;
+    [self.collV reloadData];
+}
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
+    if (self) {
+        self.selectionStyle = UITableViewCellSelectionStyleNone;
+        self.contentView.backgroundColor = UIColor.whiteColor;
+        [self.contentView addSubview:self.collV];
+        [self.collV mas_makeConstraints:^(MASConstraintMaker *make) {
+            make.top.equalTo(self.contentView).offset(30);
+            make.leading.trailing.equalTo(self.contentView);
+            make.height.equalTo(@112);
+            make.bottom.equalTo(self.contentView).offset(-25);
+        }];
+    }
+    return self;
+}
+
+- (UICollectionView *)collV {
+    if (!_collV) {
+        UICollectionViewFlowLayout *layout = [UICollectionViewFlowLayout new];
+        layout.itemSize = CGSizeMake(112, 112);
+        layout.sectionInset = UIEdgeInsetsMake(0, 10, 0, 10);
+        layout.minimumLineSpacing = 5;
+        layout.minimumInteritemSpacing = 5;
+        layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
+        UICollectionView *col = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, 112) collectionViewLayout:layout];
+        [col registerClass:[ASCategaryCollectCell class] forCellWithReuseIdentifier:@"ASCategaryCollectCell"];
+        col.showsHorizontalScrollIndicator = false;
+        col.delegate = self;
+        col.dataSource = self;
+        col.backgroundColor = UIColor.whiteColor;
+        _collV = col;
+    }
+    return _collV;
+}
+
+
+
+
+// MARK: - coll delegate datasource
+- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
+    return _arr.count;
+}
+
+- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
+    ASCategaryCollectCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"ASCategaryCollectCell" forIndexPath:indexPath];
+    if (self.arr.count <= indexPath.row) {
+        return cell;
+    }
+    ASHomeCategoryModel *m = self.arr[indexPath.row];
+    [cell.imgV sd_setImageWithURL:[NSURL URLWithString:m.imgUrl]];
+    cell.titleLb.text = m.title;
+    return cell;
+}
+
+- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
+    if (self.arr.count <= indexPath.row) {
+        return ;
+    }
+    ASHomeCategoryModel *m = self.arr[indexPath.row];
+    if (self.selectCategory) {
+        self.selectCategory(m, indexPath);
+    }
+}
+
+@end

+ 21 - 0
Asteria/Fuction/Home/Views/ASHomeActiveView.h

@@ -0,0 +1,21 @@
+//
+//  ASHomeActiveView.h
+//  Asteria
+//
+//  Created by iOS on 2023/6/12.
+//
+
+#import <UIKit/UIKit.h>
+#import "ASHomeBannerModel.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface ASHomeActiveView : UIView
+
+@property (nonatomic, copy, nullable) void(^tapBlock)(ASHomeBannerModel * _Nullable m);
+
+- (void)setData:(NSArray <ASHomeBannerModel *>*)arr;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 98 - 0
Asteria/Fuction/Home/Views/ASHomeActiveView.m

@@ -0,0 +1,98 @@
+//
+//  ASHomeActiveView.m
+//  Asteria
+//
+//  Created by iOS on 2023/6/12.
+//
+
+#import "ASHomeActiveView.h"
+#import "VerScrollTextView.h"
+
+@interface ASHomeActiveView ()
+
+@property (nonatomic, strong) UIButton *bt;
+@property (nonatomic, strong) VerScrollTextView *rollingV;
+
+@property (nonatomic, strong) NSArray <ASHomeBannerModel *>*topLinkModels;
+
+@end
+
+@implementation ASHomeActiveView
+
+- (void)setData:(NSArray <ASHomeBannerModel *>*)arr {
+    self.topLinkModels = arr;
+    NSMutableArray *tempArr = [NSMutableArray array];
+    for (ASHomeBannerModel *m in self.topLinkModels) {
+        [tempArr addObject:m.title];
+    }
+    self.rollingV.sxArry = tempArr;
+}
+
+- (instancetype)initWithFrame:(CGRect)frame {
+    self = [super initWithFrame:CGRectMake(0, 0, KScreenWidth, 40)];
+    if (self) {
+        [self loadSubVs];
+    }
+    return self;
+}
+
+- (void)loadSubVs {
+    self.backgroundColor = _E0FFF5;
+    
+    [self addSubview:self.rollingV];
+    [self addSubview:self.bt];
+    
+    [self.rollingV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.edges.equalTo(self);
+    }];
+    [self.bt mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.edges.equalTo(self);
+    }];
+    
+}
+
+
+- (UIButton *)bt {
+    if (!_bt) {
+        UIButton *b = [UIButton buttonWithType:UIButtonTypeCustom];
+        [b addTarget:self action:@selector(topLinkTapAction) forControlEvents:UIControlEventTouchUpInside];
+        _bt = b;
+    }
+    return _bt;
+}
+
+- (VerScrollTextView *)rollingV {
+    if (!_rollingV) {
+        VerScrollTextView *v = [VerScrollTextView new];
+        v.backgroundColor = UIColor.clearColor;
+        _rollingV = v;
+    }
+    return _rollingV;
+}
+
+- (void)topLinkTapAction {
+    NSLog(@"-----topLinkTapAction:%ld", self.rollingV.arrNum);
+    if (self.topLinkModels.count > 0 && self.rollingV.arrNum < self.topLinkModels.count) {
+        if (self.tapBlock) {
+            ASHomeBannerModel * m = self.topLinkModels[self.rollingV.arrNum];
+            self.tapBlock(m);
+        }
+        
+    }
+//        HomeBanerModel * m = self.vm.topLinkModels[self.topLinkV.arrNum];
+//        if (m.type == 1) {
+//            [self goto_WKM_GoodsDetailsC:m.tapUrl];
+//            return;
+//        }
+//        if (m.type == 2) {
+//            NSString *typeId = m.tapUrl;
+//            [self pushToProductList:@"Products" typeid:typeId];
+//            return;
+//        }
+//        if ([m.tapUrl.lowercaseString hasPrefix:@"http"]) {
+//            [self toWebVC:m.tapUrl name:@"WESTKISS"];
+//        }
+//    }
+}
+
+@end

+ 21 - 0
Asteria/Fuction/Home/Views/ASHomeBannerCell.h

@@ -0,0 +1,21 @@
+//
+//  ASHomeBannerCell.h
+//  Asteria
+//
+//  Created by iOS on 2023/6/5.
+//
+
+#import <UIKit/UIKit.h>
+#import "ASHomeBannerModel.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface ASHomeBannerCell : UITableViewCell
+
+@property (nonatomic, copy) void(^selectCallBack)(NSInteger index, NSString *title, NSString *typeId,id model);
+- (void)showData:(NSArray <ASHomeBannerModel*>*)arr;
+
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 135 - 0
Asteria/Fuction/Home/Views/ASHomeBannerCell.m

@@ -0,0 +1,135 @@
+//
+//  ASHomeBannerCell.m
+//  Asteria
+//
+//  Created by iOS on 2023/6/5.
+//
+
+#import "ASHomeBannerCell.h"
+#import "WMZBannerView.h"
+
+@interface ASHomeBannerCell ()
+
+@property (nonatomic,strong) UIPageControl *control;
+@property (nonatomic, strong) WMZBannerView *bannerV;
+
+@end
+
+@implementation ASHomeBannerCell
+
+- (void)showData:(NSArray <ASHomeBannerModel*>*)arr {
+    self.control.numberOfPages = arr.count;
+    self.control.currentPage = 0;
+    
+    NSMutableArray *images = [NSMutableArray array];
+    for (ASHomeBannerModel *m in arr) {
+        [images addObject:m.imgUrl];
+    }
+    @weakify(self);
+    CGFloat h = (KScreenWidth-10-30)/335*445;
+    WMZBannerParam *param = BannerParam()
+    .wFrameSet(CGRectMake(-20,10, KScreenWidth+20, h))
+    .wItemSizeSet(CGSizeMake((KScreenWidth-10-30),h))
+    .wDataSet(images)
+    .wPlaceholderImageSet(@"product_defualtImg")
+    .wScaleFactorSet(0.1f)
+    .wImageFillSet(false)
+    .wCustomImageRadioSet(8)
+    .wEventClickSet(^(id anyID,NSInteger index) {
+        if (arr.count <= index) {
+            return;
+        }
+        ASHomeBannerModel *temp = arr[index];
+        weak_self.selectCallBack(index, temp.title, temp.tapUrl, temp);
+    })
+    .wEventScrollEndSet(^(id anyID, NSInteger index, BOOL isCenter, UICollectionViewCell *cell) {
+//            NSLog(@"滚动到第%ld个,内容:%@",index,anyID);
+//        [self.control setCurrentPage:index];
+    })
+    .wEventDidScrollSet(^(CGPoint offset){
+        [weak_self.control setCurrentPage:self.bannerV.bannerControl.currentPage];
+    })
+    .wSectionInsetSet(UIEdgeInsetsMake(0, 0, 7, 0))
+    .wHideBannerControlSet(true)
+    .wScaleSet(true)
+    //设置item的间距
+    .wLineSpacingSet(10)
+    //开启卡片叠加模式
+//    .wCardOverLapSet(true)
+    //毛玻璃背景
+//    .wEffectSet(YES)
+    //循环
+    .wRepeatSet(true)
+    //开启自动滚动
+    .wAutoScrollSet(YES)
+    ;
+    [self.bannerV resetParam:param];
+}
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+-(instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
+    if (self) {
+        self.selectionStyle = UITableViewCellSelectionStyleNone;
+        [self loadSubV];
+    }
+    return self;
+}
+
+- (void)loadSubV {
+    self.backgroundColor = UIColor.whiteColor;
+    
+    [self.contentView addSubview:self.bannerV];
+    [self.contentView addSubview:self.control];
+    
+    CGFloat h = (KScreenWidth-10-30)/335*445;
+    
+    [self.bannerV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView.mas_top).offset(10);
+        make.left.equalTo(self.contentView).offset(-20);
+        make.right.equalTo(self.contentView).offset(0);
+        make.height.equalTo([NSNumber numberWithFloat:h]);
+    }];
+    
+    [self.control mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.bannerV.mas_bottom).offset(10);
+        make.width.equalTo(@280);
+        make.height.equalTo(@10);
+        make.centerX.equalTo(self.contentView);
+        make.bottom.equalTo(self.contentView).offset(-5);
+    }];
+    
+}
+
+// MARK: - subvs
+
+-(WMZBannerView *)bannerV {
+    if (!_bannerV) {
+        WMZBannerView *v = [[WMZBannerView alloc] init];
+        _bannerV = v;
+    }
+    return _bannerV;
+}
+
+-(UIPageControl *)control {
+    if (!_control) {
+        _control = [[UIPageControl alloc] init];
+        [_control setTintColor:[UIColor colorWithHexString:@"#000000"]];
+        [_control setPageIndicatorTintColor:[[UIColor colorWithHexString:@"#000000"] colorWithAlphaComponent:0.3] ];
+        [_control setCurrentPageIndicatorTintColor:[UIColor colorWithHexString:@"#000000"] ];
+        _control.transform = CGAffineTransformScale(_control.transform, 1.15, 1.15);
+    }
+    return  _control;
+}
+
+@end

+ 24 - 0
Asteria/Fuction/Home/Views/ASHomeBestSellCell.h

@@ -0,0 +1,24 @@
+//
+//  ASHomeBestSellCell.h
+//  Asteria
+//
+//  Created by iOS on 2023/6/6.
+//
+
+#import <UIKit/UIKit.h>
+#import "ASHomeMainListModel.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface ASHomeBestSellCell : UITableViewCell
+
+@property (nonatomic, strong) UILabel *titleLb;
+@property (nonatomic, strong) UICollectionView *collectV;
+
+@property (nonatomic, strong) ASHomeMainListModel *model;
+
+@property (nonatomic, copy) void(^productClick)(NSInteger i, ASProductBaseModel *m);
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 213 - 0
Asteria/Fuction/Home/Views/ASHomeBestSellCell.m

@@ -0,0 +1,213 @@
+//
+//  ASHomeBestSellCell.m
+//  Asteria
+//
+//  Created by iOS on 2023/6/6.
+//
+
+#import "ASHomeBestSellCell.h"
+#import "HomeFlashDealSubCollectCell.h"
+
+@interface ASHomeBestSellCell ()<UICollectionViewDelegate,UICollectionViewDelegateFlowLayout,UICollectionViewDataSource>
+
+
+@property (nonatomic, strong) UIView *bottomV;
+@property (nonatomic, strong) UIButton *moreBt;
+
+@end
+
+@implementation ASHomeBestSellCell
+
+- (void)setModel:(ASHomeMainListModel *)model {
+    _model = model;
+    self.titleLb.text = model.title;
+    CGFloat lineH = (KScreenWidth-30)/2 + productHWithOutImg;
+    NSInteger line = model.productList.count/2;
+    line = line + (model.productList.count%2);
+    CGFloat collH = (lineH + 10)*line + 10;
+    [self.collectV mas_remakeConstraints:^(MASConstraintMaker *make) {
+        make.left.equalTo(self.contentView).offset(0);
+        make.right.equalTo(self.contentView).offset(-0);
+        make.height.equalTo([NSNumber numberWithFloat:collH]);
+        make.top.equalTo(self.titleLb.mas_bottom).offset(20);
+    }];
+    
+}
+
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
+    if (self) {
+        [self loadSubV];
+    }
+    return self;
+}
+
+- (void)loadSubV {
+    self.selectionStyle = UITableViewCellSelectionStyleNone;
+    self.contentView.backgroundColor = [UIColor colorWithHexString:@"#FFFFFF"];
+    self.backgroundColor = [UIColor colorWithHexString:@"#FFFFFF"];
+    
+    
+    [self.contentView addSubview:self.titleLb];
+    [self.contentView addSubview:self.collectV];
+    [self.contentView addSubview:self.bottomV];
+    [self.bottomV addSubview:self.moreBt];
+    
+        
+    [self.titleLb mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(25);
+        make.centerX.equalTo(self.contentView);
+        make.left.greaterThanOrEqualTo(self.contentView).offset(20);
+        make.height.equalTo(@30);
+    }];
+    
+    CGFloat collH = (KScreenWidth-30)/2 + productHWithOutImg;
+    [self.collectV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.equalTo(self.contentView).offset(0);
+        make.right.equalTo(self.contentView).offset(-0);
+        make.height.equalTo([NSNumber numberWithFloat:collH]);
+        make.top.equalTo(self.titleLb.mas_bottom).offset(20);
+    }];
+    [self.bottomV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerX.equalTo(self.contentView);
+        make.height.equalTo(@(20+36));
+        make.leading.equalTo(self.contentView);
+        make.top.equalTo(self.collectV.mas_bottom).offset(20);
+        make.bottom.equalTo(self.contentView).offset(-40);
+    }];
+    [self.moreBt mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.width.equalTo(@200);
+        make.height.equalTo(@36);
+        make.centerX.equalTo(self.bottomV);
+        make.centerY.equalTo(self.bottomV);
+    }];
+    
+   
+}
+
+
+
+
+// MARK: - delegate datasource
+- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
+    
+    if (self.productClick) {
+        
+        ASProductBaseModel *m = self.model.productList[indexPath.row];
+        self.productClick(indexPath.row, m);
+    }
+    
+}
+
+// MARK: - UICollectionViewDataSource
+- (nonnull __kindof UICollectionViewCell *)collectionView:(nonnull UICollectionView *)collectionView cellForItemAtIndexPath:(nonnull NSIndexPath *)indexPath {
+    
+    HomeFlashDealSubCollectCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"HomeFlashDealSubCollectCell" forIndexPath:indexPath];
+    if (self.model.productList.count <= indexPath.row)
+    {
+        return cell;
+    }
+   
+    ASProductBaseModel *m = self.model.productList[indexPath.row];
+    cell.model = m;
+    cell.contView.addCartBt.hidden = true;
+    return cell;
+}
+
+- (NSInteger)collectionView:(nonnull UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
+    return self.model.productList.count;
+}
+
+- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
+    
+    CGFloat marg = 10;
+    CGFloat w = (KScreenWidth-3*marg)/2;
+    CGFloat collH = (KScreenWidth-30)/2 + productHWithOutImg;
+    return CGSizeMake(w, collH);
+}
+
+-(CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section {
+    return 10;
+}
+
+-(CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section {
+    return 10;
+}
+
+- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section {
+    return UIEdgeInsetsMake(10, 10, 10, 10);
+}
+
+
+
+- (UILabel *)titleLb {
+    if (!_titleLb) {
+        UILabel *lb = [[UILabel alloc] init];
+        lb.textColor = [UIColor blackColor];
+        lb.font = [UIFont fontWithName:Rob_Bold size:24];
+        lb.textAlignment = NSTextAlignmentCenter;
+        _titleLb = lb;
+    }
+    return _titleLb;
+}
+
+-(UICollectionView *)collectV {
+    if (!_collectV) {
+        UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
+        layout.sectionInset = UIEdgeInsetsMake(10, 0, 10, 0);
+        layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
+        CGFloat collH = (KScreenWidth-30)/2 + 126;
+        layout.itemSize = CGSizeMake((KScreenWidth - 30)/2, collH);
+        UICollectionView *collV = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, collH) collectionViewLayout:layout];
+        collV.backgroundColor = [UIColor whiteColor];
+        collV.alwaysBounceHorizontal = true;
+        collV.scrollEnabled = false;
+        collV.delegate = self;
+        collV.dataSource = self;
+        collV.showsHorizontalScrollIndicator = false;
+        [collV registerClass:[HomeFlashDealSubCollectCell class] forCellWithReuseIdentifier:@"HomeFlashDealSubCollectCell"];
+        _collectV = collV;
+    }
+    return  _collectV;
+}
+
+-(UIView *)bottomV {
+    if (!_bottomV) {
+        UIView *v = [UIView baseV];
+        v.backgroundColor = Col_FFF;
+        v.clipsToBounds = true;
+        _bottomV = v;
+    }
+    return _bottomV;
+}
+
+- (UIButton *)moreBt {
+    if (!_moreBt) {
+        UIButton *bt = [UIButton buttonWithType:UIButtonTypeCustom];
+        [bt setTitle:@"VIEW MORE" forState:UIControlStateNormal];
+        [bt setTitleColor:Col_000 forState:UIControlStateNormal];
+        bt.titleLabel.font = [UIFont fontWithName:Rob_Regular size:16];
+        bt.layer.cornerRadius = 4;
+        bt.layer.borderColor = Col_000.CGColor;
+        bt.layer.borderWidth = 1;
+        bt.layer.masksToBounds = true;
+        _moreBt = bt;
+    }
+    return _moreBt;
+}
+
+
+
+@end

+ 18 - 0
Asteria/Fuction/Home/Views/ASHomeFlashDealCell.h

@@ -0,0 +1,18 @@
+//
+//  ASHomeFlashDealCell.h
+//  Asteria
+//
+//  Created by iOS on 2023/6/10.
+//
+
+#import "ASHomeBestSellCell.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface ASHomeFlashDealCell : ASHomeBestSellCell
+
+@property (nonatomic, copy) void(^proAddCartClick)(NSInteger i, ASProductBaseModel *m);
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 138 - 0
Asteria/Fuction/Home/Views/ASHomeFlashDealCell.m

@@ -0,0 +1,138 @@
+//
+//  ASHomeFlashDealCell.m
+//  Asteria
+//
+//  Created by iOS on 2023/6/10.
+//
+
+#import "ASHomeFlashDealCell.h"
+#import "KWTimeEndView.h"
+#import "HomeFlashDealSubCollectCell.h"
+
+@interface ASHomeFlashDealCell ()
+
+@property (nonatomic, strong) UIView *timBgV;
+@property (nonatomic, strong) KWTimeEndView *timerV;
+
+@end
+
+@implementation ASHomeFlashDealCell
+
+- (void)setModel:(ASHomeMainListModel *)model {
+    [super setModel:model];
+    self.titleLb.text = model.title;
+    
+    NSTimeInterval elseTime = model.endtime - [[NSDate date] timeIntervalSince1970];
+    if (elseTime <= 0) {
+        [self.timerV setHidden:true];
+    } else {
+        [self.timerV setHidden:false];
+        [self.timerV setTime:elseTime];
+        [self.timerV startTimer];
+    }
+    self.timBgV.hidden = self.timerV.isHidden;
+    
+    CGFloat lineH = (KScreenWidth-30)/2 + productHWithOutImg;
+    NSInteger line = model.productList.count/2;
+    line = line + (model.productList.count%2);
+    CGFloat collH = (lineH + 10)*line + 10;
+    [self.collectV mas_remakeConstraints:^(MASConstraintMaker *make) {
+        make.left.equalTo(self.contentView).offset(0);
+        make.right.equalTo(self.contentView).offset(-0);
+        make.height.equalTo([NSNumber numberWithFloat:collH]);
+        if (self.timBgV.isHidden) {
+            make.top.equalTo(self.titleLb.mas_bottom).offset(20);
+        } else {
+            make.top.equalTo(self.timBgV.mas_bottom).offset(20);
+        }
+        
+    }];
+    
+}
+
+- (void)dealloc {
+    [self.timerV stopTimer];
+}
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
+    if (self) {
+        [self loadSubVs];
+    }
+    return self;
+}
+
+- (void)loadSubVs {
+    [self.contentView addSubview:self.timBgV];
+    [self.timBgV addSubview:self.timerV];
+    [self.timBgV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.titleLb.mas_bottom);
+        make.leading.trailing.equalTo(self.contentView);
+        make.height.equalTo(@44);
+    }];
+    [self.timerV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.leading.trailing.equalTo(self.timBgV);
+        make.bottom.equalTo(self.timBgV);
+        make.height.equalTo(@24);
+    }];
+    CGFloat collH = (KScreenWidth-30)/2 + productHWithOutImg;
+    [self.collectV mas_remakeConstraints:^(MASConstraintMaker *make) {
+        make.left.equalTo(self.contentView).offset(0);
+        make.right.equalTo(self.contentView).offset(-0);
+        make.height.equalTo([NSNumber numberWithFloat:collH]);
+        make.top.equalTo(self.timBgV.mas_bottom).offset(20);
+    }];
+    
+    
+}
+
+- (nonnull __kindof UICollectionViewCell *)collectionView:(nonnull UICollectionView *)collectionView cellForItemAtIndexPath:(nonnull NSIndexPath *)indexPath {
+    
+    HomeFlashDealSubCollectCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"HomeFlashDealSubCollectCell" forIndexPath:indexPath];
+    if (self.model.productList.count <= indexPath.row)
+    {
+        return cell;
+    }
+   
+    ASProductBaseModel *m = self.model.productList[indexPath.row];
+    cell.model = m;
+    cell.contView.addCartBt.hidden = false;
+    __weak typeof(self) wSelf = self;
+    cell.contView.addCartBlock = ^(ASProductBaseModel * _Nonnull m) {
+        if (wSelf.proAddCartClick) {
+            wSelf.proAddCartClick(indexPath.row, m);
+        }
+    };
+    return cell;
+}
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+- (KWTimeEndView *)timerV {
+    if (!_timerV) {
+        KWTimeEndView *v = [[KWTimeEndView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, 24)];
+        _timerV = v;
+    }
+    return _timerV;
+}
+
+- (UIView *)timBgV {
+    if (!_timBgV) {
+        UIView *v = [UIView baseV];
+        v.backgroundColor = UIColor.clearColor;
+        _timBgV = v;
+    }
+    return _timBgV;
+}
+
+
+@end

+ 20 - 0
Asteria/Fuction/Home/Views/ASHomeImgCell.h

@@ -0,0 +1,20 @@
+//
+//  ASHomeImgCell.h
+//  Asteria
+//
+//  Created by iOS on 2023/6/10.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface ASHomeImgCell : UITableViewCell
+
+@property (nonatomic, copy) btnClickBlock tapImgBlock;
+
+- (void)setImgStr:(NSString *)imgStr;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 83 - 0
Asteria/Fuction/Home/Views/ASHomeImgCell.m

@@ -0,0 +1,83 @@
+//
+//  ASHomeImgCell.m
+//  Asteria
+//
+//  Created by iOS on 2023/6/10.
+//
+
+#import "ASHomeImgCell.h"
+
+@interface ASHomeImgCell ()
+
+@property (nonatomic, strong) UIImageView *imgV;
+@property (nonatomic, strong) UIButton *bt;
+
+
+@end
+
+@implementation ASHomeImgCell
+
+- (void)setImgStr:(NSString *)imgStr {
+    [self.imgV sd_setImageWithURL:[NSURL URLWithString:imgStr] placeholderImage:[UIImage imageNamed:@"product_defualtImg"]];
+}
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
+    if (self) {
+        [self loadSubV];
+    }
+    return self;
+}
+
+- (void)loadSubV {
+    self.selectionStyle = UITableViewCellSelectionStyleNone;
+    self.backgroundColor = _0E0E0F;
+    [self.contentView addSubview:self.imgV];
+    [self.imgV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.edges.equalTo(self.contentView);
+        make.width.equalTo(self.imgV.mas_height).multipliedBy(375.0/200);
+    }];
+    [self.contentView addSubview:self.bt];
+    [self.bt mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.edges.equalTo(self.contentView);
+    }];
+}
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+
+- (UIImageView *)imgV {
+    if (!_imgV) {
+        UIImageView *v = [UIImageView baseImgV];
+        v.contentMode = UIViewContentModeScaleAspectFill;
+        v.clipsToBounds = true;
+        _imgV = v;
+    }
+    return _imgV;
+}
+
+- (UIButton *)bt {
+    if (!_bt) {
+        UIButton *b = [UIButton buttonWithType:UIButtonTypeCustom];
+        [b addTarget:self action:@selector(btAction) forControlEvents:UIControlEventTouchUpInside];
+        _bt = b;
+    }
+    return _bt;
+}
+
+- (void)btAction {
+    if (self.tapImgBlock) {
+        self.tapImgBlock();
+    }
+}
+
+@end

+ 21 - 0
Asteria/Fuction/Home/Views/ASHomeLookingCell.h

@@ -0,0 +1,21 @@
+//
+//  ASHomeLookingCell.h
+//  Asteria
+//
+//  Created by iOS on 2023/6/10.
+//
+
+#import <UIKit/UIKit.h>
+#import "ASHomeMainListModel.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface ASHomeLookingCell : UITableViewCell
+
+@property (nonatomic, copy) void(^itemClick)(NSInteger i, ASHomeCategoryModel *m);
+
+@property (nonatomic, strong) ASHomeMainListModel *model;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 199 - 0
Asteria/Fuction/Home/Views/ASHomeLookingCell.m

@@ -0,0 +1,199 @@
+//
+//  ASHomeLookingCell.m
+//  Asteria
+//
+//  Created by iOS on 2023/6/10.
+//
+
+#import "ASHomeLookingCell.h"
+#import "KWScrollOffsetView.h"
+#import "ASHomeLookingCollCell.h"
+
+@interface ASHomeLookingCell ()<UICollectionViewDelegate,UICollectionViewDelegateFlowLayout,UICollectionViewDataSource>
+
+@property (nonatomic, strong) UICollectionView *collectV;
+
+@property (nonatomic, strong) UILabel *titleLb;
+
+@property (nonatomic, strong) KWScrollOffsetView *offsetV;
+
+
+
+
+@end
+
+@implementation ASHomeLookingCell
+
+- (void)setModel:(ASHomeMainListModel *)model {
+    _model = model;
+    self.titleLb.text = model.title;
+    [self.collectV reloadData];
+    
+    
+}
+
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+    
+    // Configure the view for the selected state
+}
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
+    if (self) {
+        [self loadSubV];
+    }
+    return self;
+}
+
+- (void)loadSubV {
+    self.selectionStyle = UITableViewCellSelectionStyleNone;
+    self.contentView.backgroundColor = [UIColor colorWithHexString:@"#FFFFFF"];
+    self.backgroundColor = [UIColor colorWithHexString:@"#FFFFFF"];
+    
+    [self.contentView addSubview:self.titleLb];
+    [self.contentView addSubview:self.collectV];
+    [self.contentView addSubview:self.offsetV];
+    
+    [self.titleLb mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(50);
+        make.centerX.equalTo(self.contentView);
+        make.left.greaterThanOrEqualTo(self.contentView).offset(20);
+        make.height.equalTo(@30);
+    }];
+    
+    CGFloat collH = ((KScreenWidth-30)/2 + 28)*2 + 10;
+    [self.collectV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.equalTo(self.contentView).offset(0);
+        make.right.equalTo(self.contentView).offset(-0);
+        make.height.equalTo([NSNumber numberWithFloat:collH]);
+        make.top.equalTo(self.titleLb.mas_bottom).offset(30);
+    }];
+    
+    [self.offsetV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerX.equalTo(self.contentView);
+        make.height.equalTo(@2);
+        make.width.equalTo(@137);
+        make.top.equalTo(self.collectV.mas_bottom).offset(40);
+        make.bottom.equalTo(self.contentView.mas_bottom).offset(-50);
+    }];
+    
+}
+
+
+
+
+// MARK: - delegate datasource
+- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
+    if (self.offsetV.isHidden) {
+        return;
+    }
+    CGFloat offset = scrollView.contentOffset.x;
+    CGFloat itemWidth = (KScreenWidth-20);
+    NSArray<ASProductBaseModel*> *arr = self.model.productList;
+    if (arr.count > 0) {
+        CGFloat maxOffset = (arr.count * (itemWidth + 10) - 10 ) - (KScreenWidth-20);
+        self.offsetV.offset = offset/maxOffset;
+    }
+}
+
+- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
+    
+        if (self.itemClick) {
+    
+            ASHomeCategoryModel *m = self.model.titleArr[indexPath.row];
+            self.itemClick(indexPath.row, m);
+        }
+    
+}
+
+// MARK: - UICollectionViewDataSource
+- (nonnull __kindof UICollectionViewCell *)collectionView:(nonnull UICollectionView *)collectionView cellForItemAtIndexPath:(nonnull NSIndexPath *)indexPath {
+    ASHomeLookingCollCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"ASHomeLookingCollCell" forIndexPath:indexPath];
+    if (indexPath.row >= self.model.titleArr.count) {
+        return cell;
+    }
+    ASHomeCategoryModel *m = self.model.titleArr[indexPath.row];
+    [cell setData:m];
+    return cell;
+}
+
+- (NSInteger)collectionView:(nonnull UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
+    return self.model.titleArr.count;
+}
+
+- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
+    
+    CGFloat marg = 10;
+    CGFloat w = (KScreenWidth-3*marg)/2;
+    CGFloat collH = ((KScreenWidth-30)/2 + 28);
+    return CGSizeMake(w, collH);
+}
+
+-(CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section {
+    return 10;
+}
+
+-(CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section {
+    return 10;
+}
+
+- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section {
+    return UIEdgeInsetsMake(0, 10, 0, 10);
+}
+
+
+
+- (UILabel *)titleLb {
+    if (!_titleLb) {
+        UILabel *lb = [[UILabel alloc] init];
+        lb.textColor = [UIColor blackColor];
+        lb.font = [UIFont fontWithName:Rob_Bold size:24];
+        lb.textAlignment = NSTextAlignmentCenter;
+        _titleLb = lb;
+    }
+    return _titleLb;
+}
+
+-(UICollectionView *)collectV {
+    if (!_collectV) {
+        UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
+        layout.sectionInset = UIEdgeInsetsMake(10, 0, 10, 0);
+        layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
+        CGFloat collH = ((KScreenWidth-30)/2 + 28)*2 + 10;
+        CGFloat marg = 10;
+        CGFloat w = (KScreenWidth-3*marg)/2;
+        CGFloat itemH = ((KScreenWidth-30)/2 + 28);
+        layout.itemSize = CGSizeMake(w, itemH);
+        UICollectionView *collV = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, collH) collectionViewLayout:layout];
+        collV.backgroundColor = [UIColor whiteColor];
+        collV.alwaysBounceHorizontal = true;
+        collV.scrollEnabled = true;
+        collV.delegate = self;
+        collV.dataSource = self;
+        collV.showsHorizontalScrollIndicator = false;
+        [collV registerClass:[ASHomeLookingCollCell class] forCellWithReuseIdentifier:@"ASHomeLookingCollCell"];
+        _collectV = collV;
+    }
+    return  _collectV;
+}
+
+- (KWScrollOffsetView *)offsetV {
+    if (!_offsetV) {
+        KWScrollOffsetView *v = [[KWScrollOffsetView alloc] initWithFrame:CGRectMake(0, 0, 137, 2)];
+        v.clipsToBounds = true;
+        v.offWidth = 54;
+        v.offset = 0;
+        _offsetV = v;
+    }
+    return _offsetV;
+}
+
+
+@end

+ 22 - 0
Asteria/Fuction/Home/Views/ASHomeNewInCellTableViewCell.h

@@ -0,0 +1,22 @@
+//
+//  ASHomeNewInCellTableViewCell.h
+//  Asteria
+//
+//  Created by iOS on 2023/6/9.
+//
+
+#import <UIKit/UIKit.h>
+#import "ASHomeMainListModel.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface ASHomeNewInCellTableViewCell : UITableViewCell
+
+@property (nonatomic, copy) void(^productClick)(NSInteger i, ASProductBaseModel *m);
+
+//
+-(void)setData:(ASHomeMainListModel *)model;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 266 - 0
Asteria/Fuction/Home/Views/ASHomeNewInCellTableViewCell.m

@@ -0,0 +1,266 @@
+//
+//  ASHomeNewInCellTableViewCell.m
+//  Asteria
+//
+//  Created by iOS on 2023/6/9.
+//
+
+#import "ASHomeNewInCellTableViewCell.h"
+#import "KWScrollOffsetView.h"
+#import "ASHomeNewInSubCollectCell.h"
+
+
+@interface ASHomeNewInCellTableViewCell ()<UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout>
+
+@property (nonatomic, strong) UIView *colorBgV;
+@property (nonatomic, strong) UICollectionView *collectV;
+
+@property (nonatomic, strong) UILabel *titleLb;
+
+@property (nonatomic, strong) KWScrollOffsetView *offsetV;
+
+@property (nonatomic, strong) UIView *bottomV;
+@property (nonatomic, strong) UIButton *moreBt;
+
+@property (nonatomic, strong) ASHomeMainListModel *model;
+
+
+
+@end
+
+@implementation ASHomeNewInCellTableViewCell
+
+-(void)setData:(ASHomeMainListModel *)model {
+    self.model = model;
+    self.titleLb.text = self.model.title;
+    [self.collectV reloadData];
+}
+
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
+    if (self) {
+        [self loadSubV];
+    }
+    return self;
+}
+
+- (void)loadSubV {
+    self.selectionStyle = UITableViewCellSelectionStyleNone;
+    self.contentView.backgroundColor = [UIColor colorWithHexString:@"#FFFFFF"];
+    self.backgroundColor = [UIColor colorWithHexString:@"#FFFFFF"];
+
+    self.offsetV.backgroundColor = _B1B1B1;
+    self.offsetV.offsetV.backgroundColor = Col_FFF;
+    
+    [self.contentView addSubview:self.colorBgV];
+    [self.colorBgV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.edges.equalTo(self.contentView);
+    }];
+    [self.contentView addSubview:self.titleLb];
+    [self.contentView addSubview:self.collectV];
+    [self.contentView addSubview:self.offsetV];
+    [self.contentView addSubview:self.bottomV];
+    [self.bottomV addSubview:self.moreBt];
+    
+        
+    [self.titleLb mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(50);
+        make.centerX.equalTo(self.contentView);
+        make.left.greaterThanOrEqualTo(self.contentView).offset(20);
+        make.height.equalTo(@30);
+        make.width.greaterThanOrEqualTo(@80);
+    }];
+    
+    CGFloat collH = (KScreenWidth-20) + productHWithOutImg+10;
+    [self.collectV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.equalTo(self.contentView).offset(0);
+        make.right.equalTo(self.contentView).offset(0);
+        make.height.equalTo([NSNumber numberWithFloat:collH]);
+        make.top.equalTo(self.titleLb.mas_bottom).offset(30);
+    }];
+    [self.offsetV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerX.equalTo(self.contentView);
+        make.height.equalTo(@2);
+        make.width.equalTo(@137);
+        make.top.equalTo(self.collectV.mas_bottom).offset(11);
+    }];
+    
+    [self.bottomV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerX.equalTo(self.contentView);
+        make.height.equalTo(@(20+36));
+        make.leading.equalTo(self.contentView);
+        make.top.equalTo(self.offsetV.mas_bottom).offset(20);
+        make.bottom.equalTo(self.contentView).offset(-40);
+    }];
+    [self.moreBt mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.width.equalTo(@200);
+        make.height.equalTo(@36);
+        make.centerX.equalTo(self.bottomV);
+        make.centerY.equalTo(self.bottomV);
+    }];
+    
+    
+    dispatch_async(dispatch_get_main_queue(), ^{
+        [UIView viewAddHorColorBg:self.colorBgV colorArr:@[
+            (id)(_043632.CGColor),
+            (id)(_0E0E0F.CGColor),
+        ] startP:CGPointMake(0.5, 0.1) endP:CGPointMake(0.5, 1)];
+    });
+   
+}
+
+// MARK: - UICollectionViewDelegate
+
+- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
+    if (self.offsetV.isHidden) {
+        return;
+    }
+    CGFloat offset = scrollView.contentOffset.x;
+    CGFloat itemWidth = (KScreenWidth-20);
+    NSArray<ASProductBaseModel*> *arr = self.model.productList;
+    if (arr.count > 0) {
+        CGFloat maxOffset = (arr.count * (itemWidth + 10) - 10 ) - (KScreenWidth-20);
+        self.offsetV.offset = offset/maxOffset;
+    }
+}
+
+- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
+    
+    
+    if (self.productClick) {
+        NSArray<ASProductBaseModel*> *arr = self.model.productList;
+        ASProductBaseModel *m = arr[indexPath.row];
+        self.productClick(indexPath.row, m);
+    }
+    
+}
+
+// MARK: - UICollectionViewDataSource
+- (nonnull __kindof UICollectionViewCell *)collectionView:(nonnull UICollectionView *)collectionView cellForItemAtIndexPath:(nonnull NSIndexPath *)indexPath {
+    
+    ASHomeNewInSubCollectCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"ASHomeNewInSubCollectCell" forIndexPath:indexPath];
+    NSArray<ASProductBaseModel*> *arr = self.model.productList;
+    ASProductBaseModel *m = arr[indexPath.row];
+    cell.model = m;
+    return cell;
+}
+
+- (NSInteger)collectionView:(nonnull UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
+    
+    NSArray<ASProductBaseModel*> *arr = self.model.productList;
+    return arr.count;
+}
+
+- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
+    
+    CGFloat marg = 10;
+    CGFloat w = (KScreenWidth-2*marg);
+    CGFloat collH = (KScreenWidth-20) + productHWithOutImg+10;
+    return CGSizeMake(w, collH);
+}
+
+-(CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section {
+    return 10;
+}
+
+-(CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section {
+    return 10;
+}
+
+- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section {
+    return UIEdgeInsetsMake(0, 10, 0, 10);
+}
+
+
+
+// MARK: - subvs
+- (UILabel *)titleLb {
+    if (!_titleLb) {
+        UILabel *lb = [[UILabel alloc] init];
+        lb.textColor = [UIColor whiteColor];
+        lb.font = [UIFont fontWithName:Rob_Bold size:24];
+        lb.textAlignment = NSTextAlignmentCenter;
+        _titleLb = lb;
+    }
+    return _titleLb;
+}
+
+
+- (KWScrollOffsetView *)offsetV {
+    if (!_offsetV) {
+        KWScrollOffsetView *v = [[KWScrollOffsetView alloc] initWithFrame:CGRectMake(0, 0, 137, 2)];
+        v.clipsToBounds = true;
+        v.offWidth = 54;
+        v.offset = 0;
+        _offsetV = v;
+    }
+    return _offsetV;
+}
+
+-(UICollectionView *)collectV {
+    if (!_collectV) {
+        UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
+        layout.sectionInset = UIEdgeInsetsMake(10, 0, 10, 0);
+        layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
+        CGFloat collH = (KScreenWidth-30)/2 + 126;
+        layout.itemSize = CGSizeMake((KScreenWidth - 30)/2, collH);
+        UICollectionView *collV = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, collH) collectionViewLayout:layout];
+        collV.backgroundColor = [UIColor clearColor];
+        collV.alwaysBounceHorizontal = true;
+//        collV.pagingEnabled = true;
+        collV.delegate = self;
+        collV.dataSource = self;
+        collV.showsHorizontalScrollIndicator = false;
+        [collV registerClass:[ASHomeNewInSubCollectCell class] forCellWithReuseIdentifier:@"ASHomeNewInSubCollectCell"];
+        _collectV = collV;
+    }
+    return  _collectV;
+}
+
+-(UIView *)bottomV {
+    if (!_bottomV) {
+        UIView *v = [UIView baseV];
+        v.backgroundColor = UIColor.clearColor;
+        v.clipsToBounds = true;
+        _bottomV = v;
+    }
+    return _bottomV;
+}
+
+- (UIButton *)moreBt {
+    if (!_moreBt) {
+        UIButton *bt = [UIButton buttonWithType:UIButtonTypeCustom];
+        [bt setTitle:@"VIEW MORE" forState:UIControlStateNormal];
+        [bt setTitleColor:Col_FFF forState:UIControlStateNormal];
+        bt.titleLabel.font = [UIFont fontWithName:Rob_Regular size:16];
+        bt.layer.cornerRadius = 4;
+        bt.layer.borderColor = Col_FFF.CGColor;
+        bt.layer.borderWidth = 1;
+        bt.layer.masksToBounds = true;
+        _moreBt = bt;
+    }
+    return _moreBt;
+}
+
+- (UIView *)colorBgV {
+    if (!_colorBgV) {
+        UIView *v = [UIView baseV];
+        v.backgroundColor = _043632;
+        _colorBgV = v;
+    }
+    return _colorBgV;
+}
+
+@end

+ 16 - 0
Asteria/Fuction/Home/Views/ASHomeTipCell.h

@@ -0,0 +1,16 @@
+//
+//  ASHomeTipCell.h
+//  Asteria
+//
+//  Created by iOS on 2023/6/6.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface ASHomeTipCell : UITableViewCell
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 105 - 0
Asteria/Fuction/Home/Views/ASHomeTipCell.m

@@ -0,0 +1,105 @@
+//
+//  ASHomeTipCell.m
+//  Asteria
+//
+//  Created by iOS on 2023/6/6.
+//
+
+#import "ASHomeTipCell.h"
+#import "ASHomeTipCollectCell.h"
+
+@interface ASHomeTipCell () <UICollectionViewDelegate,UICollectionViewDataSource>
+
+@property (nonatomic, strong) UICollectionView *collV;
+@property (nonatomic, strong) NSArray <NSString *>*titleArr;
+@property (nonatomic, strong) NSArray <NSString *>*imgArr;
+
+
+@end
+
+@implementation ASHomeTipCell
+
+- (void)setData {
+    self.titleArr = [NSArray arrayWithObjects:@"USA UK CAN\nFREE SHIPPING",@"INTERNATIONAL\nEXPRESS SHIPPING",@"SECURE PAYMENTS\nCREDIT PAY IN 4",@"30 DAYS FREE\nRETURN/EXCHANGE", nil];
+    self.imgArr = @[@"trade_tip",@"air_tip",@"pay_tip",@"box_tip"];
+    [self.collV reloadData];
+}
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
+    if (self) {
+        self.selectionStyle = UITableViewCellSelectionStyleNone;
+        [self.contentView addSubview:self.collV];
+        CGFloat margin = 10;
+        CGFloat w = (KScreenWidth- 3*margin-1)/2;
+        CGFloat h = w/172*55;
+        CGFloat colH = h*2 + margin+2;
+        [self.collV mas_makeConstraints:^(MASConstraintMaker *make) {
+            make.top.equalTo(self.contentView).offset(25);
+            make.leading.trailing.equalTo(self.contentView);
+            make.height.equalTo(@(colH));
+            make.bottom.equalTo(self.contentView).offset(-25);
+        }];
+        [self setData];
+    }
+    return self;
+}
+
+- (UICollectionView *)collV {
+    if (!_collV) {
+        UICollectionViewFlowLayout *layout = [UICollectionViewFlowLayout new];
+        CGFloat margin = 10;
+        CGFloat w = (KScreenWidth- 3*margin-1)/2;
+        CGFloat h = w/172*55;
+        CGFloat colH = h*2 + margin+2;
+        layout.itemSize = CGSizeMake(w, h)  ;
+        layout.sectionInset = UIEdgeInsetsMake(0, margin, 0, margin);
+        layout.minimumLineSpacing = margin;
+        layout.minimumInteritemSpacing = margin;
+        layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
+        UICollectionView *col = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, colH) collectionViewLayout:layout];
+        [col registerClass:[ASHomeTipCollectCell class] forCellWithReuseIdentifier:@"ASHomeTipCollectCell"];
+        col.showsHorizontalScrollIndicator = false;
+        col.delegate = self;
+        col.dataSource = self;
+        _collV = col;
+    }
+    return _collV;
+}
+
+
+
+
+// MARK: - coll delegate datasource
+- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
+    return self.titleArr.count;
+}
+
+- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
+    ASHomeTipCollectCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"ASHomeTipCollectCell" forIndexPath:indexPath];
+    if (self.titleArr.count <= indexPath.row) {
+        return cell;
+    }
+    NSString *titleStr = self.titleArr[indexPath.row];
+    NSString *imgName = self.imgArr[indexPath.row];
+    cell.imgV.image = [UIImage imageNamed:imgName];
+    cell.titleLb.text = titleStr;
+    return cell;
+}
+
+- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
+    
+}
+
+@end

+ 21 - 0
Asteria/Fuction/Home/Views/productList/ASProductListActiveHeaderView.h

@@ -0,0 +1,21 @@
+//
+//  ASProductListActiveHeaderView.h
+//  Asteria
+//
+//  Created by iOS on 2023/6/12.
+//
+
+#import <UIKit/UIKit.h>
+#import "ASHomeActiveView.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface ASProductListActiveHeaderView : UICollectionReusableView
+
+
+
+- (void)setData:(NSArray <ASHomeBannerModel *>*)arr tapBlock: (void(^)(ASHomeBannerModel * _Nullable m))tapBlock;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 49 - 0
Asteria/Fuction/Home/Views/productList/ASProductListActiveHeaderView.m

@@ -0,0 +1,49 @@
+//
+//  ASProductListActiveHeaderView.m
+//  Asteria
+//
+//  Created by iOS on 2023/6/12.
+//
+
+#import "ASProductListActiveHeaderView.h"
+
+@interface ASProductListActiveHeaderView ()
+
+@property (nonatomic, strong, nullable) ASHomeActiveView *activeV;
+
+@end
+
+@implementation ASProductListActiveHeaderView
+
+- (instancetype)initWithFrame:(CGRect)frame
+{
+    self = [super initWithFrame:frame];
+    if (self) {
+        [self loadV];
+    }
+    return self;
+}
+
+- (void)loadV {
+    [self addSubview:self.activeV];
+    [self.activeV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.edges.equalTo(self);
+        make.height.equalTo(@40);
+    }];
+}
+
+
+- (void)setData:(NSArray <ASHomeBannerModel *>*)arr tapBlock: (void(^)(ASHomeBannerModel * _Nullable m))tapBlock {
+    self.activeV.tapBlock = tapBlock;
+    [self.activeV setData:arr];
+}
+
+- (ASHomeActiveView *)activeV {
+    if (!_activeV) {
+        ASHomeActiveView *v = [[ASHomeActiveView alloc] initWithFrame:CGRectZero];
+        _activeV = v;
+    }
+    return _activeV;
+}
+
+@end

+ 20 - 0
Asteria/Fuction/Home/Views/productList/ASProductListMenuHeaderView.h

@@ -0,0 +1,20 @@
+//
+//  ASProductListMenuHeaderView.h
+//  Asteria
+//
+//  Created by iOS on 2023/6/12.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface ASProductListMenuHeaderView : UICollectionReusableView
+
+
+
+- (void)setData:(NSString *)sortTitle sortBlock:(btnClickBlock)sortBlock menuBlock:(btnClickBlock)menuBlock;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 93 - 0
Asteria/Fuction/Home/Views/productList/ASProductListMenuHeaderView.m

@@ -0,0 +1,93 @@
+//
+//  ASProductListMenuHeaderView.m
+//  Asteria
+//
+//  Created by iOS on 2023/6/12.
+//
+
+#import "ASProductListMenuHeaderView.h"
+
+@interface ASProductListMenuHeaderView ()
+
+@property (nonatomic, strong) UIView *sortMenuV;
+@property (nonatomic, strong) UIButton *sortBt;
+@property (nonatomic, strong) UIButton *menuBt;
+
+@property (nonatomic, copy) btnClickBlock menuBlock;
+@property (nonatomic, copy) btnClickBlock sortBlock;
+
+@end
+
+
+@implementation ASProductListMenuHeaderView
+
+- (void)setData:(NSString *)sortTitle sortBlock:(btnClickBlock)sortBlock menuBlock:(btnClickBlock)menuBlock {
+    [self.sortBt setTitle:sortTitle forState:UIControlStateNormal];
+    self.sortBlock = sortBlock;
+    self.menuBlock = menuBlock;
+}
+
+- (void)sortBtAction {
+    if (self.sortBlock) {
+        self.sortBlock();
+    }
+}
+
+- (void)menuBtAction {
+    if (self.menuBlock) {
+        self.menuBlock();
+    }
+}
+
+// MARK: - init
+- (instancetype)initWithFrame:(CGRect)frame
+{
+    self = [super initWithFrame:frame];
+    if (self) {
+        [self loadV];
+    }
+    return self;
+}
+
+- (void)loadV {
+    self.sortMenuV.frame = CGRectMake(0, 0, KScreenWidth, 60);
+    [self.sortBt mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.leading.equalTo(self.sortMenuV).offset(15);
+        make.height.equalTo(@22);
+        make.centerY.equalTo(self.sortMenuV);
+    }];
+    [self.menuBt mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.trailing.equalTo(self.sortMenuV).offset(-15);
+        make.width.height.equalTo(@34);
+        make.centerY.equalTo(self.sortMenuV);
+        make.leading.greaterThanOrEqualTo(self.sortBt.mas_trailing).offset(10);
+    }];
+    [self addSubview:self.sortMenuV];
+    [self.sortMenuV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.edges.equalTo(self);
+        make.height.equalTo(@60);
+    }];
+}
+
+- (UIView *)sortMenuV {
+    if (!_sortMenuV) {
+        UIView *v = [UIView baseV];
+        v.backgroundColor = _F5F5F5;
+        UIButton *sortBt = [UIButton buttonWithType:UIButtonTypeCustom];
+        [sortBt setTitle:@"SORT BY" forState:UIControlStateNormal];
+        [sortBt setTitleColor:Col_000 forState:UIControlStateNormal];
+        sortBt.titleLabel.font = [UIFont fontWithName:Rob_Bold size:14];
+        [sortBt addTarget:self action:@selector(sortBtAction) forControlEvents:UIControlEventTouchUpInside];
+        self.sortBt = sortBt;
+        UIButton *nBt = [UIButton buttonWithType:UIButtonTypeCustom];
+        [nBt setImage:[UIImage imageNamed:@"productList_menu"] forState:UIControlStateNormal];
+        [nBt addTarget:self action:@selector(menuBtAction) forControlEvents:UIControlEventTouchUpInside];
+        self.menuBt = nBt;
+        [v addSubview:self.sortBt];
+        [v addSubview:self.menuBt];
+        _sortMenuV = v;
+    }
+    return _sortMenuV;
+}
+
+@end

+ 19 - 0
Asteria/Fuction/Home/Views/someViews/ASCategaryCollectCell.h

@@ -0,0 +1,19 @@
+//
+//  ASCategaryCollectCell.h
+//  Asteria
+//
+//  Created by iOS on 2023/6/6.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface ASCategaryCollectCell : UICollectionViewCell
+
+@property (nonatomic, strong) UIImageView *imgV;
+@property (nonatomic, strong) UILabel *titleLb;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 60 - 0
Asteria/Fuction/Home/Views/someViews/ASCategaryCollectCell.m

@@ -0,0 +1,60 @@
+//
+//  ASCategaryCollectCell.m
+//  Asteria
+//
+//  Created by iOS on 2023/6/6.
+//
+
+#import "ASCategaryCollectCell.h"
+
+@implementation ASCategaryCollectCell
+
+- (instancetype)initWithFrame:(CGRect)frame {
+    self = [super initWithFrame:frame];
+    if (self) {
+        [self loadSubV];
+    }
+    return self;
+}
+
+- (void)loadSubV {
+    self.contentView.backgroundColor = UIColor.whiteColor;
+    [self.contentView addSubview:self.imgV];
+    [self.imgV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.edges.equalTo(self.contentView);
+        make.width.height.equalTo(@112);
+    }];
+    [self.contentView addSubview:self.titleLb];
+    [self.titleLb mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.bottom.equalTo(self.contentView).offset(-16);
+        make.leading.equalTo(self.contentView).offset(18);
+        make.trailing.equalTo(self.contentView).offset(-18);
+    }];
+}
+
+- (UIImageView *)imgV {
+    if (!_imgV) {
+        UIImageView *imgV = [UIImageView baseImgV];
+        imgV.contentMode = UIViewContentModeScaleAspectFill;
+        imgV.clipsToBounds = true;
+        
+        imgV.layer.cornerRadius = 56;
+        imgV.layer.masksToBounds = true;
+        _imgV = imgV;
+    }
+    return _imgV;
+}
+
+- (UILabel *)titleLb {
+    if (!_titleLb) {
+        UILabel *lb = [UILabel baseLb];
+        lb.textColor = Col_FFF;
+        lb.font = [UIFont fontWithName:Rob_Bold size:12];
+        lb.textAlignment = NSTextAlignmentCenter;
+        lb.numberOfLines = 2;
+        _titleLb = lb;
+    }
+    return _titleLb;
+}
+
+@end

+ 21 - 0
Asteria/Fuction/Home/Views/someViews/ASHomeLookingCollCell.h

@@ -0,0 +1,21 @@
+//
+//  ASHomeLookingCollCell.h
+//  Asteria
+//
+//  Created by iOS on 2023/6/10.
+//
+
+#import <UIKit/UIKit.h>
+#import "ASHomeCategoryModel.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface ASHomeLookingCollCell : UICollectionViewCell
+
+- (void)setData:(ASHomeCategoryModel *)m;
+
+
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 73 - 0
Asteria/Fuction/Home/Views/someViews/ASHomeLookingCollCell.m

@@ -0,0 +1,73 @@
+//
+//  ASHomeLookingCollCell.m
+//  Asteria
+//
+//  Created by iOS on 2023/6/10.
+//
+
+#import "ASHomeLookingCollCell.h"
+
+@interface ASHomeLookingCollCell ()
+
+@property (nonatomic, strong) UIImageView *imgV;
+@property (nonatomic, strong) UILabel *titleLb;
+@property (nonatomic, strong) ASHomeCategoryModel *model;
+
+@end
+
+@implementation ASHomeLookingCollCell
+
+- (void)setData:(ASHomeCategoryModel *)m {
+    self.model = m;
+    [self.imgV sd_setImageWithURL:[NSURL URLWithString:m.imgUrl] placeholderImage:[UIImage imageNamed:@"product_defualtImg"]];
+    self.titleLb.text = m.title;
+}
+
+
+- (instancetype)initWithFrame:(CGRect)frame {
+    self = [super initWithFrame:frame];
+    if (self) {
+        [self loadVs];
+    }
+    return self;
+}
+
+- (void)loadVs {
+    [self.contentView addSubview:self.imgV];
+    [self.contentView addSubview:self.titleLb];
+    [self.imgV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.leading.trailing.equalTo(self.contentView);
+        make.width.equalTo(self.imgV.mas_height);
+    }];
+    [self.titleLb mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.height.equalTo(@18);
+        make.bottom.leading.trailing.equalTo(self.contentView);
+    }];
+}
+
+
+
+
+- (UIImageView *)imgV {
+    if (!_imgV) {
+        UIImageView *v = [UIImageView baseImgV];
+        v.contentMode = UIViewContentModeScaleAspectFill;
+        v.layer.cornerRadius = 8;
+        v.layer.masksToBounds = true;
+        v.clipsToBounds = true;
+        _imgV = v;
+    }
+    return _imgV;
+}
+- (UILabel *)titleLb {
+    if (!_titleLb) {
+        UILabel *lb = [UILabel baseLb];
+        lb.font = [UIFont fontWithName:Rob_Regular size:12];
+        lb.textAlignment = NSTextAlignmentCenter;
+        lb.textColor = Col_000;
+        _titleLb = lb;
+    }
+    return _titleLb;
+}
+
+@end

+ 20 - 0
Asteria/Fuction/Home/Views/someViews/ASHomeNewInProductItemView.h

@@ -0,0 +1,20 @@
+//
+//  ASHomeNewInProductItemView.h
+//  Asteria
+//
+//  Created by iOS on 2023/6/9.
+//
+
+#import "ASProductItemView.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface ASHomeNewInProductItemView : ASProductItemView
+
+@property (nonatomic, strong) UIImageView *priceBgV;
+@property (nonatomic, strong) UILabel *priceLb;
+
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 78 - 0
Asteria/Fuction/Home/Views/someViews/ASHomeNewInProductItemView.m

@@ -0,0 +1,78 @@
+//
+//  ASHomeNewInProductItemView.m
+//  Asteria
+//
+//  Created by iOS on 2023/6/9.
+//
+
+#import "ASHomeNewInProductItemView.h"
+
+@implementation ASHomeNewInProductItemView
+
+- (void)setModel:(ASProductBaseModel *)model {
+    [super setModel:model];
+    self.nowPriceLb.hidden = true;
+    self.oldPriceLb.hidden = true;
+    self.priceLb.text = model.nowPrice;
+}
+
+- (instancetype)initWithFrame:(CGRect)frame {
+    self = [super initWithFrame:frame];
+    if (self) {
+        [self loadSubV];
+    }
+    return self;
+}
+
+- (void)loadSubV {
+    
+    [self.addCartBt setImage:[UIImage imageNamed:@"home_newin_addCart"] forState:UIControlStateNormal];
+    [self addSubview:self.priceBgV];
+    [self addSubview:self.priceLb];
+    
+    self.oldPriceLb.hidden = true;
+    self.nowPriceLb.hidden = true;
+    self.hotLb.hidden = true;
+    [self.priceBgV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.leading.equalTo(self.titleLb);
+        make.height.equalTo(@16);
+        make.bottom.equalTo(self.mas_bottom).offset(-20);
+        make.top.greaterThanOrEqualTo(self.titleLb.mas_bottom).offset(22);
+    }];
+    [self.priceLb mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.height.equalTo(@29);
+        make.leading.equalTo(self.priceBgV).offset(25);
+        make.centerX.equalTo(self.priceBgV);
+        make.bottom.equalTo(self.priceBgV.mas_bottom).offset(-4.5);
+    }];
+    
+    [self.addCartBt mas_remakeConstraints:^(MASConstraintMaker *make) {
+        make.bottom.trailing.equalTo(self).offset(-20);
+        make.width.height.equalTo(@36);
+    }];
+    
+}
+
+
+- (UIImageView *)priceBgV {
+    if (!_priceBgV) {
+        UIImageView *imgV = [[UIImageView alloc] init];
+        imgV.image = [UIImage imageNamed:@"home_newin_priceBg"];
+        imgV.contentMode = UIViewContentModeScaleToFill;
+        _priceBgV = imgV;
+    }
+    return _priceBgV;
+}
+
+- (UILabel *)priceLb {
+    if (!_priceLb) {
+        UILabel *lb = [[UILabel alloc] init];
+        lb.font = [UIFont fontWithName:Rob_Bold size:24];
+        lb.textColor = [UIColor blackColor];
+        lb.textAlignment = NSTextAlignmentCenter;
+        _priceLb = lb;
+    }
+    return  _priceLb;
+}
+
+@end

+ 21 - 0
Asteria/Fuction/Home/Views/someViews/ASHomeNewInSubCollectCell.h

@@ -0,0 +1,21 @@
+//
+//  ASHomeNewInSubCollectCell.h
+//  Asteria
+//
+//  Created by iOS on 2023/6/9.
+//
+
+#import <UIKit/UIKit.h>
+#import "ASHomeNewInProductItemView.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface ASHomeNewInSubCollectCell : UICollectionViewCell
+
+@property (nonatomic, strong) ASHomeNewInProductItemView *contView;
+
+@property (nonatomic, strong) ASProductBaseModel *model;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 44 - 0
Asteria/Fuction/Home/Views/someViews/ASHomeNewInSubCollectCell.m

@@ -0,0 +1,44 @@
+//
+//  ASHomeNewInSubCollectCell.m
+//  Asteria
+//
+//  Created by iOS on 2023/6/9.
+//
+
+#import "ASHomeNewInSubCollectCell.h"
+
+@implementation ASHomeNewInSubCollectCell
+
+- (void)setModel:(ASProductBaseModel *)model {
+    _model = model;
+    self.contView.model = model;
+}
+
+- (void)layoutSubviews {
+    [self loadSubV];
+}
+
+- (void)loadSubV {
+    self.backgroundColor = UIColor.clearColor;
+    self.contentView.backgroundColor = UIColor.clearColor;
+    [self addSubview:self.contView];
+    [self.contView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.left.right.equalTo(self);
+        make.width.equalTo(self.contView.mas_height).offset(-productHWithOutImg-10);
+        make.bottom.equalTo(@0);
+    }];
+    
+}
+
+- (ASProductItemView *)contView {
+    if (!_contView) {
+        ASHomeNewInProductItemView *v = [[ASHomeNewInProductItemView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth-20, KScreenWidth-20+productHWithOutImg + 10)];
+        _contView = v;
+    }
+    return _contView;
+}
+
+
+
+@end
+

+ 19 - 0
Asteria/Fuction/Home/Views/someViews/ASHomeTipCollectCell.h

@@ -0,0 +1,19 @@
+//
+//  ASHomeTipCollectCell.h
+//  Asteria
+//
+//  Created by iOS on 2023/6/6.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface ASHomeTipCollectCell : UICollectionViewCell
+
+@property (nonatomic, strong) UIImageView *imgV;
+@property (nonatomic, strong) UILabel *titleLb;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 69 - 0
Asteria/Fuction/Home/Views/someViews/ASHomeTipCollectCell.m

@@ -0,0 +1,69 @@
+//
+//  ASHomeTipCollectCell.m
+//  Asteria
+//
+//  Created by iOS on 2023/6/6.
+//
+
+#import "ASHomeTipCollectCell.h"
+
+@implementation ASHomeTipCollectCell
+
+- (instancetype)initWithFrame:(CGRect)frame {
+    self = [super initWithFrame:frame];
+    if (self) {
+        [self loadSubV];
+    }
+    return self;
+}
+
+- (void)loadSubV {
+    self.contentView.backgroundColor = _F5F5F5;
+    self.contentView.layer.masksToBounds = true;
+    self.contentView.layer.cornerRadius = 4;
+    [self.contentView addSubview:self.imgV];
+    [self.contentView addSubview:self.titleLb];
+    [self.imgV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.titleLb);
+        make.trailing.equalTo(self.titleLb.mas_leading).offset(-10);
+//        make.top.leading.equalTo(self.contentView).offset(10);
+        make.width.height.equalTo(@24);
+    }];
+    
+    [self.titleLb mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerX.equalTo(self.contentView).offset(17);
+        make.centerY.equalTo(self.contentView);
+        make.width.equalTo(@120);
+        make.height.equalTo(@34);
+//        make.leading.equalTo(self.imgV.mas_trailing).offset(10);
+//        make.top.equalTo(self.imgV);
+//        make.trailing.equalTo(self.contentView).offset(-5);
+//        make.bottom.equalTo(self.contentView).offset(-5);
+    }];
+}
+
+- (UIImageView *)imgV {
+    if (!_imgV) {
+        UIImageView *imgV = [UIImageView baseImgV];
+        imgV.contentMode = UIViewContentModeScaleAspectFit;
+        _imgV = imgV;
+    }
+    return _imgV;
+}
+
+- (UILabel *)titleLb {
+    if (!_titleLb) {
+        UILabel *lb = [UILabel baseLb];
+        lb.textColor = Col_000;
+        lb.font = [UIFont fontWithName:Rob_Regular size:12];
+        lb.textAlignment = NSTextAlignmentLeft;
+        lb.numberOfLines = 0;
+        lb.lineBreakMode = NSLineBreakByWordWrapping;
+        lb.qmui_lineHeight = 17;
+        _titleLb = lb;
+    }
+    return _titleLb;
+}
+
+
+@end

+ 19 - 0
Asteria/Fuction/Home/vm/ASProductListViewModel.h

@@ -0,0 +1,19 @@
+//
+//  ASProductListViewModel.h
+//  Asteria
+//
+//  Created by iOS on 2023/6/12.
+//
+
+#import <Foundation/Foundation.h>
+#import "ASProductBaseModel.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface ASProductListViewModel : NSObject
+
+@property (nonatomic, strong) NSArray <ASProductBaseModel *> *productList;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 23 - 0
Asteria/Fuction/Home/vm/ASProductListViewModel.m

@@ -0,0 +1,23 @@
+//
+//  ASProductListViewModel.m
+//  Asteria
+//
+//  Created by iOS on 2023/6/12.
+//
+
+#import "ASProductListViewModel.h"
+
+@implementation ASProductListViewModel
+
+- (NSArray<ASProductBaseModel *> *)productList {
+    if (!_productList) {
+        NSMutableArray *arr = [NSMutableArray array];
+        for (int i=0; i<arc4random()%20*2; i++) {
+            [arr addObject:[ASProductBaseModel demoModel]];
+        }
+        _productList = arr;
+    }
+    return _productList;
+}
+
+@end

+ 1 - 1
Asteria/Fuction/UserCenter/views/KWMineMoreProductsCell.h

@@ -15,8 +15,8 @@ NS_ASSUME_NONNULL_BEGIN
 
 @property (nonatomic, assign) CGFloat topSpace;
 
-@property (nonatomic, strong) UICollectionView *collectV;
 @property (nonatomic, strong) UICollectionView *typeCollectV;
+@property (nonatomic, strong) UICollectionView *collectV;
 
 @property (nonatomic, strong) UILabel *titleLb;
 

+ 2 - 1
Asteria/PreFixHeader.h

@@ -8,7 +8,8 @@
 #ifndef PreFixHeader_h
 #define PreFixHeader_h
 
-
+#import "CTMediator+Home.h"
+#import "CTMediator+UserCenter.h"
 #import "UITableView+ASBase.h"
 #import "UIView+PublicInit.h"
 #import "UIColor+AS.h"

+ 1 - 2
Asteria/Product/CTMediatoaTargets/CTMediator+ASTargerts.h

@@ -23,8 +23,7 @@ NS_ASSUME_NONNULL_BEGIN
 ///登录页面
 -(UIViewController *)Login_LoginC:(NSDictionary *)params;
 
-///个页面
--(UIViewController *)getUserCenterVc:(NSDictionary *)params;
+
 
 
 @end

+ 1 - 3
Asteria/Product/CTMediatoaTargets/CTMediator+ASTargerts.m

@@ -22,9 +22,7 @@
     return [self performTarget:@"Login" action:@"AS_LoginC" params:params shouldCacheTarget:NO];
 }
 
--(UIViewController *)getUserCenterVc:(NSDictionary *)params{
-    return [self performTarget:@"userCenter" action:@"getUserCenterVc" params:params shouldCacheTarget:NO];
-}
+
 
 
 

+ 18 - 0
Asteria/Product/CTMediatoaTargets/CTMediator+Home.h

@@ -0,0 +1,18 @@
+//
+//  CTMediator+Home.h
+//  Asteria
+//
+//  Created by iOS on 2023/6/5.
+//
+
+#import <CTMediator/CTMediator.h>
+#import <UIKit/UIKit.h>
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CTMediator (Home)
+
+-(UIViewController *)getHomeVc:(NSDictionary *)params;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 16 - 0
Asteria/Product/CTMediatoaTargets/CTMediator+Home.m

@@ -0,0 +1,16 @@
+//
+//  CTMediator+Home.m
+//  Asteria
+//
+//  Created by iOS on 2023/6/5.
+//
+
+#import "CTMediator+Home.h"
+
+@implementation CTMediator (Home)
+
+-(UIViewController *)getHomeVc:(NSDictionary *)params{
+    return [self performTarget:@"Home" action:@"getHomeVc" params:params shouldCacheTarget:NO];
+}
+
+@end

+ 19 - 0
Asteria/Product/CTMediatoaTargets/CTMediator+UserCenter.h

@@ -0,0 +1,19 @@
+//
+//  CTMediator+UserCenter.h
+//  Asteria
+//
+//  Created by iOS on 2023/6/5.
+//
+
+#import <CTMediator/CTMediator.h>
+#import <UIKit/UIKit.h>
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CTMediator (UserCenter)
+
+/// 个人中心首页
+-(UIViewController *)getUserCenterVc:(NSDictionary *)params;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 16 - 0
Asteria/Product/CTMediatoaTargets/CTMediator+UserCenter.m

@@ -0,0 +1,16 @@
+//
+//  CTMediator+UserCenter.m
+//  Asteria
+//
+//  Created by iOS on 2023/6/5.
+//
+
+#import "CTMediator+UserCenter.h"
+
+@implementation CTMediator (UserCenter)
+
+-(UIViewController *)getUserCenterVc:(NSDictionary *)params{
+    return [self performTarget:@"userCenter" action:@"getUserCenterVc" params:params shouldCacheTarget:NO];
+}
+
+@end

+ 1 - 1
Asteria/Tabber/AS_TabBarViewController.m

@@ -23,7 +23,7 @@
     self.tabBar.backgroundColor = UIColor.whiteColor;
     
     AViewController *vc1 = [AViewController new];
-    AViewController *vc2 = [[AViewController alloc]init];
+    AViewController *vc2 = [[CTMediator sharedInstance] getHomeVc:@{}];
     UIViewController *vc3 = [[CTMediator sharedInstance] getUserCenterVc:@{}];
     NSArray *vcAry = @[vc1,vc2,vc3];
     

+ 26 - 0
Asteria/Third/TextRollIngView/VerScrollTextView.h

@@ -0,0 +1,26 @@
+//
+//  VerScrollTextView.h
+//  ScrollMarqueeView
+//
+//  Created by admin on 2021/1/28.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface VerScrollTextView : UIView<CAAnimationDelegate>
+
+@property(nonatomic,strong)UIView *verBgView;
+
+@property(nonatomic,strong)UILabel *txtLabel;
+
+@property(nonatomic,strong)NSMutableArray *sxArry;
+
+//显示到第几个
+@property(nonatomic,assign)NSInteger arrNum;
+
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 137 - 0
Asteria/Third/TextRollIngView/VerScrollTextView.m

@@ -0,0 +1,137 @@
+//
+//  VerScrollTextView.m
+//  ScrollMarqueeView
+//
+//  Created by admin on 2021/1/28.
+//
+
+#import "VerScrollTextView.h"
+#import <Masonry/Masonry.h>
+
+@interface VerScrollTextView ()
+@property (nonatomic, strong) NSTimer *timer;
+
+@end
+
+@implementation VerScrollTextView
+
+-(UIView *)verBgView{
+    if (!_verBgView) {
+        _verBgView=[UIView new];
+        _verBgView.backgroundColor=[UIColor clearColor];
+        _verBgView.layer.masksToBounds=YES;
+    }
+    return _verBgView;
+}
+
+
+-(UILabel *)txtLabel{
+    if (!_txtLabel) {
+        _txtLabel=[UILabel new];
+        _txtLabel.font=[UIFont fontWithName:Rob_Regular size:14];
+        _txtLabel.numberOfLines=0;
+        _txtLabel.textAlignment = NSTextAlignmentCenter;
+        _txtLabel.textColor=[UIColor blackColor];
+    }
+    return _txtLabel;
+}
+
+- (void)dealloc {
+    [self.timer invalidate];
+    self.timer = nil;
+}
+
+-(instancetype)init{
+    self=[super init];
+    
+    if (self) {
+        
+        __weak typeof(self)  weakSelf=self;
+        
+        [self addSubview:self.verBgView];
+        [self.verBgView addSubview:self.txtLabel];
+        
+        [self.verBgView mas_makeConstraints:^(MASConstraintMaker *make) {
+            make.top.equalTo(weakSelf.mas_top).offset(10);
+            make.leading.equalTo(weakSelf.mas_leading).offset(10);
+            make.trailing.equalTo(weakSelf.mas_trailing).offset(-10);
+            make.bottom.equalTo(weakSelf.mas_bottom).offset(-10);
+        }];
+        
+        [self.txtLabel mas_makeConstraints:^(MASConstraintMaker *make) {
+            make.leading.trailing.top.equalTo(weakSelf.verBgView);
+            make.bottom.equalTo(weakSelf.verBgView.mas_bottom);
+        }];
+        
+        
+        self.arrNum=0;
+        
+                
+    }
+    return self;
+}
+
+
+-(void)setSxArry:(NSMutableArray *)sxArry{
+    _sxArry=sxArry;
+    if (self.timer) {
+        [_timer invalidate];
+        self.timer = nil;
+    }
+    if (sxArry.count == 0) {
+        return;
+    }
+    if (self.arrNum >= sxArry.count) {
+        self.arrNum = 0;
+    }
+    @weakify(self);
+    self.timer = [NSTimer scheduledTimerWithTimeInterval:2 repeats:true block:^(NSTimer * _Nonnull timer) {
+        [weak_self scrollTxtAction];
+    }];
+    
+
+}
+
+
+-(void)checkDataIndex{
+    
+    if (self.arrNum==self.sxArry.count-1) {
+        self.arrNum=0;
+    }else{
+        self.arrNum=self.arrNum+1;
+    }
+    
+}
+
+- (void)scrollTxtAction {
+    
+    [UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionCurveLinear animations:^{
+        
+        CATransition *transition = [CATransition animation];
+//        transition.duration = 0.3;
+        transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
+        transition.type = kCATransitionPush;
+        transition.subtype = kCATransitionFromTop;
+        transition.delegate = self;
+        [self.txtLabel.layer addAnimation:transition forKey:nil];
+        
+        [self checkDataIndex];
+        
+    } completion:^(BOOL finished) {
+        if (self.arrNum >= self.sxArry.count) {
+            return;
+        }
+        self.txtLabel.text=self.sxArry[self.arrNum];
+
+//        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+//
+//            [self scrollTxtAction];
+//
+//        });
+        
+    }];
+}
+
+
+
+@end

+ 107 - 0
Asteria/Third/WMZBanner/WMZBannerConfig.h

@@ -0,0 +1,107 @@
+//
+//  WMZBannerConfig.h
+//  WMZBanner
+//
+//  Created by wmz on 2019/9/6.
+//  Copyright © 2019 wmz. All rights reserved.
+//
+
+
+
+#ifndef WMZBannerConfig_h
+#define WMZBannerConfig_h
+
+#if __has_include(<SDWebImage/UIImageView+WebCache.h>)
+#import <SDWebImage/UIImageView+WebCache.h>
+#else
+#import "UIImageView+WebCache.h"
+#endif
+
+#define BANNERCOUNT 500
+
+#define BannerWitdh  [UIScreen mainScreen].bounds.size.width
+#define BannerHeight [UIScreen mainScreen].bounds.size.height
+
+#define BannerWeakSelf(obj) __weak typeof(obj) weakObject = obj;
+#define BannerStrongSelf(obj) __strong typeof(obj) strongObject = weakObject;
+
+#define BannerColor(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]
+
+#define WMZBannerPropStatementAndPropSetFuncStatement(propertyModifier,className, propertyPointerType, propertyName)           \
+@property(nonatomic,propertyModifier)propertyPointerType  propertyName;                                                 \
+- (className * (^) (propertyPointerType propertyName)) propertyName##Set;
+
+#define WMZBannerPropSetFuncImplementation(className, propertyPointerType, propertyName)                                       \
+- (className * (^) (propertyPointerType propertyName))propertyName##Set{                                                \
+return ^(propertyPointerType propertyName) {                                                                            \
+self->_##propertyName = propertyName;                                                                                         \
+return self;                                                                                                            \
+};                                                                                                                      \
+}
+
+
+/*
+ * cell的block
+ */
+typedef UICollectionViewCell* (^BannerCellCallBlock)(NSIndexPath *indexPath,UICollectionView* collectionView,id model,UIImageView* bgImageView,NSArray*dataArr);
+
+/*
+ * 点击
+ */
+typedef void (^BannerClickBlock)(id anyID,NSInteger index);
+
+/*
+ * 自定义pageControl
+ */
+typedef void (^BannerPageControl)(UIControl* pageControl);
+
+/*
+ * 点击 ,可获取居中cell
+ */
+typedef void (^BannerCenterClickBlock)(id anyID,NSInteger index,BOOL isCenter,UICollectionViewCell* cell);
+
+/*
+ * 滚动结束
+ */
+typedef void (^BannerScrollEndBlock)(id anyID,NSInteger index,BOOL isCenter,UICollectionViewCell* cell);
+
+/*
+* 滚动
+*/
+typedef void (^BannerScrollBlock)(CGPoint point);
+
+/*
+ * 自定义下划线
+ */
+typedef void (^BannerSpecialLine)(UIView *line);
+
+/*
+ *cell动画的位置
+ */
+typedef enum :NSInteger{
+    BannerCellPositionCenter      = 0,             //居中 默认
+    BannerCellPositionBottom      = 1,             //置底
+    BannerCellPositionTop         = 2,             //顶部
+}BannerCellPosition;
+
+
+/*
+ *特殊样式
+ */
+typedef enum :NSInteger{
+    SpecialStyleLine      = 1,             //下划线
+    SpecialStyleFirstScale      = 2,       //首个变大效果
+}SpecialStyle;
+
+/*
+ *pageControl的位置
+ */
+typedef enum :NSInteger{
+    BannerControlCenter      = 0,             //居中 默认
+    BannerControlLeft        = 1,             //左下
+    BannerControlRight       = 2,             //右下
+}BannerControlPosition;
+
+
+
+#endif /* WMZBannerConfig_h */

+ 26 - 0
Asteria/Third/WMZBanner/WMZBannerControl.h

@@ -0,0 +1,26 @@
+//
+//  WMZBannerControl.h
+//  WMZBanner
+//
+//  Created by wmz on 2019/9/6.
+//  Copyright © 2019 wmz. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+#import "WMZBannerParam.h"
+NS_ASSUME_NONNULL_BEGIN
+@interface WMZBannerControl : UIControl
+@property (nonatomic, strong) UIImage *currentImage;
+@property (nonatomic, strong) UIImage *inactiveImage;
+@property (nonatomic, assign) CGSize currentImageSize;
+@property (nonatomic, assign) CGSize inactiveImageSize;
+@property (nonatomic, assign) NSInteger numberOfPages;
+@property (nonatomic, assign) NSInteger currentPage;
+@property (nonatomic,strong)  UIColor *currentPageIndicatorTintColor;
+@property (nonatomic,strong)  UIColor *pageIndicatorTintColor;
+@property (nonatomic, strong) WMZBannerParam *param;
+- (instancetype)initWithFrame:(CGRect)frame WithModel:(WMZBannerParam *)param;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 0 - 0
Asteria/Third/WMZBanner/WMZBannerControl.m


برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است