一直觉得自己写的不是技术,而是情怀,一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的,希望我的这条路能让你们少走弯路,希望我能帮你们抹去知识的蒙尘,希望我能帮你们理清知识的脉络,希望未来技术之巅上有你们也有我。
Swift Control DateSelection(日期选择框) 下载链接
文章目录
效果

使用
bash
import UIKit
import SnapKit
import Alamofire
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .white
guard let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene,
let window = windowScene.windows.first else { return }
DateSelectionView.showCurrentView(
win: window,
valueBlock: { date in
// 处理选择的日期
print("选择了日期:\(date)")
}
)
}
}
封装代码
bash
import UIKit
import SnapKit
class DateSelectionView: UIView {
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
init() {
let targetRect = CGRect(
x: 0,
y: 0,
width: UIScreen.main.bounds.width,
height: UIScreen.main.bounds.height
)
super.init(frame: targetRect)
buildUI()
}
private var valueBlock: ((_ date:Date)->())?
// MARK: - Background Button
lazy private var button: UIButton = {
let btn = UIButton(type: .custom)
btn.backgroundColor = .clear
btn.addTarget(self, action: #selector(buttonClick), for: .touchUpInside)
return btn
}()
// MARK: - Bottom Content
lazy private var bgView: UIView = {
let view = UIView()
view.backgroundColor = .white
view.clipsToBounds = true
view.layer.cornerRadius = 22
view.layer.maskedCorners = [
.layerMinXMinYCorner,
.layerMaxXMinYCorner
]
return view
}()
// MARK: - Close
lazy private var closeButton: UIButton = {
let btn = UIButton(type: .custom)
btn.setImage(UIImage(named: "payment_close"), for: .normal)
btn.addTarget(self, action: #selector(closeButtonClick), for: .touchUpInside)
return btn
}()
lazy private var datePicker: UIDatePicker = {
let picker = UIDatePicker()
picker.datePickerMode = .date
if #available(iOS 13.4, *) {
picker.preferredDatePickerStyle = .wheels
}
picker.locale = Locale(identifier: "zh_CN")
return picker
}()
lazy private var confirmButton: UIButton = {
let btn = UIButton(type: .custom)
btn.setTitle("确定", for: .normal)
btn.setTitleColor(.white, for: .normal)
btn.backgroundColor = .orange
btn.layer.cornerRadius = 22
btn.addTarget(self, action: #selector(confirmButtonClick), for: .touchUpInside)
return btn
}()
// MARK: - Show
static func showCurrentView(
win: UIWindow,
valueBlock: ((Date)->())?
) {
let selfView = DateSelectionView()
selfView.valueBlock = valueBlock
win.addSubview(selfView)
selfView.showView()
}
// MARK: - UI
func buildUI() {
backgroundColor = .clear
addSubview(button)
button.snp.makeConstraints { make in
make.edges.equalToSuperview()
}
button.addSubview(bgView)
bgView.snp.makeConstraints { make in
make.left.right.bottom.equalToSuperview()
make.height.equalTo(370)
}
// close
bgView.addSubview(closeButton)
closeButton.snp.makeConstraints { make in
make.top.equalToSuperview().offset(20)
make.right.equalToSuperview().offset(-20)
make.width.height.equalTo(26)
}
bgView.addSubview(datePicker)
datePicker.snp.makeConstraints { make in
make.top.equalTo(closeButton.snp.bottom).offset(5)
make.left.right.equalToSuperview()
make.height.equalTo(250)
}
bgView.addSubview(confirmButton)
confirmButton.snp.makeConstraints { make in
make.left.equalToSuperview().offset(20)
make.right.equalToSuperview().offset(-20)
make.bottom.equalToSuperview().offset(-30)
make.height.equalTo(44)
}
}
// MARK: - Show
func showView() {
bgView.transform = CGAffineTransform(
translationX: 0,
y: UIScreen.main.bounds.height
)
UIView.animate(withDuration: 0.3) {
self.backgroundColor = .black.withAlphaComponent(0.45)
self.bgView.transform = .identity
}
}
// MARK: - Dismiss
func dismissView() {
UIView.animate(withDuration: 0.25, animations: {
self.backgroundColor = .clear
self.bgView.transform = CGAffineTransform(
translationX: 0,
y: UIScreen.main.bounds.height
)
}) { _ in
self.removeFromSuperview()
}
}
// MARK: - Action
@objc func buttonClick() {
dismissView()
}
@objc func closeButtonClick() {
dismissView()
}
@objc private func confirmButtonClick() {
valueBlock?(datePicker.date)
dismissView()
}
}