class CameraHandler: NSObject {
static let shared = CameraHandler()
fileprivate var currentVC: UIViewController!
//MARK: Internal Properties
var imagePickedClourse: ((UIImage) -> Void)?
func photoLibrary(){
if UIImagePickerController.isSourceTypeAvailable(.photoLibrary){
let photoPicker = UIImagePickerController()
photoPicker.delegate = self
photoPicker.allowsEditing = true
photoPicker.sourceType = .photoLibrary
currentVC.present(photoPicker, animated: true, completion: nil)
}
}
func camera()
{
if UIImagePickerController.isSourceTypeAvailable(.camera){
let myPickerController = UIImagePickerController()
myPickerController.delegate = self;
myPickerController.sourceType = .camera
currentVC.present(myPickerController, animated: true, completion: nil)
}
}
func showActionSheet(vc: UIViewController) -> Self {
currentVC = vc
currentVC.popActionSheet("拍照", { _ in
self.camera()
}, "从手机相册选择") { _ in
self.photoLibrary()
}
return self
}
}
extension CameraHandler: UIImagePickerControllerDelegate, UINavigationControllerDelegate{
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
currentVC.dismiss(animated: true, completion: nil)
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
if let image = info[.originalImage] as? UIImage {
self.imagePickedClourse?(image)
} else if let image = info[.editedImage] as? UIImage {
self.imagePickedClourse?(image)
} else {
print("Something went wrong")
}
currentVC.dismiss(animated: true, completion: nil)
}
}
时间选取
class BaseSelecteViewController: UIViewController {
let bottomView = UIView(backgroundColor: .white)
let cancelBtn = UIButton("取消", titleColor: .black, fontSize: 20).add(self, action: #selector(tapClick))
let confirmBtn = UIButton("确定", titleColor: .black, fontSize: 20).add(self, action: #selector(clickConfirmButton))
override func viewDidLoad() {
super.viewDidLoad()
setupUI()
}
func setupUI() {
view.backgroundColor = UIColor.black.withAlphaComponent(0.5)
let tap = UITapGestureRecognizer(target: self, action: #selector(tapClick))
view.addGestureRecognizer(tap)
tap.delegate = self
view.addSubview(bottomView)
bottomView.addSubview(cancelBtn)
bottomView.addSubview(confirmBtn)
bottomView.snp.makeConstraints { (make) in
make.left.right.bottom.equalTo(0)
make.height.equalTo(300)
}
cancelBtn.snp.makeConstraints { (make) in
make.top.left.equalTo(15)
make.width.equalTo(50)
}
confirmBtn.snp.makeConstraints { (make) in
make.top.equalTo(10)
make.right.equalTo(-15)
make.width.equalTo(50)
}
}
}
// MARK: - 页面逻辑交互
extension BaseSelecteViewController {
@objc func tapClick() {
view.removeFromSuperview()
self.removeFromParent()
}
@objc func clickConfirmButton() {
cm_log("确认")
}
}
extension BaseSelecteViewController: UIGestureRecognizerDelegate {
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
if let _ = touch.view?.isDescendant(of: bottomView) {
return false
}
return true
}
}
时间选择
class SelectTimeHandler: BaseSelecteViewController {
var datePicker: UIDatePicker!
var completion: ((String) -> ())!
init(_ completion: @escaping (String) -> ()) {
self.completion = completion
super.init(nibName: nil, bundle: nil)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func setupUI() {
super.setupUI()
datePicker = {
let dp = UIDatePicker().addTo(bottomView)
dp.datePickerMode = UIDatePicker.Mode.dateAndTime
dp.locale = Locale(identifier: "zh_CN") //设置为中文
return dp
}()
datePicker.snp.makeConstraints { (make) in
make.left.right.bottom.equalTo(view)
make.height.equalTo(200)
}
}
override func clickConfirmButton() {
completion(datePicker.date.toymdhm)
tapClick()
}
}
网友评论