JCMessageImageCollectionViewCell.swift 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. //
  2. // JCMessageImageCollectionViewCell.swift
  3. // JChatSwift
  4. //
  5. // Created by oshumini on 16/6/7.
  6. // Copyright © 2016年 HXHG. All rights reserved.
  7. //
  8. import UIKit
  9. import JMessage
  10. @objc public protocol JCImageBrowserCellDelegate: NSObjectProtocol {
  11. @objc optional func singleTap()
  12. @objc optional func longTap(tableviewCell cell: JCMessageImageCollectionViewCell)
  13. }
  14. @objc(JCMessageImageCollectionViewCell)
  15. public class JCMessageImageCollectionViewCell: UICollectionViewCell {
  16. weak var delegate: JCImageBrowserCellDelegate?
  17. @IBOutlet weak var messageImageContent: UIScrollView!
  18. var messageImage: UIImageView!
  19. override public func awakeFromNib() {
  20. super.awakeFromNib()
  21. messageImage = UIImageView()
  22. messageImage.contentMode = .scaleAspectFit
  23. messageImage.backgroundColor = UIColor.black
  24. messageImage.frame = UIScreen.main.bounds
  25. messageImageContent.addSubview(messageImage)
  26. messageImageContent.delegate = self
  27. messageImageContent.maximumZoomScale = 2.0
  28. messageImageContent.minimumZoomScale = 1.0
  29. messageImageContent.contentSize = messageImageContent.frame.size
  30. let singleTapGesture = UITapGestureRecognizer(target: self, action: #selector(singleTapImage(_:)))
  31. singleTapGesture.numberOfTapsRequired = 1
  32. addGestureRecognizer(singleTapGesture)
  33. let doubleTapGesture = UITapGestureRecognizer(target: self, action: #selector(doubleTapImage(_:)))
  34. doubleTapGesture.numberOfTapsRequired = 2
  35. addGestureRecognizer(doubleTapGesture)
  36. singleTapGesture.require(toFail: doubleTapGesture)
  37. let longTapGesture = UILongPressGestureRecognizer(target: self, action: #selector(longTapImage(_:)))
  38. addGestureRecognizer(longTapGesture)
  39. }
  40. @objc func singleTapImage(_ gestureRecognizer: UITapGestureRecognizer) {
  41. delegate?.singleTap?()
  42. }
  43. @objc func doubleTapImage(_ gestureRecognizer: UITapGestureRecognizer) {
  44. adjustImageScale()
  45. }
  46. @objc func longTapImage(_ gestureRecognizer: UILongPressGestureRecognizer) {
  47. if gestureRecognizer.state == .began {
  48. delegate?.longTap?(tableviewCell: self)
  49. }
  50. }
  51. func adjustImageScale() {
  52. if messageImageContent.zoomScale > 1.5 {
  53. messageImageContent.setZoomScale(1.0, animated: true)
  54. } else {
  55. messageImageContent.setZoomScale(2.0, animated: true)
  56. }
  57. }
  58. func setImage(image: UIImage) {
  59. messageImage.image = image
  60. }
  61. func setMessage(_ message: JMSGMessage) {
  62. guard let content = message.content as? JMSGImageContent else {
  63. return
  64. }
  65. content.thumbImageData { (data, msgId, error) in
  66. if msgId == message.msgId {
  67. if let data = data {
  68. self.messageImage.image = UIImage(data: data)
  69. }
  70. }
  71. content.largeImageData(progress: nil, completionHandler: { (data, msgId, error) in
  72. if error == nil {
  73. if msgId != message.msgId {
  74. return
  75. }
  76. if let data = data {
  77. self.messageImage.image = UIImage(data: data)
  78. }
  79. }
  80. })
  81. }
  82. }
  83. }
  84. extension JCMessageImageCollectionViewCell:UIScrollViewDelegate {
  85. public func viewForZooming(in scrollView: UIScrollView) -> UIView? {
  86. return messageImage
  87. }
  88. }