JCPhotoBar.swift 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. //
  2. // JCPhotoBar.swift
  3. // JChat
  4. //
  5. // Created by deng on 2017/3/31.
  6. // Copyright © 2017年 HXHG. All rights reserved.
  7. //
  8. import UIKit
  9. @objc public protocol JCPhotoBarDelegate: NSObjectProtocol {
  10. @objc optional func photoBarDeleteImage(index: Int)
  11. @objc optional func photoBarClickImage(index: Int)
  12. @objc optional func photoBarAddImage()
  13. }
  14. class JCPhotoBar: UIView {
  15. weak var delegate: JCPhotoBarDelegate? {
  16. get {
  17. return item1.delegate
  18. }
  19. set {
  20. item1.delegate = newValue
  21. item2.delegate = newValue
  22. item3.delegate = newValue
  23. item4.delegate = newValue
  24. }
  25. }
  26. override init(frame: CGRect) {
  27. super.init(frame: frame)
  28. _init()
  29. }
  30. required init?(coder aDecoder: NSCoder) {
  31. fatalError("init(coder:) has not been implemented")
  32. }
  33. private let offset = (UIScreen.main.bounds.size.width - 30 - 65 * 4) / 3
  34. private lazy var item1: JCPhotoBarItem = JCPhotoBarItem(frame: CGRect(x: 15, y: 0, width: 65, height: 65))
  35. private lazy var item2: JCPhotoBarItem = JCPhotoBarItem(frame: CGRect(x: 15 + 65 + self.offset, y: 0, width: 65, height: 65))
  36. private lazy var item3: JCPhotoBarItem = JCPhotoBarItem(frame: CGRect(x: 16 + (65 + self.offset) * 2, y: 0, width: 65, height: 65))
  37. private lazy var item4: JCPhotoBarItem = JCPhotoBarItem(frame: CGRect(x: 15 + (65 + self.offset) * 3, y: 0, width: 65, height: 65))
  38. func bindData(_ images: [UIImage]) {
  39. switch images.count + 1 {
  40. case 1:
  41. item1.setAddImage()
  42. item2.isHidden = true
  43. item3.isHidden = true
  44. item4.isHidden = true
  45. case 2:
  46. item1.setImage(images[0])
  47. item2.setAddImage()
  48. item3.isHidden = true
  49. item4.isHidden = true
  50. case 3:
  51. item1.setImage(images[0])
  52. item2.setImage(images[1])
  53. item3.setAddImage()
  54. item4.isHidden = true
  55. case 4:
  56. item1.setImage(images[0])
  57. item2.setImage(images[1])
  58. item3.setImage(images[2])
  59. item4.setAddImage()
  60. default:
  61. item1.setImage(images[0])
  62. item2.setImage(images[1])
  63. item3.setImage(images[2])
  64. item4.setImage(images[3])
  65. }
  66. }
  67. private func _init() {
  68. item1.index = 0
  69. item2.index = 1
  70. item3.index = 2
  71. item4.index = 3
  72. addSubview(item1)
  73. addSubview(item2)
  74. addSubview(item3)
  75. addSubview(item4)
  76. }
  77. }
  78. class JCPhotoBarItem: UIView {
  79. weak var delegate: JCPhotoBarDelegate?
  80. var index = 0
  81. var isHiddenDelButton: Bool {
  82. get {
  83. return delButton.isHidden
  84. }
  85. set {
  86. delButton.isHidden = newValue
  87. }
  88. }
  89. override init(frame: CGRect) {
  90. super.init(frame: frame)
  91. _init()
  92. }
  93. required init?(coder aDecoder: NSCoder) {
  94. fatalError("init(coder:) has not been implemented")
  95. }
  96. private lazy var iconView: UIImageView = UIImageView()
  97. private lazy var delButton: UIButton = UIButton()
  98. func setAddImage() {
  99. self.isHidden = false
  100. iconView.image = UIImage.loadImage("com_icon_add_65")
  101. delButton.isHidden = true
  102. }
  103. func setImage(_ image: UIImage) {
  104. self.isHidden = false
  105. delButton.isHidden = false
  106. iconView.image = image
  107. }
  108. private func _init() {
  109. iconView.frame = CGRect(x: 0, y: 0, width: self.width, height: self.height)
  110. let tapGR = UITapGestureRecognizer(target: self, action: #selector(_tapHandler))
  111. iconView.addGestureRecognizer(tapGR)
  112. iconView.isUserInteractionEnabled = true
  113. addSubview(iconView)
  114. let bgImage = UIImage.loadImage("icon_icon_close")
  115. delButton.frame = CGRect(x: self.width - 20, y: 0, width: 20, height: 20)
  116. delButton.setBackgroundImage(bgImage, for: .normal)
  117. delButton.addTarget(self, action: #selector(_delImage(_ :)), for: .touchUpInside)
  118. addSubview(delButton)
  119. }
  120. func _tapHandler() {
  121. if isHiddenDelButton {
  122. delegate?.photoBarAddImage?()
  123. return
  124. }
  125. delegate?.photoBarClickImage?(index: index)
  126. }
  127. func _delImage(_ sender: UIButton) {
  128. delegate?.photoBarDeleteImage?(index: index)
  129. }
  130. }