美文网首页
swift 实现水平滚动的UIPickerView

swift 实现水平滚动的UIPickerView

作者: UILable攻城狮 | 来源:发表于2023-07-26 09:41 被阅读0次

效果图

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]
            }
        }
    }

相关文章

网友评论

      本文标题:swift 实现水平滚动的UIPickerView

      本文链接:https://www.haomeiwen.com/subject/cnkhpdtx.html