Swift Control DateSelection(日期选择框)

一直觉得自己写的不是技术,而是情怀,一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的,希望我的这条路能让你们少走弯路,希望我能帮你们抹去知识的蒙尘,希望我能帮你们理清知识的脉络,希望未来技术之巅上有你们也有我。

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()
    }
    
}
相关推荐
开心就好20252 小时前
appuploader-cli 使用教程:在 Windows 上用命令行把 IPA 上传到 App Store
后端·ios
冯汉栩4 小时前
Swift Control DashLineView(虚线)
开发语言·ios·swift
Codeking__4 小时前
iOS 动画:core Animation 底层原理
macos·objective-c·cocoa
2501_915918415 小时前
iOS 真机调试工具推荐,安装运行、性能分析有哪些工具
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
游戏开发爱好者814 小时前
带签名时间戳接口的重放与压力测试实战,用动态值在发送前现算签名
网络协议·计算机网络·网络安全·ios·adb·https·压力测试
2501_916007471 天前
申请 iOS 推送证书并配置 APNs 群发推送教程
android·ios·小程序·https·uni-app·iphone·webview
weixin_403810131 天前
iOS自动化脚本怎么避免风控?无屏幕镜像截图原理详解
ios·自动化·跨境电商·苹果群控·苹果投屏·多媒体运营
东坡肘子1 天前
越来越慢的 App Review,拦住了谁? -- 肘子的 Swift 周报 #149
人工智能·swiftui·swift
wangruofeng1 天前
3 步把 MacBook 变成 7×24 远程主机,人在外面随时接管桌面
ios·agent·mac