Jelajahi Sumber

[+] 钱包界面增加Banner

yanxuyao 3 hari lalu
induk
melakukan
360ac690da

+ 1 - 1
Lanu/Views/Game/MateList/Banner/LNMateAdBannerCell.swift

@@ -10,7 +10,6 @@ import UIKit
 import SnapKit
 
 final class LNMateAdBannerCell: UITableViewCell {
-    static let reuseID = "LNMateAdBannerCell"
 
     var onTapBanner: ((_ item: LNBannerInfoVO, _ index: Int) -> Void)?
 
@@ -50,6 +49,7 @@ private extension LNMateAdBannerCell {
             make.top.bottom.equalToSuperview()
             make.leading.equalToSuperview().offset(16)
             make.trailing.equalToSuperview().offset(-16)
+            make.bottom.equalToSuperview().offset(-10).priority(.medium)
         }
 
         pagerView.addSubview(pageControl)

+ 1 - 1
Lanu/Views/Game/MateList/LNGameMateListView.swift

@@ -218,7 +218,7 @@ extension LNGameMateListView: UITableViewDataSource, UITableViewDelegate {
 
     func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
         if isBannerRow(indexPath.row) {
-            return 70
+            return 80
         }
         return UITableView.automaticDimension
     }

+ 84 - 0
Lanu/Views/Wallet/LNWalletViewController.swift

@@ -23,12 +23,18 @@ class LNWalletViewController: LNViewController {
     private let diamondLabel = UILabel()
     private let beanLabel = UILabel()
     
+    private let bannerView = UIView()
+    private let bannerPagerView = LNCyclePager()
+    private let bannerPageControl = LNCyclePageControl()
+    private var bannerList: [LNBannerInfoVO] = []
+    
     override func viewDidLoad() {
         super.viewDidLoad()
         
         setupViews()
         
         updateWalletInfo()
+        loadBanner()
         LNEventDeliver.addObserver(self)
         LNPurchaseManager.shared.reloadWalletInfo()
     }
@@ -71,6 +77,19 @@ extension LNWalletViewController {
         
         stackView.addArrangedSubview(buildWallet())
         stackView.addArrangedSubview(buildIncome())
+        stackView.addArrangedSubview(buildBanner())
+    }
+
+    private func loadBanner() {
+        LNConfigManager.shared.getBannerList(adSlot: 1) { [weak self] list in
+            guard let self else { return }
+            bannerList = list ?? []
+            bannerView.isHidden = bannerList.isEmpty
+            bannerPageControl.numberOfPages = bannerList.count
+            bannerPageControl.currentPage = 0
+            bannerPageControl.isHidden = bannerList.count <= 1
+            bannerPagerView.reloadData()
+        }
     }
     
     private func setupNavBar() {
@@ -423,6 +442,71 @@ extension LNWalletViewController {
         
         return container
     }
+
+    private func buildBanner() -> UIView {
+        bannerView.isHidden = true
+        bannerView.layer.cornerRadius = 16
+        bannerView.layer.masksToBounds = true
+        bannerView.snp.makeConstraints { make in
+            make.height.equalTo(70)
+        }
+
+        bannerPagerView.layer.cornerRadius = 16
+        bannerPagerView.layer.masksToBounds = true
+        bannerPagerView.isInfiniteLoop = true
+        bannerPagerView.autoScrollInterval = 3
+        bannerPagerView.reloadDataNeedResetIndex = true
+        bannerPagerView.bindPageControl(bannerPageControl)
+        bannerPagerView.register(LNAdBannerImageCell.self, forCellWithReuseIdentifier: LNAdBannerImageCell.className)
+        bannerPagerView.numberOfItemsProvider = { [weak self] in
+            self?.bannerList.count ?? 0
+        }
+        bannerPagerView.cellProvider = { [weak self] pager, index in
+            guard let self else { return UICollectionViewCell() }
+            let cell = pager.dequeueReusableCell(
+                withReuseIdentifier: LNAdBannerImageCell.className,
+                for: index
+            ) as! LNAdBannerImageCell
+            cell.update(self.bannerList[index])
+            return cell
+        }
+        bannerPagerView.layoutProvider = { [weak self] in
+            let layout = LNCyclePagerViewLayout()
+            layout.itemSize = self?.bannerPagerView.bounds.size ?? .zero
+            layout.itemSpacing = 0
+            layout.scrollDirection = .horizontal
+            layout.layoutType = .normal
+            return layout
+        }
+        bannerPagerView.didScrollFromIndexToIndex = { [weak self] _, toIndex in
+            self?.bannerPageControl.currentPage = toIndex
+        }
+        bannerPagerView.didSelectItem = { [weak self] _, index in
+            guard let self, index >= 0, index < self.bannerList.count else { return }
+            let item = self.bannerList[index]
+            guard !item.jump.isEmpty else { return }
+            self.view.pushToWebView(.init(url: item.jump))
+        }
+
+        bannerView.addSubview(bannerPagerView)
+        bannerPagerView.snp.makeConstraints { make in
+            make.edges.equalToSuperview()
+        }
+
+        bannerPageControl.pageIndicatorSize = CGSize(width: 6, height: 6)
+        bannerPageControl.currentPageIndicatorSize = CGSize(width: 16, height: 6)
+        bannerPageControl.pageIndicatorTintColor = .init(hex: "#FFFFFF80")
+        bannerPageControl.currentPageIndicatorTintColor = .white
+        bannerPageControl.pageIndicatorSpacing = 4
+        bannerPagerView.addSubview(bannerPageControl)
+        bannerPageControl.snp.makeConstraints { make in
+            make.centerX.equalToSuperview()
+            make.bottom.equalToSuperview().offset(-8)
+            make.height.equalTo(10)
+        }
+
+        return bannerView
+    }
 }
 
 #if DEBUG