Sfoglia il codice sorgente

组件化uibutton. uislider

jsonwang 3 anni fa
parent
commit
8f07431549

+ 17 - 0
BFFramework/Classes/BFModules/BFCustomViews/views/BFUIButton.swift

@@ -0,0 +1,17 @@
+//
+//  BFUIButton.swift
+//  Alamofire
+//
+//  Created by ak on 2021/8/4.
+//  功能:默认扩大 btn 的点击范围
+
+import Foundation
+
+public class BFUIButton: UIButton {
+    //扩大点击范围 PX
+    var margin: CGFloat = 60
+    public override func point(inside point: CGPoint, with _: UIEvent?) -> Bool {
+        let area = bounds.insetBy(dx: -margin, dy: -margin) // 负值是方法响应范围
+        return area.contains(point)
+    }
+}

+ 91 - 0
BFFramework/Classes/BFModules/BFCustomViews/views/BFUISlider.swift

@@ -0,0 +1,91 @@
+//
+//  BFSlider.swift
+//  BFFramework
+//
+//  Created by ak on 2021/8/4.
+//  功能:自定义 UISlider
+
+import Foundation
+
+class BFUISlider: UISlider {
+    
+    //slider的value文本
+    var valueText:String?{
+        didSet {
+            valueLabel.text = valueText
+            valueLabel.sizeToFit()
+            
+            let trackRect = convert(bounds, to: nil)
+            let thumbRect = thumbRect(forBounds: bounds, trackRect: trackRect, value: value)
+            valueLabel.center = CGPoint.init(x: (thumbRect.origin.x - trackRect.origin.x + thumbRect.size.width / 2), y: -self.frame.size.height)
+            
+//            CGPointMake((thumbRect.origin.x - trackRect.origin.x + thumbRect.size.width / 2), -self.frame.size.height);
+            
+//            [super trackRectForBounds:bounds];
+//           return CGRectMake(bounds.origin.x, bounds.origin.y + (bounds.size.height - 3.0) / 2, bounds.size.width, 3.0);
+       
+        }
+    }
+    override var value: Float{
+        didSet {
+            sliderValueChanged(sender: self)
+        }
+    }
+    //slider的value字体
+    var valueFont:UIFont?
+    //slider的value文本颜色
+    var valueTextColor:UIColor?
+    
+    lazy var valueLabel:UILabel = {
+        let valueLabel = UILabel.init()
+        valueLabel.text = "0"
+        valueLabel.textColor = valueTextColor != nil ? valueTextColor : self.thumbTintColor
+        valueLabel.font = valueFont != nil ? valueFont : UIFont.systemFont(ofSize: 14);
+        valueLabel.textAlignment = .center
+        
+        return valueLabel
+        
+    }()
+    override init(frame: CGRect) {
+        super.init(frame: frame)
+        addTarget(self, action: #selector(sliderTouchDown(sender:)), for: .touchDown)
+        addTarget(self, action: #selector(sliderValueChanged(sender:)), for: .valueChanged)
+        addTarget(self, action: #selector(sliderTouchUpInside(sender:)), for: .touchUpInside)
+ 
+    }
+    
+    required init?(coder: NSCoder) {
+        fatalError("init(coder:) has not been implemented")
+    }
+    
+    override func layoutSubviews() {
+        super.layoutSubviews()
+        addSubview(valueLabel)
+        sliderValueChanged(sender: self)
+    }
+    
+    override func setValue(_ value: Float, animated: Bool) {
+        super.setValue(value, animated: animated)
+        sliderValueChanged(sender: self)
+    }
+ 
+    //重写方法-返回进度条的bounds-修改进度条的高度
+    override func trackRect(forBounds bounds: CGRect) -> CGRect {
+ 
+        let bounds = super.trackRect(forBounds: bounds)
+        return CGRect.init(origin: CGPoint.init(x: bounds.origin.x, y: bounds.origin.y + (bounds.size.height - 3.0) / 2 ), size: CGSize.init(width:  bounds.size.width, height: 3))
+    }
+    
+    @objc func sliderTouchDown(sender: BFUISlider) {
+         
+    }
+    @objc func sliderValueChanged(sender: BFUISlider) {
+        
+        valueText = String(format: "%.1fx", sender.value)
+ 
+    }
+    @objc func sliderTouchUpInside(sender: BFUISlider) {
+         
+    }
+    
+}