Эх сурвалжийг харах

fix: 修复潜在用户没展示在线状态的问题,调整潜在用户的协议逻辑

陈文艺 3 долоо хоног өмнө
parent
commit
71c739fa60

+ 13 - 0
Lanu/Common/Extension/UIScrollView+Extension.swift

@@ -61,10 +61,20 @@ extension UIScrollView: LNKeyboardNotify {
     }
 }
 
+private var scrollViewNestedKey: UInt8 = 0
 extension UIScrollView: UIGestureRecognizerDelegate {
+    private var isNested: Bool {
+        get {
+            objc_getAssociatedObject(self, &scrollViewNestedKey) as? Bool ?? false
+        }
+        set {
+            objc_setAssociatedObject(self, &scrollViewNestedKey, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
+        }
+    }
     func toBeNested() {
         panGestureRecognizer.delegate = self
         bounces = false
+        isNested = true
     }
     
     // MARK: - UIGestureRecognizerDelegate
@@ -73,6 +83,9 @@ extension UIScrollView: UIGestureRecognizerDelegate {
     }
     
     open override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
+        if !isNested {
+            return super.gestureRecognizerShouldBegin(gestureRecognizer)
+        }
         guard let panGesture = gestureRecognizer as? UIPanGestureRecognizer,
               let currentScrollView = panGesture.view as? UIScrollView else {
             return true

+ 29 - 5
Lanu/Common/Views/LNOnlineView.swift

@@ -11,10 +11,26 @@ import SnapKit
 
 
 class LNOnlineView: UIView {
-    private let borderColor: UIColor = .primary_3
-    private let borderWidth: CGFloat = 1
-    private let duration: Double = 1.2
-    private let scale = 1.1
+    var borderColor: UIColor = .primary_3 {
+        didSet {
+            reset()
+        }
+    }
+    var borderWidth: CGFloat = 1 {
+        didSet {
+            reset()
+        }
+    }
+    var duration: Double = 1.2 {
+        didSet {
+            reset()
+        }
+    }
+    var offset = 5.0 {
+        didSet {
+            reset()
+        }
+    }
     private var animator: UIViewPropertyAnimator?
     
     private let borderLayer = CAShapeLayer()
@@ -36,7 +52,7 @@ class LNOnlineView: UIView {
     private func startAnimate() {
         let scaleAnim = CABasicAnimation(keyPath: "transform.scale")
         scaleAnim.fromValue = 1.0
-        scaleAnim.toValue = scale
+        scaleAnim.toValue = 1.0 + offset / CGFloat(bounds.width / 2)
         scaleAnim.duration = duration
         
         let opacityAnim = CABasicAnimation(keyPath: "opacity")
@@ -58,8 +74,16 @@ class LNOnlineView: UIView {
         super.layoutSubviews()
         
         layer.cornerRadius = bounds.height * 0.5
+        if borderLayer.frame.height != bounds.height {
+            reset()
+        }
+    }
+    
+    private func reset() {
         borderLayer.frame = bounds
         borderLayer.cornerRadius = bounds.height * 0.5
+        borderLayer.removeAllAnimations()
+        startAnimate()
     }
     
     required init?(coder: NSCoder) {

+ 1 - 1
Lanu/Manager/GameMate/LNGameMateManager.swift

@@ -458,7 +458,7 @@ extension LNGameMateManager {
 // MARK: 潜在用户
 extension LNGameMateManager {
    func getPotentialUsers(queue: DispatchQueue = .main, handler: @escaping (LNPotentialUsersResponse?) -> Void) {
-       LNHttpManager.shared.getPotentialUsers(size: 5) { res, err in
+       LNHttpManager.shared.getPotentialUsers { res, err in
            queue.asyncIfNotGlobal {
                handler(res)
            }

+ 2 - 4
Lanu/Manager/GameMate/Network/LNHttpManager+GameMate.swift

@@ -394,9 +394,7 @@ extension LNHttpManager {
 
 // MARK: 潜在用户
 extension LNHttpManager {
-    func getPotentialUsers(size: Int, completion: @escaping (LNPotentialUsersResponse?, LNHttpError?) -> Void) {
-        post(path: kNetPath_GameMate_PotentialUsers_List, params: [
-            "size": size,
-        ], completion: completion)
+    func getPotentialUsers(completion: @escaping (LNPotentialUsersResponse?, LNHttpError?) -> Void) {
+        post(path: kNetPath_GameMate_PotentialUsers_List, completion: completion)
     }
 }

+ 1 - 0
Lanu/Views/Game/MateList/LNGameMateListCell.swift

@@ -229,6 +229,7 @@ extension LNGameMateListCell {
             make.horizontalEdges.equalToSuperview()
         }
         
+        onlineView.offset = 5
         container.addSubview(onlineView)
         onlineView.snp.makeConstraints { make in
             make.edges.equalTo(avatar).inset(-2)

+ 15 - 10
Lanu/Views/Game/OrderCenter/LNPotentialUserViewController.swift

@@ -31,7 +31,7 @@ class LNPotentialUserViewController: LNViewController {
     }
 }
 
-extension LNPotentialUserViewController: UITableViewDataSource, UITableViewDelegate {
+extension LNPotentialUserViewController: UITableViewDataSource {
     func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
         users.count
     }
@@ -52,6 +52,13 @@ extension LNPotentialUserViewController {
     private func setupViews() {
         title = .init(key: "B00116")
         
+        emptyView.isHidden = true
+        view.addSubview(emptyView)
+        emptyView.snp.makeConstraints { make in
+            make.centerX.equalToSuperview()
+            make.centerY.equalToSuperview().multipliedBy(0.6)
+        }
+        
         let header = MJRefreshNormalHeader { [weak self] in
             guard let self else { return }
             self.loadList()
@@ -60,7 +67,6 @@ extension LNPotentialUserViewController {
         header.stateLabel?.isHidden = true
         tableView.mj_header = header
         
-        tableView.delegate = self
         tableView.dataSource = self
         tableView.separatorStyle = .none
         tableView.showsVerticalScrollIndicator = false
@@ -71,13 +77,6 @@ extension LNPotentialUserViewController {
         tableView.snp.makeConstraints { make in
             make.edges.equalToSuperview()
         }
-        
-        emptyView.isHidden = true
-        tableView.addSubview(emptyView)
-        emptyView.snp.makeConstraints { make in
-            make.centerX.equalToSuperview()
-            make.centerY.equalToSuperview().multipliedBy(0.6)
-        }
     }
     
     private func loadList() {
@@ -102,7 +101,7 @@ extension LNPotentialUserViewController {
                 }
             }
             
-            self.tableView.mj_header?.endRefreshing()
+            tableView.mj_header?.endRefreshing()
         }
     }
 }
@@ -172,6 +171,12 @@ private extension LNPotentialUserItemCell {
             make.width.height.equalTo(40)
         }
         
+        onlineView.offset = 5
+        container.addSubview(onlineView)
+        onlineView.snp.makeConstraints { make in
+            make.edges.equalTo(avatar).inset(-1)
+        }
+        
         let infoView = UIStackView()
         infoView.axis = .vertical
         infoView.spacing = 4

+ 1 - 0
Lanu/Views/Game/OrderCenter/Visitors/LNVisitorItemCell.swift

@@ -59,6 +59,7 @@ extension LNVisitorItemCell {
             make.bottom.equalToSuperview().offset(-25)
         }
         
+        onlineView.offset = 5
         contentView.addSubview(onlineView)
         onlineView.snp.makeConstraints { make in
             make.edges.equalTo(avatar).inset(-2)