SearchContentListCollectionCell.swift 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261
  1. //
  2. // RecommendSimilarCollectionCell.swift
  3. // RainbowPlanet
  4. //
  5. // Created by Christopher on 2019/6/14.
  6. // Copyright © 2019 RainbowPlanet. All rights reserved.
  7. // 相关推荐のCollectionCell
  8. import UIKit
  9. import RxSwift
  10. import Lottie
  11. import Kingfisher
  12. class SearchContentListCollectionCell: UICollectionViewCell {
  13. deinit {
  14. NXLLog("deinit")
  15. }
  16. let disposeBag = DisposeBag()
  17. typealias LikeSelectBlock = (_ isLiked: Int) -> Void
  18. var likeSelectBlock : LikeSelectBlock?
  19. class func cellWith(collectionView:UICollectionView,indexPath:IndexPath) -> SearchContentListCollectionCell {
  20. let ID = "RecommendSimilarCollectionCell"
  21. collectionView.register(SearchContentListCollectionCell.self, forCellWithReuseIdentifier: ID)
  22. let cell : SearchContentListCollectionCell = collectionView.dequeueReusableCell(withReuseIdentifier: ID, for: indexPath) as! SearchContentListCollectionCell
  23. cell.indexPath = indexPath
  24. return cell
  25. }
  26. //MARK: - indexPath
  27. var indexPath: IndexPath?{
  28. didSet {
  29. if indexPath?.row == 0 {
  30. contentImageView.snp.remakeConstraints { (make) in
  31. make.top.left.right.equalToSuperview()
  32. make.height.equalTo((kScreenWidth-15)/2)
  33. }
  34. }else {
  35. contentImageView.snp.remakeConstraints { (make) in
  36. make.top.left.right.equalToSuperview()
  37. make.height.equalTo(240*kScaleWidth)
  38. }
  39. }
  40. }
  41. }
  42. //MARK: - 初始化
  43. override init(frame: CGRect) {
  44. super.init(frame: frame)
  45. backgroundColor = kffffffColor
  46. setupViews()
  47. setupLayouts()
  48. setupdata()
  49. }
  50. required init?(coder aDecoder: NSCoder) {
  51. fatalError("init(coder:) has not been implemented")
  52. }
  53. //MRAK: - 设置View
  54. private func setupViews() {
  55. self.cornerRadius = 4
  56. self.masksToBounds = true
  57. addSubview(contentImageView)
  58. addSubview(titleLabel)
  59. addSubview(avatarButton)
  60. addSubview(nameButton)
  61. addSubview(likeBtn)
  62. contentImageView.addSubview(pauseImageView)
  63. likeBtn.imageView?.addSubview(praiseAnimationView)
  64. }
  65. private func setupLayouts() {
  66. contentImageView.snp.makeConstraints { (make) in
  67. make.top.left.right.equalToSuperview()
  68. }
  69. titleLabel.snp.makeConstraints { (make) in
  70. make.top.equalTo(contentImageView.snp_bottom).offset(15)
  71. make.left.equalTo(contentImageView.snp_left).offset(10)
  72. make.right.equalTo(contentImageView.snp_right).offset(-10)
  73. }
  74. avatarButton.snp.makeConstraints { (make) in
  75. make.top.equalTo(titleLabel.snp_bottom).offset(10)
  76. make.left.equalToSuperview().offset(10)
  77. make.size.equalTo(18)
  78. }
  79. likeBtn.snp.remakeConstraints { (make) in
  80. make.centerY.equalTo(avatarButton)
  81. make.right.equalTo(-13)
  82. make.height.equalTo(18)
  83. }
  84. likeBtn.layoutButton(edgeInsetsStyle: ButtonEdgeInsetsStyle.left, imageTitleSpace: 5)
  85. nameButton.snp.remakeConstraints { (make) in
  86. make.centerY.equalTo(avatarButton)
  87. make.left.equalTo(avatarButton.snp_right).offset(5)
  88. make.height.equalTo(18)
  89. make.right.equalTo(likeBtn.snp_left).offset(-5)
  90. }
  91. praiseAnimationView.snp.makeConstraints { (make) in
  92. make.edges.equalToSuperview()
  93. }
  94. pauseImageView.snp_makeConstraints { (make) in
  95. make.center.equalToSuperview()
  96. }
  97. }
  98. func setupdata() {
  99. avatarButton.rx.tap.subscribe(onNext: {
  100. [weak self] (data) in
  101. if UserModel.isTokenNil() {
  102. kAppDelegate.setLogin()
  103. }else {
  104. if let userClosure = self?.userClosure {
  105. userClosure()
  106. }
  107. }
  108. }).disposed(by: disposeBag)
  109. nameButton.rx.tap.subscribe(onNext: {
  110. [weak self] (data) in
  111. if UserModel.isTokenNil() {
  112. kAppDelegate.setLogin()
  113. }else {
  114. if let userClosure = self?.userClosure {
  115. userClosure()
  116. }
  117. }
  118. }).disposed(by: disposeBag)
  119. likeBtn.rx.tap.subscribe(onNext: { [weak self] (data) in
  120. if UserModel.isTokenNil() {
  121. kAppDelegate.setLogin()
  122. }else {
  123. if self?.communityPostDataModel?.isLike == 0 {
  124. self?.praiseAnimationView.isHidden = false
  125. self?.praiseAnimationView.play(completion: { [weak self] (_) in
  126. self?.praiseAnimationView.isHidden = true
  127. })
  128. }
  129. VirusViewModel.shared.likeVirueRecordAddApi(communityPostDataModel: (self?.communityPostDataModel)!, cell: self!)
  130. }
  131. }).disposed(by: disposeBag)
  132. }
  133. private lazy var contentImageView: UIImageView = {
  134. let contentImageView = UIImageView()
  135. contentImageView.image = kImage(name: "default_pic")
  136. contentImageView.contentMode = .scaleAspectFill
  137. contentImageView.clipsToBounds = true
  138. return contentImageView
  139. }()
  140. private lazy var titleLabel: UILabel = {
  141. let titleLabel = UILabel()
  142. titleLabel.textColor = k262626Color
  143. titleLabel.font = kMediumFont13
  144. titleLabel.textAlignment = .left
  145. titleLabel.numberOfLines = 2
  146. return titleLabel
  147. }()
  148. typealias UserClosure = () -> Void
  149. var userClosure : UserClosure?
  150. private lazy var avatarButton: UIButton = {
  151. let avatarButton = UIButton(type: UIButton.ButtonType.custom)
  152. avatarButton.setImage(kImage(name: "default_avatar"), for: UIControl.State.normal)
  153. avatarButton.cornerRadius = 18/2
  154. avatarButton.masksToBounds = true
  155. return avatarButton
  156. }()
  157. private lazy var nameButton: UIButton = {
  158. let nameButton = UIButton(type: UIButton.ButtonType.custom)
  159. nameButton.setTitle("昵称", for: UIControl.State.normal)
  160. nameButton.setTitleColor(k262626Color, for: UIControl.State.normal)
  161. nameButton.titleLabel?.font = kRegularFont12
  162. nameButton.contentHorizontalAlignment = .left
  163. nameButton.titleLabel?.lineBreakMode = .byTruncatingTail
  164. return nameButton
  165. }()
  166. lazy var likeBtn: UIButton = {
  167. let likeBtn = UIButton(type: UIButton.ButtonType.custom)
  168. likeBtn.setTitleColor(k999999Color, for: UIControl.State.normal)
  169. likeBtn.setImage(kImage(name: "btn_praise"), for: UIControl.State.normal)
  170. likeBtn.setImage(kImage(name: "btn_praise_pre_36px"), for: UIControl.State.selected)
  171. likeBtn.titleLabel?.font = kRegularFont12
  172. return likeBtn
  173. }()
  174. private lazy var praiseAnimationView: AnimationView = {
  175. let praiseAnimationView = AnimationView()
  176. let animation = Animation.named("verywell")
  177. praiseAnimationView.animation = animation
  178. praiseAnimationView.contentMode = .scaleAspectFit
  179. praiseAnimationView.loopMode = .playOnce
  180. praiseAnimationView.isHidden = true
  181. return praiseAnimationView
  182. }()
  183. private lazy var pauseImageView: UIImageView = {
  184. let pauseImageView = UIImageView.init(image: kImage(name: "btn_pause"))
  185. pauseImageView.isUserInteractionEnabled = true
  186. return pauseImageView
  187. }()
  188. var communityPostDataModel : CommunityPostDataModel? {
  189. didSet {
  190. contentImageView.kf.setImage(with: kURLImage(name: communityPostDataModel?.img ?? ""), placeholder: kImage(name: "default_pic")
  191. )
  192. titleLabel.text = communityPostDataModel?.title
  193. if communityPostDataModel?.title == "" || communityPostDataModel?.title == nil {
  194. titleLabel.text = communityPostDataModel?.content?.replacingOccurrences(of: "\n", with: "").replacingOccurrences(of: "\r", with: "")
  195. }else {
  196. titleLabel.text = communityPostDataModel?.title?.replacingOccurrences(of: "\n", with: "").replacingOccurrences(of: "\r", with: "")
  197. }
  198. avatarButton.kf.setImage(with: kURLThumbnailsImage(name: communityPostDataModel?.avatar ?? "", size: kSize18x18Image), for: UIControl.State.normal, placeholder: kImage(name: "default_avatar"))
  199. likeBtn.setTitle("\(communityPostDataModel?.praiseCount ?? 0)", for: UIControl.State.normal)
  200. if communityPostDataModel?.isLike == 0 {
  201. likeBtn.isSelected = false
  202. }else {
  203. likeBtn.isSelected = true
  204. }
  205. nameButton.setTitle(communityPostDataModel?.username, for: UIControl.State.normal)
  206. nameButton.snp.remakeConstraints { (make) in
  207. make.centerY.equalTo(avatarButton)
  208. make.left.equalTo(avatarButton.snp_right).offset(5)
  209. make.height.equalTo(18)
  210. make.right.lessThanOrEqualTo(likeBtn.snp_left).offset(-5)
  211. }
  212. likeBtn.snp.remakeConstraints { (make) in
  213. make.centerY.equalTo(avatarButton)
  214. make.right.equalTo(-13)
  215. make.height.equalTo(18)
  216. }
  217. likeBtn.layoutButton(edgeInsetsStyle: ButtonEdgeInsetsStyle.left, imageTitleSpace: 5)
  218. if PostType(rawValue: communityPostDataModel?.type ?? "video") == .video {
  219. pauseImageView.isHidden = false
  220. }else {
  221. pauseImageView.isHidden = true
  222. }
  223. //ImageCache.default.clearMemoryCache()
  224. }
  225. }
  226. }