240 lines
8.5 KiB
Swift
240 lines
8.5 KiB
Swift
//
|
|
// NRStoreVipCell.swift
|
|
// ReaderHive
|
|
//
|
|
// Created by 澜声世纪 on 2025/12/10.
|
|
//
|
|
|
|
import UIKit
|
|
import SnapKit
|
|
import YYCategories
|
|
import YYText
|
|
internal import StoreKit
|
|
|
|
class NRStoreVipCell: UICollectionViewCell {
|
|
var model: NRPayItem? {
|
|
didSet {
|
|
titleLabel.text = model?.brief
|
|
// desLabel.text = model?.nr_description
|
|
desLabel.text = "reader_my_vip_tips".localized
|
|
|
|
if let coins = model?.send_coins, coins > 0 {
|
|
extraLabel.text = "+\(coins) \("reader_extra".localized)"
|
|
extraBgView.isHidden = false
|
|
} else {
|
|
extraBgView.isHidden = true
|
|
}
|
|
|
|
let currency = model?.currency ?? ""
|
|
let oldPrice = model?.price ?? ""
|
|
var offerPrice: String?
|
|
|
|
if model?.discount_type == 1, let offer = model?.introductionaryOffer {
|
|
offerPrice = offer.price.stringValue
|
|
} else if model?.discount_type == 2, let offer = model?.promotionalOffers?.first {
|
|
offerPrice = offer.price.stringValue
|
|
}
|
|
|
|
if let price = offerPrice {
|
|
let oldPriceStr = NSMutableAttributedString(string: oldPrice)
|
|
oldPriceStr.yy_strikethroughColor = oldPriceLabel.textColor
|
|
oldPriceStr.yy_strikethroughStyle = .double
|
|
oldPriceLabel.attributedText = oldPriceStr
|
|
|
|
oldPriceLabel.isHidden = false
|
|
priceLabel.text = currency + price
|
|
|
|
} else {
|
|
oldPriceLabel.isHidden = true
|
|
priceLabel.text = currency + oldPrice
|
|
}
|
|
|
|
extraBgView.colors = [UIColor.white.withAlphaComponent(0.75).cgColor, UIColor.white.withAlphaComponent(0.75).cgColor]
|
|
switch model?.vip_type_key {
|
|
case .week:
|
|
bgView.image = UIImage(named: "vip_bg_image_week")
|
|
bgIconView.image = UIImage(named: "vip_bg_icon_week")
|
|
vipIconImageView.image = UIImage(named: "vip_icon_week")
|
|
titleLabel.textColors = [UIColor._389_FEA.cgColor, UIColor._062_AAE.cgColor]
|
|
priceLabel.textColor = ._062_AAE
|
|
|
|
case .month:
|
|
bgView.image = UIImage(named: "vip_bg_image_month")
|
|
bgIconView.image = UIImage(named: "vip_bg_icon_month")
|
|
vipIconImageView.image = UIImage(named: "vip_icon_month")
|
|
titleLabel.textColors = [UIColor._162_FAC.cgColor, UIColor._661794.cgColor]
|
|
priceLabel.textColor = ._661794
|
|
|
|
case .quarter:
|
|
bgView.image = UIImage(named: "vip_bg_image_quarter")
|
|
bgIconView.image = UIImage(named: "vip_bg_icon_quarter")
|
|
vipIconImageView.image = UIImage(named: "vip_icon_quarter")
|
|
titleLabel.textColors = [UIColor.CE_1_E_79.cgColor, UIColor.B_92214.cgColor]
|
|
priceLabel.textColor = .B_92214
|
|
|
|
case .year:
|
|
bgView.image = UIImage(named: "vip_bg_image_year")
|
|
bgIconView.image = UIImage(named: "vip_bg_icon_year")
|
|
vipIconImageView.image = UIImage(named: "vip_icon_year")
|
|
titleLabel.textColors = [UIColor.BA_8_A_2_A.cgColor, UIColor._8_B_5801.cgColor]
|
|
priceLabel.textColor = ._8_B_5801
|
|
extraBgView.colors = [UIColor.FFF_2_C_8.cgColor, UIColor.D_8_B_8_A_1.cgColor]
|
|
|
|
default:
|
|
break
|
|
}
|
|
}
|
|
}
|
|
|
|
private lazy var bgView: UIImageView = {
|
|
let view = UIImageView()
|
|
view.layer.cornerRadius = 12
|
|
view.layer.masksToBounds = true
|
|
view.layer.borderColor = UIColor.black.withAlphaComponent(0.05).cgColor
|
|
view.layer.borderWidth = 1
|
|
return view
|
|
}()
|
|
|
|
private lazy var bgIconView: UIImageView = {
|
|
let view = UIImageView()
|
|
return view
|
|
}()
|
|
|
|
private lazy var vipIconImageView: UIImageView = {
|
|
let imageView = UIImageView()
|
|
return imageView
|
|
}()
|
|
|
|
private lazy var titleLabel: NRLabel = {
|
|
let label = NRLabel()
|
|
label.font = .font(ofSize: 14, weight: .medium)
|
|
label.textStartPoint = .init(x: 0, y: 0.5)
|
|
label.textEndPoint = .init(x: 1, y: 0.5)
|
|
return label
|
|
}()
|
|
|
|
private lazy var priceLabel: UILabel = {
|
|
let label = UILabel()
|
|
label.font = .font(ofSize: 20, weight: .bold).nr_withBoldItalic()
|
|
return label
|
|
}()
|
|
|
|
private lazy var oldPriceLabel: UILabel = {
|
|
let label = UILabel()
|
|
label.font = .font(ofSize: 13, weight: .medium)
|
|
label.textColor = .black.withAlphaComponent(0.03)
|
|
return label
|
|
}()
|
|
|
|
private lazy var desLabel: UILabel = {
|
|
let label = UILabel()
|
|
label.font = .font(ofSize: 12, weight: .regular)
|
|
label.textColor = .black.withAlphaComponent(0.5)
|
|
label.numberOfLines = 2
|
|
return label
|
|
}()
|
|
|
|
private lazy var extraBgView: NRGradientView = {
|
|
let view = NRGradientView()
|
|
view.startPoint = .init(x: 0, y: 0.5)
|
|
view.endPoint = .init(x: 1, y: 0.5)
|
|
// view.backgroundColor = .white.withAlphaComponent(0.75)
|
|
view.nr_setRoundedCorner(topLeft: 12, topRight: 0, bottomLeft: 0, bottomRight: 0)
|
|
return view
|
|
}()
|
|
|
|
private lazy var extraLabel: UILabel = {
|
|
let label = UILabel()
|
|
label.font = .font(ofSize: 14, weight: .medium).nr_withBoldItalic()
|
|
label.textColor = ._9_C_6_A_45
|
|
label.setContentHuggingPriority(.required, for: .horizontal)
|
|
label.setContentCompressionResistancePriority(.required, for: .horizontal)
|
|
return label
|
|
}()
|
|
|
|
private lazy var extraIconView: UIView = {
|
|
let view = UIImageView(image: UIImage(named: "coins_icon_04"))
|
|
view.setContentHuggingPriority(.required, for: .horizontal)
|
|
view.setContentCompressionResistancePriority(.required, for: .horizontal)
|
|
return view
|
|
}()
|
|
|
|
|
|
override init(frame: CGRect) {
|
|
super.init(frame: frame)
|
|
nr_setupUI()
|
|
}
|
|
|
|
required init?(coder: NSCoder) {
|
|
fatalError("init(coder:) has not been implemented")
|
|
}
|
|
}
|
|
|
|
extension NRStoreVipCell {
|
|
|
|
private func nr_setupUI() {
|
|
contentView.addSubview(bgView)
|
|
bgView.addSubview(bgIconView)
|
|
bgView.addSubview(vipIconImageView)
|
|
bgView.addSubview(titleLabel)
|
|
bgView.addSubview(priceLabel)
|
|
bgView.addSubview(oldPriceLabel)
|
|
bgView.addSubview(desLabel)
|
|
bgView.addSubview(extraBgView)
|
|
extraBgView.addSubview(extraLabel)
|
|
extraBgView.addSubview(extraIconView)
|
|
|
|
bgView.snp.makeConstraints { make in
|
|
make.edges.equalToSuperview()
|
|
}
|
|
|
|
bgIconView.snp.makeConstraints { make in
|
|
make.centerY.equalToSuperview()
|
|
make.right.equalToSuperview().offset(-12)
|
|
}
|
|
|
|
vipIconImageView.snp.makeConstraints { make in
|
|
make.left.equalToSuperview().offset(12)
|
|
make.top.equalToSuperview().offset(12)
|
|
}
|
|
|
|
titleLabel.snp.makeConstraints { make in
|
|
make.centerY.equalTo(vipIconImageView)
|
|
make.left.equalTo(vipIconImageView.snp.right).offset(4)
|
|
}
|
|
|
|
priceLabel.snp.makeConstraints { make in
|
|
make.left.equalTo(vipIconImageView)
|
|
make.centerY.equalToSuperview().offset(3)
|
|
}
|
|
|
|
oldPriceLabel.snp.makeConstraints { make in
|
|
make.bottom.equalTo(priceLabel).offset(-3)
|
|
make.left.equalTo(priceLabel.snp.right).offset(3)
|
|
}
|
|
|
|
desLabel.snp.makeConstraints { make in
|
|
make.left.equalTo(priceLabel)
|
|
make.right.lessThanOrEqualTo(extraBgView.snp.left).offset(-5)
|
|
make.centerY.equalTo(self.bgView.snp.bottom).offset(-18)
|
|
}
|
|
|
|
extraBgView.snp.makeConstraints { make in
|
|
make.right.bottom.equalToSuperview()
|
|
make.height.equalTo(24)
|
|
}
|
|
|
|
extraLabel.snp.makeConstraints { make in
|
|
make.centerY.equalToSuperview()
|
|
make.left.equalToSuperview().offset(12)
|
|
}
|
|
|
|
extraIconView.snp.makeConstraints { make in
|
|
make.centerY.equalToSuperview()
|
|
make.left.equalTo(extraLabel.snp.right).offset(4)
|
|
make.right.equalToSuperview().offset(-12)
|
|
}
|
|
}
|
|
|
|
}
|