KSMediaPickerViewImageCell.swift 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. //
  2. // KSMediaPickerViewImageCell.swift
  3. //
  4. //
  5. // Created by kinsun on 2019/3/1.
  6. //
  7. import UIKit
  8. import Photos
  9. open class KSMediaPickerViewImageCell: UICollectionViewCell {
  10. public let imageView = {() -> UIImageView in
  11. let imageView = UIImageView()
  12. imageView.contentMode = .scaleAspectFill
  13. return imageView
  14. }()
  15. private let _indView = KSMediaPickerViewImageCell.selectIndicator()
  16. private let _shelterLayer = {() -> CALayer in
  17. let shelterLayer = CALayer()
  18. shelterLayer.backgroundColor = UIColor.ks_white.withAlphaComponent(0.5).cgColor
  19. shelterLayer.isHidden = true
  20. return shelterLayer
  21. }()
  22. private let _highlightView = {() -> UIView in
  23. let highlightView = UIView()
  24. highlightView.isHidden = true
  25. highlightView.isUserInteractionEnabled = false
  26. highlightView.backgroundColor = UIColor.ks_main.withAlphaComponent(0.2)
  27. highlightView.layer.borderWidth = 2.0
  28. highlightView.layer.borderColor = UIColor.ks_main.cgColor
  29. return highlightView
  30. }()
  31. override public init(frame: CGRect) {
  32. super.init(frame: frame)
  33. contentView.clipsToBounds = true
  34. viewWillFinishInit()
  35. contentView.addSubview(_highlightView)
  36. contentView.addSubview(_indView)
  37. _indView.addTarget(self, action: #selector(_didClick(selectedItem:)), for: .touchUpInside)
  38. contentView.layer.addSublayer(_shelterLayer)
  39. }
  40. open func viewWillFinishInit() {
  41. contentView.addSubview(imageView)
  42. }
  43. required public init?(coder aDecoder: NSCoder) {
  44. fatalError("init(coder:) has not been implemented")
  45. }
  46. override open func layoutSubviews() {
  47. super.layoutSubviews()
  48. let bounds = contentView.bounds
  49. imageView.frame = bounds
  50. _highlightView.frame = bounds
  51. let viewW = CGFloat(36.0)
  52. let viewH = viewW
  53. let viewX = bounds.size.width-viewW
  54. let viewY = CGFloat(0.0)
  55. _indView.frame = CGRect(x: viewX, y: viewY, width: viewW, height: viewH)
  56. }
  57. override open func layoutSublayers(of layer: CALayer) {
  58. super.layoutSublayers(of: layer)
  59. _shelterLayer.frame = contentView.layer.bounds
  60. }
  61. open var isMultipleSelected: Bool {
  62. set {
  63. _indView.isMultipleSelected = newValue
  64. }
  65. get {
  66. return _indView.isMultipleSelected
  67. }
  68. }
  69. open var isLoseFocus: Bool {
  70. set {
  71. _shelterLayer.isHidden = !newValue
  72. }
  73. get {
  74. return !_shelterLayer.isHidden
  75. }
  76. }
  77. open var didSelectedItem: ((KSMediaPickerViewImageCell) -> UInt)?
  78. open var itemModel: KSMediaPickerItemModel! {
  79. didSet {
  80. isLoseFocus = itemModel.isLoseFocus
  81. let thumb = itemModel.thumb
  82. if thumb == nil {
  83. PHCachingImageManager.default().requestImage(for: itemModel.asset, targetSize: KSMediaPickerItemModel.thumbSize, contentMode:.aspectFit , options: KSMediaPickerItemModel.pictureViewerOptions) {[weak self] (image, info) in
  84. self?._updateThumb(image)
  85. }
  86. } else {
  87. imageView.image = thumb
  88. }
  89. _indView.index = itemModel.index
  90. itemIsHighlight = itemModel.isHighlight
  91. }
  92. }
  93. private func _updateThumb(_ image: UIImage?) {
  94. itemModel.thumb = image
  95. imageView.image = image
  96. }
  97. @objc private func _didClick(selectedItem: KSMediaPickerViewImageCell.selectIndicator) {
  98. guard didSelectedItem != nil else {
  99. return
  100. }
  101. let index = didSelectedItem!(self)
  102. selectedItem.index = index
  103. itemModel.index = index
  104. }
  105. open var itemIsHighlight: Bool {
  106. set {
  107. _highlightView.isHidden = !newValue
  108. }
  109. get {
  110. return !_highlightView.isHidden
  111. }
  112. }
  113. open var imageViewFrameInSuperView: CGRect {
  114. get {
  115. let wrapperView = superview
  116. let collectionView = wrapperView?.superview
  117. let view = collectionView?.superview
  118. return convert(imageView.frame, to: view)
  119. }
  120. }
  121. }