| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 |
- //
- // MOLineCountTimeView.swift
- // MiMoLive
- //
- // Created by OneeChan on 2025/9/26.
- //
- import Foundation
- import UIKit
- @objc
- enum MOLineCountTimeViewType: Int {
- case lining
- case pking
- case punishing
- }
- @objcMembers
- class MOLineCountTimeView: UIView {
- private let titleLabel = UILabel()
- private let pkIcon = UIImageView()
- private let timeLabel = UILabel()
- private var timer: Timer?
-
- private var incr: Bool = false
- private var curTime: Int = 0
-
- override init(frame: CGRect) {
- super.init(frame: frame)
-
- setupViews()
- }
-
- required init?(coder: NSCoder) {
- fatalError("init(coder:) has not been implemented")
- }
-
- func update(viewType: MOLineCountTimeViewType) {
- switch viewType {
- case .lining:
- pkIcon.isHidden = true
- titleLabel.text = .init(key: "C70071")
- case .pking:
- pkIcon.isHidden = false
- titleLabel.text = ""
- case .punishing:
- pkIcon.isHidden = true
- titleLabel.text = .init(key: "C70072")
- }
- }
-
- func startCount(time: Int, incr: Bool) {
- self.incr = incr
- curTime = time
- updateTimeText()
- setupTimer()
- }
-
- deinit {
- stopTimer()
- }
- }
- extension MOLineCountTimeView {
- private func setupViews() {
- let icon = UIImageView()
- icon.image = .init(named: "icon_line_time_bg")?
- .resizableImage(withCapInsets: UIEdgeInsets(top: 2, left: 10, bottom: 2, right: 10))
- addSubview(icon)
- icon.snp.makeConstraints { make in
- make.edges.equalToSuperview()
- }
-
- titleLabel.font = .poppinsMediumFont(11)
- titleLabel.textColor = .white.withAlphaComponent(0.8)
- addSubview(titleLabel)
- titleLabel.snp.makeConstraints { make in
- make.leading.equalToSuperview().offset(10)
- make.centerY.equalToSuperview()
- }
-
- pkIcon.image = .init(named: "icon_live_pk_list_bg")
- addSubview(pkIcon)
- pkIcon.snp.makeConstraints { make in
- make.width.height.equalTo(16)
- make.leading.equalToSuperview().offset(10)
- make.centerY.equalToSuperview()
- }
-
- timeLabel.font = .poppinsMediumFont(12)
- timeLabel.textColor = .white
- addSubview(timeLabel)
- timeLabel.snp.makeConstraints { make in
- make.centerY.equalToSuperview()
- make.leading.greaterThanOrEqualTo(pkIcon.snp.trailing).offset(2)
- make.leading.equalTo(titleLabel.snp.trailing).offset(2)
- make.trailing.equalToSuperview().offset(-10)
- }
- }
-
- private func setupTimer() {
- stopTimer()
- timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { [weak self] _ in
- guard let self else { return }
- if self.incr {
- self.curTime += 1
- updateTimeText()
- } else {
- self.curTime -= 1
- updateTimeText()
-
- if self.curTime == 0 {
- stopTimer()
- }
- }
- }
- }
-
- private func stopTimer() {
- timer?.invalidate()
- timer = nil
- }
-
- private func updateTimeText() {
- let hour = curTime / 3600
- let min = curTime % 3600 / 60
- let sec = curTime % 60
- if hour > 0 {
- timeLabel.text = String(format: "%d:%02d:%02d", hour, min, sec)
- } else {
- timeLabel.text = String(format: "%02d:%02d", min, sec)
- }
- }
- }
- //import SwiftUI
- //
- //struct MOLineCountTimeViewPreview: UIViewRepresentable {
- // func makeUIView(context: Context) -> some UIView {
- // let view = UIView()
- // let list = MOLineCountTimeView()
- // view.addSubview(list)
- // list.snp.makeConstraints { make in
- // make.center.equalToSuperview()
- // }
- //
- // let button = UIButton()
- // button.setTitle("test", for: .normal)
- // button.backgroundColor = .red
- // button.addAction(UIAction(handler: { _ in
- // list.update(.line(time: 3))
- // }), for: .touchUpInside)
- // view.addSubview(button)
- // button.snp.makeConstraints { make in
- // make.centerX.bottom.equalToSuperview()
- // }
- //
- // return view
- // }
- //
- // func updateUIView(_ uiView: UIViewType, context: Context) { }
- //}
- //
- //#Preview {
- // MOLineCountTimeViewPreview()
- //}
|