效果图
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]
}
}
}