宽窄优行-由【嘉易行】项目成品而来
younger_times
2023-04-06 a1ae6802080a22e6e6ce6d0935e95facb1daca5c
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
//
//  EKRatingSymbolsContainerView.swift
//  SwiftEntryKit
//
//  Created by Daniel Huri on 6/1/18.
//  Copyright (c) 2018 huri000@gmail.com. All rights reserved.
//
 
import UIKit
 
final public class EKRatingSymbolsContainerView: UIView {
    
    private var message: EKRatingMessage!
    private var symbolsArray: [EKRatingSymbolView] = []
    
    public func setup(with message: EKRatingMessage,
                      externalSelection: @escaping EKRatingMessage.Selection) {
        self.message = message
        let internalSelection = { [unowned self] (index: Int) in
            self.select(index: index)
            externalSelection(index)
        }
        
        for (index, item) in message.ratingItems.enumerated() {
            let itemView = EKRatingSymbolView(unselectedImage: item.unselectedImage,
                                              selectedImage: item.selectedImage,
                                              selection: internalSelection)
            itemView.tag = index
            addSubview(itemView)
            itemView.set(.width, .height, of: 50)
            symbolsArray.append(itemView)
        }
        symbolsArray.layoutToSuperview(axis: .vertically, priority: .must)
        symbolsArray.spread(.horizontally, stretchEdgesToSuperview: true)
        
        select()
    }
    
    private func select(index: Int? = nil) {
        var delay: TimeInterval = 0
        for (i, view) in symbolsArray.enumerated() {
            DispatchQueue.main.asyncAfter(deadline: .now() + delay) {
                if let index = index, i <= index {
                    view.isSelected = true
                    view.transform = CGAffineTransform(scaleX: 1.5, y: 1.5)
                } else if view.isSelected || index == nil {
                    view.isSelected = false
                    view.transform = CGAffineTransform(scaleX: 0.5, y: 0.5)
                }
                UIView.animate(withDuration: 0.6,
                               delay: 0,
                               usingSpringWithDamping: 0.5,
                               initialSpringVelocity: 0,
                               options: [.allowUserInteraction], animations: {
                    view.transform = .identity
                }, completion: nil)
            }
            delay += 0.05
        }
    }
}