// // SelectedImageView.swift // 选择图片,上传到七牛,并加载到页面(UIScrollView) // // Created by Virgil on 2018/6/14. // Copyright © 2018年 Virgil. All rights reserved. // import UIKit class Virgil_SelectedImageView: UIView, UIImagePickerControllerDelegate, UINavigationControllerDelegate, MTImagePickerControllerDelegate { @IBOutlet weak var scrollView: UIScrollView! var vcSelf: UIViewController! private var arrBtns = [UIButton]() var maxCount = 3 var arrImageUrls = [String]() ///maxCount 最大图片数 arrDefaultImageUrs:默认图片,无为nil vc:当前Controller func initView(maxCount: Int, arrDefaultImageUrs: [String]?, vc: UIViewController) { self.maxCount = maxCount vcSelf = vc loadImageButtons() arrImageUrls.removeAll() if arrDefaultImageUrs != nil { for url in arrDefaultImageUrs! { arrImageUrls.append(url) } } scrollView.setSizeWidth(width: self.width()) reLoadImages() } ///初始化按钮 func loadImageButtons() { scrollView.removeAll() let size = scrollView.frame.height var left: CGFloat = 0 for i in 0 ..< (maxCount + 1) { let btn = UIButton(frame: CGRect(x: left, y: 0, width: size, height: size)) scrollView.addSubview(btn) btn.tag = i left += size + 10 btn.isHidden = true arrBtns.append(btn) btn.addTarget(self, action: #selector(btnClick), for: .touchUpInside) } scrollView.contentSize.width = left } var btnClickCurrnet = 0 @objc func btnClick(btn: UIButton) { btnClickCurrnet = btn.tag //添加按钮 if btn.tag == arrImageUrls.count { if self.arrImageUrls.count >= maxCount { CommonUntils.alert(message: "最多只能上传\(maxCount)张照片!") return } CommonUntils.AlertView(controller: vcSelf, title: nil, message: nil, buttons: ["拍照上传", "从相册上传"], style: .actionSheet) {[weak self] (index, _) in let ipc = UIImagePickerController() if index == 0 { ipc.sourceType = .camera ipc.delegate = self! //默认图片 // 视频 ipc.mediaTypes = ["public.movie"] //UIImagePickerControllerMediaURL 取 ipc.allowsEditing = false self!.vcSelf.present(ipc, animated: true, completion: nil) } else { self!.selectImageForPhoto() //ipc.sourceType = .photoLibrary } } } else //其他图片按钮 { CommonUntils.AlertView(controller: vcSelf, title: nil, message: nil, buttons: ["删除"], style: .actionSheet) {[weak self] (_, _) in self!.arrImageUrls.remove(at: self!.btnClickCurrnet) self!.reLoadImages() } } } func selectImageForPhoto() { var mediaTypes = [MTImagePickerMediaType]() mediaTypes.append(MTImagePickerMediaType.Photo) let source = MTImagePickerSource.ALAsset let vc = MTImagePickerController.instance vc.mediaTypes = mediaTypes vc.source = source vc.imagePickerDelegate = self let defaultShowCameraRoll = true vc.maxCount = maxCount - self.arrImageUrls.count vc.defaultShowCameraRoll = defaultShowCameraRoll UIApplication.shared.setStatusBarStyle(.default, animated: false) vcSelf.present(vc, animated: true, completion: nil) } func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey: Any]) { vcSelf.dismiss(animated: true) {[weak self] in var imgTemp: UIImage? = info[UIImagePickerController.InfoKey.originalImage] as? UIImage if picker.allowsEditing { imgTemp = info[UIImagePickerController.InfoKey.editedImage] as? UIImage } if imgTemp != nil { self!.uploadImage(img: imgTemp!) } else { SVProgressHUD.showError(withStatus: "图片选择失败,请重试") } } } @available(iOS 8.0, *) func imagePickerController(picker: MTImagePickerController, didFinishPickingWithPhotosModels models: [MTImagePickerPhotosModel]) { UIApplication.shared.setStatusBarStyle(.lightContent, animated: false) //self.dataSource = models // self.tableView.reloadData() for i in 0 ..< models.count { uploadImage(img: models[i].getPreviewImage()!) } // loadCurrentImage(); } func imagePickerController(picker: MTImagePickerController, didFinishPickingWithAssetsModels models: [MTImagePickerAssetsModel]) { UIApplication.shared.setStatusBarStyle(.lightContent, animated: false) for i in 0 ..< models.count { uploadImage(img: models[i].getPreviewImage()!) } // loadCurrentImage(); } func uploadImage(img: UIImage) { SVProgressHUD.show() let uploadFile = QiNiuUploadFile() uploadFile.uploadFile(img: img) {[weak self] (type, str) in SVProgressHUD.dismiss() if type == 1 { let userLoginUrl = RequestURL.qiNiuImageUrl + str self!.arrImageUrls.append(userLoginUrl) self!.reLoadImages() } else { SVProgressHUD.showError(withStatus: "上传失败") } } } ///加载图片 func reLoadImages() { for i in 0 ..< arrBtns.count { if i < arrImageUrls.count { arrBtns[i].loadBackgroudImage(imgUrl: arrImageUrls[i], defaultImage: "bn-tjzp") arrBtns[i].isHidden = false arrBtns[i].setCornerRadius(size: 8) } else if i == arrImageUrls.count { arrBtns[i].setBackgroudImage(name: "bn-tjzp") arrBtns[i].isHidden = false } else { arrBtns[i].isHidden = true } } if arrImageUrls.count > 0 { scrollView.contentSize.width = arrBtns[arrImageUrls.count].right() + 10 } else { scrollView.contentSize.width = scrollView.width() } if scrollView.contentSize.width > scrollView.width() { scrollView.contentOffset.x = scrollView.contentSize.width - scrollView.width() } } }