Day_Count_Memory_Days/anniversary_Project/Tool/MLSliderRulerView.swift
2024-07-15 11:52:15 +08:00

106 lines
3.3 KiB
Swift

//
// MLSliderRuler.swift
// MLSilderRulerView
//
// Created by Macro on 2018/1/25.
// Copyright © 2018 CodeMarco. All rights reserved.
//
import UIKit
protocol MLSliderRulerViewDelegate: AnyObject {
func sliderRulerView(ruler: UIView, rulervalue: CGFloat)
}
class MLSliderRulerView: UIView {
weak var delegate: MLSliderRulerViewDelegate?
var valueLabelFont = UIFont.boldSystemFont(ofSize: 14) {
didSet {
valueLabel.font = valueLabelFont
}
}
var rulerHeight: CGFloat = 50.0 {
didSet {
rulerScrollView.frame = CGRect(x: 0, y: frame.size.height - rulerHeight, width: frame.size.width, height: rulerHeight)
rulerScrollView.drawRuler()
}
}
public var rulerScrollView = MLSliderRulerScrollView()
public let markLine = CALayer()
public let valueLabel = UILabel()
public let valueImageV = UIImageView()
public let TriangleimagV = UIImageView()
// var rulerValue: CGFloat {
// return rulerScrollView.rulerValue
// }
override init(frame: CGRect) {
super.init(frame: frame)
rulerScrollView.frame = CGRect(x: 0, y: frame.size.height - rulerHeight, width: frame.size.width, height: rulerHeight)
rulerScrollView.showsHorizontalScrollIndicator = false
rulerScrollView.delegate = self
addSubview(rulerScrollView)
valueImageV.image = UIImage(named: "valueImagV")
valueImageV.frame = CGRect(x: center.x - 65, y: rulerScrollView.frame.minY - 60, width: 130, height: 62)
addSubview(valueImageV)
TriangleimagV.image = UIImage(named: "Triangle")
TriangleimagV.frame = CGRect(x: center.x - 11, y: rulerScrollView.frame.minY + 50, width: 22, height: 12)
addSubview(TriangleimagV)
valueLabel.font = UIFont.boldSystemFont(ofSize: 24)
valueLabel.textAlignment = .center
valueLabel.textColor = UIColor.hexSting(color: "#62BFFF", alpha: 1)
valueLabel.frame = CGRect(x: 0, y: rulerScrollView.frame.minY - 42, width: bounds.width, height: 20)
valueLabel.text = "160 ml"
addSubview(valueLabel)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func layoutSubviews() {
super.layoutSubviews()
rulerScrollView.drawRuler()
}
func animationRebound() {
// Method intentionally left empty to remove snapping effect
}
}
extension MLSliderRulerView: UIScrollViewDelegate {
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let offSetX = scrollView.contentOffset.x + bounds.size.width / 2 - DISTANCELEFTANDRIGHT
let ruleValue = (offSetX / DISTANCEVALUE) * rulerScrollView.rulerAverage
let valuetext = "\(round(ruleValue) + rulerScrollView.minValue) ml"
if valuetext != valueLabel.text {
valueLabel.text = valuetext
}
}
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
// animationRebound() removed to prevent snapping
}
func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
// animationRebound() removed to prevent snapping
}
}