108 lines
3.5 KiB
Swift
108 lines
3.5 KiB
Swift
//
|
|
// ageView.swift
|
|
// anniversary_Project
|
|
//
|
|
// Created by 忆海16 on 2024/7/9.
|
|
|
|
import UIKit
|
|
|
|
class AgePickerView: UIView {
|
|
|
|
private let pickerView = UIPickerView()
|
|
private let ageRange = Array(0...100)
|
|
private let leftImageView = UIImageView(image: UIImage(named: "leftImage"))
|
|
private let rightImageView = UIImageView(image: UIImage(named: "rightImage"))
|
|
|
|
var selectedAge: Int = 0 {
|
|
didSet {
|
|
pickerView.selectRow(selectedAge, inComponent: 0, animated: true)
|
|
}
|
|
}
|
|
|
|
var onAgeSelected: ((Int) -> Void)?
|
|
|
|
override init(frame: CGRect) {
|
|
super.init(frame: frame)
|
|
setupPickerView()
|
|
setupImageViews()
|
|
}
|
|
|
|
required init?(coder: NSCoder) {
|
|
super.init(coder: coder)
|
|
setupPickerView()
|
|
setupImageViews()
|
|
}
|
|
|
|
private func setupPickerView() {
|
|
pickerView.translatesAutoresizingMaskIntoConstraints = false
|
|
pickerView.delegate = self
|
|
pickerView.dataSource = self
|
|
addSubview(pickerView)
|
|
|
|
NSLayoutConstraint.activate([
|
|
pickerView.leadingAnchor.constraint(equalTo: leadingAnchor),
|
|
pickerView.trailingAnchor.constraint(equalTo: trailingAnchor),
|
|
pickerView.topAnchor.constraint(equalTo: topAnchor),
|
|
pickerView.bottomAnchor.constraint(equalTo: bottomAnchor)
|
|
])
|
|
}
|
|
|
|
private func setupImageViews() {
|
|
leftImageView.translatesAutoresizingMaskIntoConstraints = false
|
|
rightImageView.translatesAutoresizingMaskIntoConstraints = false
|
|
|
|
addSubview(leftImageView)
|
|
addSubview(rightImageView)
|
|
|
|
NSLayoutConstraint.activate([
|
|
leftImageView.centerYAnchor.constraint(equalTo: pickerView.centerYAnchor),
|
|
leftImageView.trailingAnchor.constraint(equalTo: pickerView.centerXAnchor, constant: -60),
|
|
leftImageView.widthAnchor.constraint(equalToConstant: 18),
|
|
leftImageView.heightAnchor.constraint(equalToConstant: 18),
|
|
|
|
rightImageView.centerYAnchor.constraint(equalTo: pickerView.centerYAnchor),
|
|
rightImageView.leadingAnchor.constraint(equalTo: pickerView.centerXAnchor, constant: 60),
|
|
rightImageView.widthAnchor.constraint(equalToConstant: 18),
|
|
rightImageView.heightAnchor.constraint(equalToConstant: 18)
|
|
])
|
|
}
|
|
}
|
|
|
|
extension AgePickerView: UIPickerViewDelegate, UIPickerViewDataSource {
|
|
func numberOfComponents(in pickerView: UIPickerView) -> Int {
|
|
return 1
|
|
}
|
|
|
|
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
|
|
return ageRange.count
|
|
}
|
|
|
|
func pickerView(_ pickerView: UIPickerView, rowHeightForComponent component: Int) -> CGFloat {
|
|
return 60
|
|
}
|
|
|
|
func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
|
|
let label = UILabel()
|
|
label.text = "\(ageRange[row])"
|
|
label.textAlignment = .center
|
|
|
|
if row == pickerView.selectedRow(inComponent: 0) {
|
|
label.font = UIFont.boldSystemFont(ofSize: 36)
|
|
label.textColor = .black
|
|
} else {
|
|
label.font = UIFont.systemFont(ofSize: 36)
|
|
label.textColor = .gray
|
|
}
|
|
|
|
return label
|
|
}
|
|
|
|
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
|
|
selectedAge = row
|
|
pickerView.reloadAllComponents()
|
|
onAgeSelected?(selectedAge)
|
|
}
|
|
}
|
|
|
|
|