Virgil_SelectedImageView.swift 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. //
  2. // SelectedImageView.swift
  3. // 选择图片,上传到七牛,并加载到页面(UIScrollView)
  4. //
  5. // Created by Virgil on 2018/6/14.
  6. // Copyright © 2018年 Virgil. All rights reserved.
  7. //
  8. import UIKit
  9. class Virgil_SelectedImageView: UIView, UIImagePickerControllerDelegate, UINavigationControllerDelegate, MTImagePickerControllerDelegate {
  10. @IBOutlet weak var scrollView: UIScrollView!
  11. var vcSelf: UIViewController!
  12. private var arrBtns = [UIButton]()
  13. var maxCount = 3
  14. var arrImageUrls = [String]()
  15. ///maxCount 最大图片数 arrDefaultImageUrs:默认图片,无为nil vc:当前Controller
  16. func initView(maxCount: Int, arrDefaultImageUrs: [String]?, vc: UIViewController) {
  17. self.maxCount = maxCount
  18. vcSelf = vc
  19. loadImageButtons()
  20. arrImageUrls.removeAll()
  21. if arrDefaultImageUrs != nil {
  22. for url in arrDefaultImageUrs! {
  23. arrImageUrls.append(url)
  24. }
  25. }
  26. scrollView.setSizeWidth(width: self.width())
  27. reLoadImages()
  28. }
  29. ///初始化按钮
  30. func loadImageButtons() {
  31. scrollView.removeAll()
  32. let size = scrollView.frame.height
  33. var left: CGFloat = 0
  34. for i in 0 ..< (maxCount + 1) {
  35. let btn = UIButton(frame: CGRect(x: left, y: 0, width: size, height: size))
  36. scrollView.addSubview(btn)
  37. btn.tag = i
  38. left += size + 10
  39. btn.isHidden = true
  40. arrBtns.append(btn)
  41. btn.addTarget(self, action: #selector(btnClick), for: .touchUpInside)
  42. }
  43. scrollView.contentSize.width = left
  44. }
  45. var btnClickCurrnet = 0
  46. @objc func btnClick(btn: UIButton) {
  47. btnClickCurrnet = btn.tag
  48. //添加按钮
  49. if btn.tag == arrImageUrls.count {
  50. if self.arrImageUrls.count >= maxCount {
  51. CommonUntils.alert(message: "最多只能上传\(maxCount)张照片!")
  52. return
  53. }
  54. CommonUntils.AlertView(controller: vcSelf, title: nil, message: nil, buttons: ["拍照上传", "从相册上传"], style: .actionSheet) {[weak self] (index, _) in
  55. let ipc = UIImagePickerController()
  56. if index == 0 {
  57. ipc.sourceType = .camera
  58. ipc.delegate = self!
  59. //默认图片
  60. // 视频 ipc.mediaTypes = ["public.movie"] //UIImagePickerControllerMediaURL 取
  61. ipc.allowsEditing = false
  62. self!.vcSelf.present(ipc, animated: true, completion: nil)
  63. } else {
  64. self!.selectImageForPhoto()
  65. //ipc.sourceType = .photoLibrary
  66. }
  67. }
  68. } else //其他图片按钮
  69. {
  70. CommonUntils.AlertView(controller: vcSelf, title: nil, message: nil, buttons: ["删除"], style: .actionSheet) {[weak self] (_, _) in
  71. self!.arrImageUrls.remove(at: self!.btnClickCurrnet)
  72. self!.reLoadImages()
  73. }
  74. }
  75. }
  76. func selectImageForPhoto() {
  77. var mediaTypes = [MTImagePickerMediaType]()
  78. mediaTypes.append(MTImagePickerMediaType.Photo)
  79. let source = MTImagePickerSource.ALAsset
  80. let vc = MTImagePickerController.instance
  81. vc.mediaTypes = mediaTypes
  82. vc.source = source
  83. vc.imagePickerDelegate = self
  84. let defaultShowCameraRoll = true
  85. vc.maxCount = maxCount - self.arrImageUrls.count
  86. vc.defaultShowCameraRoll = defaultShowCameraRoll
  87. UIApplication.shared.setStatusBarStyle(.default, animated: false)
  88. vcSelf.present(vc, animated: true, completion: nil)
  89. }
  90. func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey: Any]) {
  91. vcSelf.dismiss(animated: true) {[weak self] in
  92. var imgTemp: UIImage? = info[UIImagePickerController.InfoKey.originalImage] as? UIImage
  93. if picker.allowsEditing {
  94. imgTemp = info[UIImagePickerController.InfoKey.editedImage] as? UIImage
  95. }
  96. if imgTemp != nil {
  97. self!.uploadImage(img: imgTemp!)
  98. } else {
  99. SVProgressHUD.showError(withStatus: "图片选择失败,请重试")
  100. }
  101. }
  102. }
  103. @available(iOS 8.0, *)
  104. func imagePickerController(picker: MTImagePickerController, didFinishPickingWithPhotosModels models: [MTImagePickerPhotosModel]) {
  105. UIApplication.shared.setStatusBarStyle(.lightContent, animated: false)
  106. //self.dataSource = models
  107. // self.tableView.reloadData()
  108. for i in 0 ..< models.count {
  109. uploadImage(img: models[i].getPreviewImage()!)
  110. }
  111. // loadCurrentImage();
  112. }
  113. func imagePickerController(picker: MTImagePickerController, didFinishPickingWithAssetsModels models: [MTImagePickerAssetsModel]) {
  114. UIApplication.shared.setStatusBarStyle(.lightContent, animated: false)
  115. for i in 0 ..< models.count {
  116. uploadImage(img: models[i].getPreviewImage()!)
  117. }
  118. // loadCurrentImage();
  119. }
  120. func uploadImage(img: UIImage) {
  121. SVProgressHUD.show()
  122. let uploadFile = QiNiuUploadFile()
  123. uploadFile.uploadFile(img: img) {[weak self] (type, str) in
  124. SVProgressHUD.dismiss()
  125. if type == 1 {
  126. let userLoginUrl = RequestURL.qiNiuImageUrl + str
  127. self!.arrImageUrls.append(userLoginUrl)
  128. self!.reLoadImages()
  129. } else {
  130. SVProgressHUD.showError(withStatus: "上传失败")
  131. }
  132. }
  133. }
  134. ///加载图片
  135. func reLoadImages() {
  136. for i in 0 ..< arrBtns.count {
  137. if i < arrImageUrls.count {
  138. arrBtns[i].loadBackgroudImage(imgUrl: arrImageUrls[i], defaultImage: "bn-tjzp")
  139. arrBtns[i].isHidden = false
  140. arrBtns[i].setCornerRadius(size: 8)
  141. } else if i == arrImageUrls.count {
  142. arrBtns[i].setBackgroudImage(name: "bn-tjzp")
  143. arrBtns[i].isHidden = false
  144. } else {
  145. arrBtns[i].isHidden = true
  146. }
  147. }
  148. if arrImageUrls.count > 0 {
  149. scrollView.contentSize.width = arrBtns[arrImageUrls.count].right() + 10
  150. } else {
  151. scrollView.contentSize.width = scrollView.width()
  152. }
  153. if scrollView.contentSize.width > scrollView.width() {
  154. scrollView.contentOffset.x = scrollView.contentSize.width - scrollView.width()
  155. }
  156. }
  157. }