swift 实现水平滚动的UIPickerView

2023-07-26  本文已影响0人  UILable攻城狮

效果图

ezgif.com-video-to-gif.gif

直接看实现方式

private lazy var pickerView: UIPickerView = {
        let view = UIPickerView()
      // 旋转90度 由开始的竖直变成水平
        view.rotate(toAngle: -90.0, ofType: .degrees)
        view.dataSource = self
        view.delegate = self
        return view
    }()

主要看这个代理 UIPickerViewDelegate

func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
      //实现一滚动lab值就变化的关键方法
  middleDisplay(with: pickerView)
        
        let label = UILabel(text: values?[safe: row])
        label.theme_font = Themes.Global.mediumFont(size: 16)
        label.textAlignment = .center
//**让lab文字旋转为水平** 
        label.rotate(toAngle: 90.0, ofType: .degrees)
        return label
    }

/// PickerView滑动中实时显示选中值
    private func middleDisplay(with pickerView: UIPickerView?) {
        guard let subViews = pickerView?.subviews, subViews.count > 0 else {
            return
        }
        if let coloms = subViews.first,
           let subViewCache = coloms.value(forKey: "subviewCache") as? Array<Any>,
           let middle = subViewCache.first as? UIView,
           let middleContainerView = middle.value(forKey: "middleContainerView") as? UIView {
            if let middleSubViewCache = middleContainerView.value(forKey: "subviewCache") as? Array<Any>,
               let subMiddle = middleSubViewCache.first as? UIView,
               let row = subMiddle.value(forKey: "selectionBarRow") as? Int {
                currentRowLabel.text = values?[safe: row]
            }
        }
    }
上一篇 下一篇

猜你喜欢

热点阅读