JLChen
2021-05-18 a869383e163a18cdedcf587383c1eca043129754
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
//
//  Copyright © 2019 dahua. All rights reserved.
//
 
import UIKit
 
protocol DHQRScanMenuViewDelegate: class {
    func qrScanMenu(_ menuView: DHQRScanMenuView, didSelectedMenuAt type: QRScanMenuType)
}
 
class DHQRScanMenuView: UIView {
    
    weak var delegate: DHQRScanMenuViewDelegate?
    
    var menuModels: Array<QRScanMenuModel> = []
    
    var menuCells: Array<DHScanMenuCell> = []
    
    public init(frame: CGRect, qrScanMenuModels models: Array<QRScanMenuModel>) {
        super.init(frame: frame)
        self.backgroundColor = UIColor.init(red: 0.0, green: 0.0, blue: 0.0, alpha: 0.8)
        self.menuModels = models
        loadSubviews()
    }
    
    init(qrScanMenuModels models: Array<QRScanMenuModel>) {
        super.init(frame: CGRect())
        self.menuModels = models
        loadSubviews()
    }
    
    func loadSubviews() {
        weak var weakSelf = self
        for (index, model) in self.menuModels.enumerated() {
            let menuCell = DHScanMenuCell.init(title: model.title, imageName: model.imageName) { (cellTag) in
                let menuType = weakSelf?.transferMenuType(index: cellTag - 10)
                weakSelf?.delegate?.qrScanMenu(weakSelf!, didSelectedMenuAt: menuType!)
            }
            menuCell.tag = 10 + index
            menuCells.append(menuCell)
            self.addSubview(menuCell)
        }
    }
    
    func transferMenuType(index: Int) -> QRScanMenuType {
        if index == 0 {
            return .serialNumber
        } else if index == 1 {
            return .photoAlbum
        }
        
        return .unKnown
    }
    
    override func layoutSubviews() {
        super.layoutSubviews()
        
        guard self.menuCells.count > 0 else {
            return
        }
        let cellHeight = self.bounds.size.height
        let cellWidth: CGFloat = 65.0
        let areaWidth = self.bounds.size.width / CGFloat(self.menuCells.count)
        for (index, cell) in self.menuCells.enumerated() {
            cell.snp.remakeConstraints { (make) in
                make.size.equalTo(CGSize.init(width: cellWidth, height: cellHeight))
                make.centerY.equalToSuperview()
                make.left.equalToSuperview().offset(areaWidth * CGFloat(index) + (areaWidth - cellWidth) / 2.0)
            }
        }
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}
 
struct QRScanMenuModel {
    var title: String = ""
    var imageName: String = ""
    var menuType: QRScanMenuType = .unKnown
}
 
enum QRScanMenuType {
    case serialNumber
    case photoAlbum
    case unKnown
}