Advertisement
Wolverine_X-Man

ArtistTVC2.swift

Feb 5th, 2024
1,033
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 13.88 KB | Source Code | 0 0
  1. //
  2. //  ArtistTVC.swift
  3. //  hubble-ios
  4. //
  5. //  Created by Chandan Chandan on 11/06/23.
  6. //
  7.  
  8. import UIKit
  9.  
  10. class ArtistTVC: UITableViewCell {
  11.     private lazy var mainBgView: UIView = {
  12.         let view = UIView()
  13.         view.isUserInteractionEnabled = true
  14.         view.backgroundColor = .clear
  15.         view.corner(cornerRadius: 12)
  16.         return view
  17.     }()
  18.     private lazy var bgImageView: UIImageView = {
  19.         let imageView = UIImageView()
  20.         imageView.image = UIImage(named: "cellbg")
  21.         imageView.isUserInteractionEnabled = true
  22.         imageView.backgroundColor = .clear
  23.         return imageView
  24.     }()
  25.     private lazy var cellTypeNameLabel: UILabel = {
  26.         let label = UILabel()
  27.         label.text = "artist_home_artst".myLocalizedString
  28.         label.textAlignment = .center
  29.         label.isUserInteractionEnabled = true
  30.         label.textColor = .white
  31.         label.backgroundColor = .color111111Alpha6
  32.         label.corner(cornerRadius: 8.0)
  33.         label.font = .fontRegular16
  34.         return label
  35.     }()
  36.     private lazy var cellTypeNameLabelBgView: UIView = {
  37.         let view = UIView()
  38.         view.isUserInteractionEnabled = true
  39.         view.addSubview(cellTypeNameLabel)
  40.         cellTypeNameLabel.snp.makeConstraints { make in
  41.             make.center.equalTo(view)
  42.         }
  43.         return view
  44.     }()
  45.     lazy var bookmarkedImageView: UIImageView = {
  46.         let imageView = UIImageView()
  47.         imageView.tintColor = .white
  48.         imageView.isUserInteractionEnabled = true
  49.         let tap = UITapGestureRecognizer(target: self, action: #selector(saveStarButtonTapped(_:)))
  50.         imageView.addGestureRecognizer(tap)
  51.         return imageView
  52.     }()
  53.     private lazy var detailBgView: UIView = { // details
  54.         let view = UIView()
  55.         view.isUserInteractionEnabled = true
  56.         view.backgroundColor = .color111111Alpha6
  57.         return view
  58.     }()
  59.     private lazy var reatingsStack: UIStackView = {
  60.         let stack = UIStackView(arrangedSubviews: [ratingsTextlabel, reatingStarImageView])
  61.         reatingStarImageView.snp.makeConstraints { make in
  62.             make.width.equalTo(20)
  63.         }
  64.         stack.isUserInteractionEnabled = true
  65.         stack.axis = .horizontal
  66.         stack.spacing = 2
  67.         stack.distribution = .fill
  68.         stack.alignment = .fill
  69.         return stack
  70.     }()
  71.     private lazy var ratingsTextlabel: UILabel = {
  72.         let label = UILabel()
  73.         label.textColor = .white
  74.         label.isUserInteractionEnabled = true
  75.         label.font = .fontLight14
  76.         return label
  77.     }()
  78.  
  79.     lazy var nameStack: UIStackView = {
  80.         let stack = UIStackView(arrangedSubviews: [artistName, artistUserName])
  81.         stack.axis = .vertical
  82.         stack.spacing = 6
  83.         stack.isUserInteractionEnabled = true
  84.         stack.alignment = .fill
  85.         stack.distribution = .fillEqually
  86.         return stack
  87.     }()
  88.     private lazy var artistName: UILabel = {
  89.         let label = UILabel()
  90.         label.isUserInteractionEnabled = true
  91.         label.font = .fontBold14
  92.         return label
  93.     }()
  94.     private lazy var artistUserName: UILabel = {
  95.         let label = UILabel()
  96.         label.isUserInteractionEnabled = true
  97.         label.font = .fontRegular14
  98.         return label
  99.     }()
  100. //    private lazy var priceLocationValueTextStack: UIStackView = {
  101. //        let stack = UIStackView(arrangedSubviews: [priceLocationTextStack, priceLocationValueStack])
  102. //        stack.axis = .horizontal
  103. //        stack.isUserInteractionEnabled = true
  104. //        stack.alignment = .leading
  105. //        stack.distribution = .fillEqually
  106. //        return stack
  107. //    }()
  108.     private lazy var priceTextAndValueStack: UIStackView = {
  109.         let stack = UIStackView(arrangedSubviews: [priceText, priceValue])
  110.         stack.axis = .vertical
  111.         stack.isUserInteractionEnabled = true
  112.         stack.spacing = 6
  113.         stack.alignment = .fill
  114.         stack.distribution = .fillEqually
  115.         return stack
  116.     }()
  117.     private lazy var locationTextAndValueStack: UIStackView = {
  118.         let stack = UIStackView(arrangedSubviews: [locationText, locationValue])
  119.         stack.axis = .vertical
  120.         locationText.snp.makeConstraints { make in
  121.             make.height.equalTo(10)
  122.         }
  123.         locationValue.snp.makeConstraints { make in
  124.             make.left.equalTo(-2)
  125.         }
  126.         stack.isUserInteractionEnabled = true
  127.         stack.spacing = 6
  128.         stack.alignment = .fill
  129.         stack.distribution = .fill
  130.         return stack
  131.     }()
  132.     private lazy var priceText: UILabel = {
  133.         let label = UILabel()
  134.         label.isUserInteractionEnabled = true
  135.         label.text = "artist_home_price".myLocalizedString
  136.         label.font = .fontRegular14
  137.         return label
  138.     }()
  139.     private lazy var priceValue: UILabel = {
  140.         let label = UILabel()
  141.         label.isUserInteractionEnabled = true
  142.         label.font = .fontBold14
  143.         return label
  144.     }()
  145.     private lazy var locationText: UILabel = {
  146.         let label = UILabel()
  147.         label.isUserInteractionEnabled = true
  148.         label.text = "artist_home_location".myLocalizedString
  149.         label.font = .fontRegular14
  150.         return label
  151.     }()
  152.     private lazy var locationValue: UITextView = {
  153.         let label = UITextView()
  154.         label.isUserInteractionEnabled = false
  155.         label.isEditable = false
  156.         label.setPadding(top: .zero, left: .zero, bottom: .zero, right: .zero)
  157.         label.backgroundColor = .clear
  158.         label.textAlignment = .left
  159.         label.font = .fontBold14
  160.         return label
  161.     }()
  162.     private lazy var reatingStarImageView: UIImageView = {
  163.         let imageView = UIImageView()
  164.         imageView.image = .saveStarFill
  165.         imageView.isUserInteractionEnabled = true
  166.         imageView.tintColor = .yellow
  167.         return imageView
  168.     }()
  169.     lazy var cellNextButton: UIButton = {
  170.         let button = UIButton()
  171.         button.isUserInteractionEnabled = true
  172.         button.setImage(.arrowRight, for: .normal)
  173.         button.tintColor = .white
  174.         button.backgroundColor = .colorWhiteAlpha3
  175.         button.corner(cornerRadius: 6.0)
  176.         button.addTarget(self, action: #selector(nextButtonTapped), for: .touchUpInside)
  177.         return button
  178.     }()
  179.  
  180.     var starButtonHandler: ((_ index: Int) -> Void)?
  181.     var cellNextButtonHandler: (() -> Void)?
  182.  
  183.     override func awakeFromNib() {
  184.         super.awakeFromNib()
  185.         // Initialization code
  186.     }
  187.  
  188.     override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
  189.         super.init(style: style, reuseIdentifier: reuseIdentifier)
  190.         setupUi()
  191.     }
  192.  
  193.     required init?(coder: NSCoder) {
  194.         fatalError("init(coder:) has not been implemented")
  195.     }
  196.  
  197.     override func setSelected(_ selected: Bool, animated: Bool) {
  198.         super.setSelected(selected, animated: animated)
  199.         // Configure the view for the selected state
  200.     }
  201.  
  202.     func setupCell(data: HomeArtistModal, index: Int) {
  203.         self.cellTypeNameLabel.text = data.userType
  204.         self.bgImageView.image = .artistBgImage // download image with SD Web Image
  205.         let fullName = data.showLastName ?? true ? "\(data.firstName  ?? K.emptyString) \(data.lastName ?? K.emptyString)" : data.firstName ?? K.emptyString
  206.         self.artistName.text = fullName
  207.         self.cellNextButton.accessibilityElement(id: AccessIdentifier.artistHomeTVCNextButton + "\(index)", label: AccessLabel.artistHomeTVCNextButton.replaceString(with: fullName))
  208.         self.bookmarkedImageView.image = data.isSaved ?? false ? UIImage.saveStarFill : UIImage.unSaveStar
  209.         self.setAccessibilityOfSaveButton(data: data, index: index)
  210.         self.bookmarkedImageView.tag = index
  211.         self.artistName.accessibilityElement(id: AccessIdentifier.artistHomeTVCName + "\(index)", label: AccessLabel.artistHomeTVCName.replaceString(with: fullName ))
  212.         self.artistUserName.text = data.userName
  213.         self.artistUserName.accessibilityElement(id: AccessIdentifier.artistHomeTVCUserName + "\(index)", label: AccessLabel.artistHomeTVCUserName.replaceString(with: data.userName ?? K.emptyString))
  214.         self.priceValue.text = "$\(data.price ?? .zero)"
  215.         self.priceValue.accessibilityElement(id: AccessIdentifier.artistHomeTVCPrice + "\(index)", label: AccessLabel.artistHomeTVCPrice.replaceString(with: "$\(data.price ?? .zero)"))
  216.         self.locationValue.text = "chandan rahul chandan rahul chandan rahul chandan rahul chandan rahul"
  217.         self.artistUserName.accessibilityElement(id: AccessIdentifier.artistHomeTVCLocation + "\(index)", label: AccessLabel.artistHomeTVCLocation.replaceString(with: data.primaryLocation?.address ?? K.emptyString))
  218.         let ratingStar = data.rating ?? 0.0
  219.         if ratingStar < 0.5 {
  220.             self.reatingsStack.isHidden = true
  221.         } else {
  222.             self.ratingsTextlabel.text = String(data.rating ?? .zero)
  223.             self.reatingsStack.isHidden = false
  224.         }
  225.         self.ratingsTextlabel.accessibilityElement(id: AccessIdentifier.artistHomeTVCReating + "\(index)", label: AccessLabel.artistHomeTVCReating.replaceString(with: data.rating ?? K.emptyString))
  226.     }
  227.  
  228.     @objc func nextButtonTapped(_ sender: UIButton) {
  229.         if let block = cellNextButtonHandler {
  230.             block()
  231.         }
  232.     }
  233.  
  234.     func setAccessibilityOfSaveButton(data: HomeArtistModal, index: Int) {
  235.         if !(data.isSaved ?? false) {
  236.             bookmarkedImageView.accessibilityElement(id: AccessIdentifier.artistHomeTVCSaveButton + "\(index)", label: AccessLabel.artistHomeTVCSaveButton.replaceString(with: data.userName ?? K.emptyString))
  237.         } else {
  238.             bookmarkedImageView.accessibilityElement(id: AccessIdentifier.artistHomeTVCUnSaveButton + "\(index)", label: AccessLabel.artistHomeTVCUnSaveButton.replaceString(with: data.userName ?? K.emptyString))
  239.         }
  240.     }
  241.  
  242.     @objc func saveStarButtonTapped(_ tapGestureRecognizer: UITapGestureRecognizer) {
  243.         guard let tappedImage = tapGestureRecognizer.view as? UIImageView else { return }
  244.         if let block = starButtonHandler {
  245.             block(tappedImage.tag)
  246.         }
  247.     }
  248.  
  249.     lazy var artistProfileImage: UIImageView = {
  250.         let imageView = UIImageView(isImageViewerEnable: true)
  251.         imageView.image = UIImage(named: "ratingDemoProfile")
  252.         imageView.corner(cornerRadius: 30)
  253.         imageView.accessibilityElement(id: AccessIdentifier.artistPersonalInfoProfileImage, label: AccessLabel.artistPersonalInfoProfileImage)
  254.         imageView.contentMode = .scaleAspectFill
  255.         return imageView
  256.     }()
  257.  
  258.     private func setupUi() {
  259.         self.contentView.isUserInteractionEnabled = true
  260.         self.contentView.backgroundColor = .primaryColor
  261.        
  262.         self.contentView.addSubview(mainBgView)
  263.         mainBgView.addSubview(bgImageView)
  264.         bgImageView.addSubview(artistProfileImage)
  265.         detailBgView.addSubview(cellTypeNameLabel)
  266.         detailBgView.addSubview(bookmarkedImageView)
  267.         bgImageView.addSubview(detailBgView)
  268.         bgImageView.addSubview(reatingsStack)
  269.         bgImageView.addSubview(nameStack)
  270.         detailBgView.addSubview(cellNextButton)
  271.         detailBgView.addSubview(priceTextAndValueStack)
  272.         detailBgView.addSubview(locationTextAndValueStack)
  273.  
  274.        
  275.         mainBgView.snp.makeConstraints { make in
  276.             make.top.equalTo(self.contentView.snp.top)
  277.             make.bottom.equalTo(self.contentView.snp.bottom)
  278.             make.left.equalTo(self.contentView.snp.left)
  279.             make.right.equalTo(self.contentView.snp.right)
  280.         }
  281.         artistProfileImage.snp.makeConstraints { make in
  282.             make.left.equalTo(bgImageView.left).offset(leftOffset)
  283.             make.top.equalTo(bgImageView.top).offset(10)
  284.             make.height.width.equalTo(60)
  285.         }
  286.         bgImageView.snp.makeConstraints { make in
  287.             make.top.bottom.left.right.equalTo(mainBgView)
  288.         }
  289.         bookmarkedImageView.snp.makeConstraints { make in
  290.             make.top.equalTo(bgImageView.snp.top).offset(14)
  291.             make.right.equalTo(bgImageView.snp.right).inset(7)
  292.             make.height.width.equalTo(24)
  293.         }
  294.         cellTypeNameLabel.snp.makeConstraints { make in
  295.             make.right.equalTo(bookmarkedImageView.left).inset(-12)
  296.             make.top.equalTo(bgImageView.snp.top).offset(10)
  297.             make.width.equalTo(78)
  298.             make.height.equalTo(28)
  299.         }
  300.         reatingsStack.snp.makeConstraints { make in
  301.             make.top.equalTo(artistProfileImage.bottom).offset(4)
  302.             make.centerX.equalTo(artistProfileImage)
  303.             make.width.equalTo(44)
  304.             make.height.equalTo(16)
  305.         }
  306.         nameStack.snp.makeConstraints { make in
  307.             make.top.equalTo(reatingsStack.bottom).offset(8)
  308.             make.left.equalTo(artistProfileImage.left)
  309.             make.width.equalTo(96)
  310.         }
  311.         detailBgView.snp.makeConstraints { make in
  312.             make.top.right.bottom.equalTo(bgImageView)
  313.             make.left.equalTo(artistProfileImage.right).offset(32)
  314.         }
  315.         cellNextButton.snp.makeConstraints { make in
  316.             make.height.width.equalTo(32)
  317.             make.right.equalTo(detailBgView.snp.right).inset(10)
  318.             make.centerY.equalTo(detailBgView)
  319.         }
  320.         priceTextAndValueStack.snp.makeConstraints { make in
  321.             make.top.equalTo(detailBgView.top).offset(44)
  322.             make.left.equalTo(detailBgView.left).offset(leftOffset)
  323.             make.height.equalTo(50)
  324.             make.width.equalTo(100)
  325.         }
  326.         locationTextAndValueStack.snp.makeConstraints { make in
  327.             make.top.equalTo(priceTextAndValueStack.bottom).offset(topOffset)
  328.             make.left.equalTo(detailBgView.left).offset(leftOffset)
  329.             make.right.equalTo(detailBgView.right).inset(24)
  330.             make.height.equalTo(52)
  331.         }
  332.     }
  333. }
  334.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement