ImageFileViewController.swift 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. //
  2. // ImageFileViewController.swift
  3. // JChat
  4. //
  5. // Created by 邓永豪 on 2017/8/28.
  6. // Copyright © 2017年 HXHG. All rights reserved.
  7. //
  8. import UIKit
  9. var messages: [JMessage] = []
  10. class ImageFileViewController: UIViewController {
  11. var isEditModel: Bool {
  12. get {
  13. return isEdit
  14. } set {
  15. isEdit = newValue
  16. selectMessages = []
  17. collectionView.reloadData()
  18. }
  19. }
  20. var messages: [JMSGMessage] = []
  21. var selectMessages: [JMSGMessage] = []
  22. override func viewDidLoad() {
  23. super.viewDidLoad()
  24. _init()
  25. }
  26. func reloadDate() {
  27. sortMessage()
  28. collectionView.reloadData()
  29. }
  30. fileprivate var isEdit = false
  31. private lazy var layout: UICollectionViewFlowLayout = {
  32. var layout = UICollectionViewFlowLayout()
  33. // layout.sectionInset = UIEdgeInsetsMake(5, 5, 5, 5);
  34. layout.minimumInteritemSpacing = 1
  35. layout.minimumLineSpacing = 1
  36. layout.itemSize = CGSize(width: (self.view.width - 4) / 4, height: (self.view.width - 4) / 4)
  37. return layout
  38. }()
  39. private lazy var collectionView: UICollectionView = {
  40. var collectionView = UICollectionView(frame: .zero, collectionViewLayout: self.layout)
  41. collectionView.register(ImageFileCell.self, forCellWithReuseIdentifier:"ImageFileCell")
  42. collectionView.delegate = self;
  43. collectionView.dataSource = self;
  44. collectionView.backgroundColor = UIColor(netHex: 0xe8edf3)
  45. return collectionView
  46. }()
  47. let headerHeight = 30
  48. let headerIdentifier = "headView"
  49. fileprivate lazy var data: Dictionary<String, [JMSGMessage]> = Dictionary()
  50. fileprivate lazy var keys: [String] = []
  51. private func _init() {
  52. view.backgroundColor = UIColor(netHex: 0xe8edf3)
  53. view.addSubview(collectionView)
  54. collectionView.register(ImageFileHeader.classForCoder(), forSupplementaryViewOfKind: UICollectionView.elementKindSectionHeader, withReuseIdentifier: headerIdentifier)
  55. view.addConstraint(_JCLayoutConstraintMake(collectionView, .left, .equal, view, .left))
  56. view.addConstraint(_JCLayoutConstraintMake(collectionView, .top, .equal, view, .top))
  57. view.addConstraint(_JCLayoutConstraintMake(collectionView, .right, .equal, view, .right))
  58. view.addConstraint(_JCLayoutConstraintMake(collectionView, .bottom, .equal, view, .bottom))
  59. }
  60. func sortMessage() {
  61. for message in messages {
  62. let formatter = DateFormatter()
  63. formatter.dateFormat = "yyyy-MM";
  64. let date = Date(timeIntervalSince1970: TimeInterval(message.timestamp.intValue / 1000))
  65. let key = formatter.string(from: date)
  66. var array = data[key]
  67. if array == nil {
  68. array = [message]
  69. } else {
  70. array?.append(message)
  71. }
  72. if !keys.contains(key) {
  73. keys.append(key)
  74. }
  75. data[key] = array
  76. }
  77. keys = keys.sorted(by: { (str1, str2) -> Bool in
  78. str1 > str2
  79. })
  80. }
  81. }
  82. extension ImageFileViewController: UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout {
  83. func numberOfSections(in collectionView: UICollectionView) -> Int {
  84. return keys.count
  85. }
  86. func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
  87. return data[keys[section]]!.count
  88. }
  89. func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
  90. let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "ImageFileCell", for: indexPath) as! ImageFileCell
  91. let message = data[keys[indexPath.section]]![indexPath.row]
  92. cell.bindDate(message)
  93. cell.isEditMode = isEdit
  94. if !isEditModel {
  95. cell.isSelectImage = false
  96. }
  97. return cell
  98. }
  99. func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize{
  100. return CGSize(width: view.width, height: 26)
  101. }
  102. func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView{
  103. var v = ImageFileHeader()
  104. if kind == UICollectionView.elementKindSectionHeader{
  105. v = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: headerIdentifier, for: indexPath) as! ImageFileHeader
  106. v.titleLabel?.text = keys[indexPath.section]
  107. }
  108. return v
  109. }
  110. func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
  111. guard let cell = collectionView.cellForItem(at: indexPath) as? ImageFileCell else {
  112. return
  113. }
  114. let message = data[keys[indexPath.section]]![indexPath.row]
  115. if cell.isEditMode {
  116. if cell.isSelectImage {
  117. selectMessages = selectMessages.filter({ (m) -> Bool in
  118. message.msgId != m.msgId
  119. })
  120. } else {
  121. selectMessages.append(message)
  122. }
  123. cell.isSelectImage = !cell.isSelectImage
  124. NotificationCenter.default.post(name: NSNotification.Name(rawValue: "kDidSelectFileMessage"), object: nil)
  125. } else {
  126. if let image = cell.imageView.image {
  127. let browserImageVC = JCImageBrowserViewController()
  128. browserImageVC.imageArr = [image]
  129. browserImageVC.imgCurrentIndex = 0
  130. self.present(browserImageVC, animated: true) {}
  131. }
  132. }
  133. }
  134. }