418 lines
12 KiB
Swift
418 lines
12 KiB
Swift
//
|
||
// MeetMatchedController.swift
|
||
// Crush
|
||
//
|
||
// Created by Leon on 2025/9/10.
|
||
//
|
||
|
||
import UIKit
|
||
|
||
class MeetMatchedController: CLBaseViewController {
|
||
var bgImageView: CLImageView!
|
||
var effectView: UIVisualEffectView!
|
||
|
||
var titleWordsContainer: UIView!
|
||
var nameAndAgeLabel: CLLabel!
|
||
var likeAndCountLabel: CLIconLabel!
|
||
|
||
var bottomButtonsStackV: UIStackView!
|
||
var chatButton: StyleButton!
|
||
var cancelButton: StyleButton!
|
||
|
||
// -- 中间部分
|
||
var middleContainer: UIView!
|
||
var middleStackV: UIStackView!
|
||
// - Avatar
|
||
var avatarsContainer: UIView!
|
||
var avatarsStackH: UIStackView!
|
||
var leftAvatar: CLImageView!
|
||
var rightAvatar: CLImageView!
|
||
var heartIcon: UIImageView!
|
||
// - Gift (可选)
|
||
var giftIcon: UIImageView!
|
||
// 赠送的礼物数量(可选
|
||
var giftCountBadge: BadgeView!
|
||
// - Matched
|
||
var matchedContainer: UIView!
|
||
var matchedLabel: ColorLabel!
|
||
// - Desc
|
||
var descLabel: CLLabel!
|
||
|
||
// - Data
|
||
var card: MeetCard?
|
||
var info: MeetMatchInfo?
|
||
|
||
// 可选
|
||
var gift: GiftDictModel?
|
||
// 礼物数量
|
||
var giftCount: Int = 0
|
||
|
||
|
||
override func viewDidLoad() {
|
||
super.viewDidLoad()
|
||
|
||
// Do any additional setup after loading the view.
|
||
|
||
setupViews()
|
||
setupDatas()
|
||
setupEvents()
|
||
}
|
||
|
||
private func setupViews() {
|
||
navigationView.backButton.isHidden = true
|
||
navigationView.bgView.alpha = 0
|
||
|
||
bgImageView = {
|
||
let v = CLImageView()
|
||
view.addSubview(v)
|
||
v.snp.makeConstraints { make in
|
||
make.edges.equalToSuperview()
|
||
}
|
||
return v
|
||
}()
|
||
|
||
effectView = {
|
||
let v = UIVisualEffectView(effect: UIBlurEffect(style: .dark))
|
||
v.alpha = 1
|
||
view.addSubview(v)
|
||
v.snp.makeConstraints { make in
|
||
make.edges.equalToSuperview()
|
||
}
|
||
return v
|
||
}()
|
||
|
||
titleWordsContainer = {
|
||
let v = UIView()
|
||
view.addSubview(v)
|
||
v.snp.makeConstraints { make in
|
||
make.leading.trailing.equalToSuperview()
|
||
make.top.equalTo(navigationView.snp.bottom)
|
||
make.height.equalTo(60)
|
||
}
|
||
return v
|
||
}()
|
||
|
||
nameAndAgeLabel = {
|
||
let v = CLLabel()
|
||
v.font = .t.ttm
|
||
v.textAlignment = .center
|
||
titleWordsContainer.addSubview(v)
|
||
v.snp.makeConstraints { make in
|
||
make.leading.equalToSuperview().offset(16)
|
||
make.trailing.equalToSuperview().offset(-16)
|
||
make.top.equalToSuperview()
|
||
}
|
||
return v
|
||
}()
|
||
|
||
likeAndCountLabel = {
|
||
let v = CLIconLabel()
|
||
v.iconSize = CGSize(width: 20, height: 20)
|
||
v.iconImageView.image = MWIconFont.image(fromIcon: .like, size: CGSize(width: 20, height: 20), color: .white)
|
||
v.contentLabel.font = .t.tnds
|
||
v.contentLabel.text = "-"
|
||
titleWordsContainer.addSubview(v)
|
||
v.snp.makeConstraints { make in
|
||
make.bottom.equalToSuperview()
|
||
make.centerX.equalToSuperview()
|
||
}
|
||
return v
|
||
}()
|
||
|
||
bottomButtonsStackV = {
|
||
let v = UIStackView()
|
||
v.axis = .vertical
|
||
v.spacing = 24
|
||
view.addSubview(v)
|
||
v.snp.makeConstraints { make in
|
||
make.leading.equalToSuperview().offset(48)
|
||
make.trailing.equalToSuperview().offset(-48)
|
||
make.bottom.equalToSuperview().offset(-16 - UIWindow.safeAreaBottom * 0.5)
|
||
}
|
||
return v
|
||
}()
|
||
|
||
chatButton = {
|
||
let v = StyleButton()
|
||
v.primary(size: .large)
|
||
v.addTarget(self, action: #selector(chatButtonAction), for: .touchUpInside)
|
||
bottomButtonsStackV.addArrangedSubview(v)
|
||
return v
|
||
}()
|
||
|
||
cancelButton = {
|
||
let v = StyleButton()
|
||
v.tertiary(size: .large)
|
||
v.addTarget(self, action: #selector(cancelButtonAction), for: .touchUpInside)
|
||
bottomButtonsStackV.addArrangedSubview(v)
|
||
return v
|
||
}()
|
||
|
||
middleContainer = {
|
||
let v = UIView()
|
||
view.addSubview(v)
|
||
v.snp.makeConstraints { make in
|
||
make.leading.trailing.equalToSuperview()
|
||
make.top.equalTo(titleWordsContainer.snp.bottom)
|
||
make.bottom.equalTo(bottomButtonsStackV.snp.top).offset(0)
|
||
}
|
||
return v
|
||
}()
|
||
|
||
middleStackV = {
|
||
let v = UIStackView()
|
||
v.axis = .vertical
|
||
v.alignment = .center
|
||
middleContainer.addSubview(v)
|
||
v.snp.makeConstraints { make in
|
||
//make.centerX.equalToSuperview()
|
||
make.leading.equalToSuperview().offset(48)
|
||
make.trailing.equalToSuperview().offset(-48)
|
||
make.centerY.equalToSuperview()
|
||
}
|
||
return v
|
||
}()
|
||
|
||
avatarsContainer = {
|
||
let v = UIView()
|
||
middleStackV.addArrangedSubview(v)
|
||
// v.snp.makeConstraints { make in
|
||
// make.height.equalTo(128)
|
||
// }
|
||
return v
|
||
}()
|
||
|
||
avatarsStackH = {
|
||
let v = UIStackView()
|
||
v.axis = .horizontal
|
||
v.spacing = 16
|
||
avatarsContainer.addSubview(v)
|
||
v.snp.makeConstraints { make in
|
||
make.edges.equalToSuperview()
|
||
make.height.equalTo(128)
|
||
}
|
||
return v
|
||
}()
|
||
|
||
leftAvatar = {
|
||
let v = CLImageView()
|
||
v.cornerRadius = 64
|
||
avatarsStackH.addArrangedSubview(v)
|
||
v.snp.makeConstraints { make in
|
||
make.width.equalTo(128)
|
||
make.height.equalTo(128)
|
||
}
|
||
return v
|
||
}()
|
||
|
||
rightAvatar = {
|
||
let v = CLImageView()
|
||
v.cornerRadius = 64
|
||
avatarsStackH.addArrangedSubview(v)
|
||
v.snp.makeConstraints { make in
|
||
make.width.equalTo(128)
|
||
make.height.equalTo(128)
|
||
}
|
||
return v
|
||
}()
|
||
|
||
heartIcon = {
|
||
let v = UIImageView()
|
||
v.image = UIImage(named: "chat_level_heart")
|
||
avatarsContainer.addSubview(v)
|
||
v.snp.makeConstraints { make in
|
||
// make.centerX.equalToSuperview()
|
||
make.center.equalToSuperview()
|
||
make.size.equalTo(CGSize(width:60, height: 60))
|
||
}
|
||
return v
|
||
}()
|
||
|
||
giftIcon = {
|
||
let v = UIImageView()
|
||
v.image = UIImage(named: "chat_level_gift")
|
||
middleStackV.addArrangedSubview(v)
|
||
v.snp.makeConstraints { make in
|
||
make.size.equalTo(CGSize(width:72, height: 72))
|
||
}
|
||
return v
|
||
}()
|
||
|
||
giftCountBadge = {
|
||
let v = BadgeView()
|
||
giftIcon.addSubview(v)
|
||
v.snp.makeConstraints { make in
|
||
make.trailing.equalToSuperview()
|
||
make.top.equalToSuperview().offset(4)
|
||
}
|
||
return v
|
||
}()
|
||
|
||
matchedContainer = {
|
||
let v = UIView()
|
||
middleStackV.addArrangedSubview(v)
|
||
return v
|
||
}()
|
||
|
||
matchedLabel = {
|
||
let v = ColorLabel()
|
||
v.applyGradient(.theme)
|
||
v.font = .t.tdxl
|
||
v.textColor = .white
|
||
matchedContainer.addSubview(v)
|
||
v.snp.makeConstraints { make in
|
||
make.leading.trailing.equalToSuperview()
|
||
make.top.equalToSuperview().offset(24)
|
||
make.bottom.equalToSuperview()
|
||
}
|
||
return v
|
||
}()
|
||
|
||
descLabel = {
|
||
let v = CLLabel()
|
||
v.font = .t.tbm
|
||
v.textAlignment = .center
|
||
v.textColor = .white
|
||
v.numberOfLines = 2
|
||
middleStackV.addArrangedSubview(v)
|
||
return v
|
||
}()
|
||
|
||
// view.backgroundColor = .clear
|
||
|
||
chatButton.setTitle("Chat", for: .normal)
|
||
cancelButton.setTitle("Cancel", for: .normal)
|
||
matchedLabel.text = "Matched"
|
||
|
||
// #warning("test")
|
||
// testData()
|
||
}
|
||
|
||
private func testData(){
|
||
nameAndAgeLabel.text = "Angelique, 28"
|
||
giftCountBadge.badgeValue = 99
|
||
descLabel.text = "Thank you for your 99 gift names"
|
||
likeAndCountLabel.contentLabel.text = "1.2k"
|
||
}
|
||
|
||
private func setupDatas() {
|
||
|
||
rightAvatar.loadImage(UserCore.shared.user?.headImage)
|
||
|
||
// 配置数据
|
||
configCardData()
|
||
configGiftData()
|
||
}
|
||
|
||
private func setupEvents() {
|
||
}
|
||
|
||
// MARK: - Data Configuration
|
||
|
||
/// 配置卡片数据
|
||
private func configCardData() {
|
||
|
||
if let data = self.card {
|
||
// 配置姓名和年龄
|
||
if let nickname = data.nickname, let age = data.age {
|
||
nameAndAgeLabel.text = "\(nickname), \(age)"
|
||
|
||
} else if let nickname = data.nickname {
|
||
nameAndAgeLabel.text = nickname
|
||
}
|
||
|
||
descLabel.text = "You and \(data.nickname ?? "-") are moved by each other"
|
||
|
||
// 配置点赞数
|
||
if let likedCount = data.likedCount {
|
||
let displayCount = String.displayNumber(NSNumber(value: likedCount), scale: 1)
|
||
likeAndCountLabel.contentLabel.text = displayCount
|
||
}
|
||
|
||
bgImageView.loadImage(data.imageUrl)
|
||
leftAvatar.loadImage(data.headImg)
|
||
}
|
||
else if let data = info{
|
||
if let nickname = data.nickname, let birthday = data.birthday {
|
||
let date = Date.dateFromMilliseconds(Int64(birthday))
|
||
let ageYears = Date().years(from: date)
|
||
nameAndAgeLabel.text = "\(nickname), \(ageYears)"
|
||
|
||
} else if let nickname = data.nickname {
|
||
nameAndAgeLabel.text = nickname
|
||
}
|
||
|
||
descLabel.text = "You and \(data.nickname ?? "-") are moved by each other"
|
||
|
||
// 配置点赞数
|
||
if let likedCount = data.likedCount {
|
||
let displayCount = String.displayNumber(NSNumber(value: likedCount), scale: 1)
|
||
likeAndCountLabel.contentLabel.text = displayCount
|
||
}
|
||
|
||
bgImageView.loadImage(data.homeImageUrl)
|
||
leftAvatar.loadImage(data.headImg)
|
||
}
|
||
}
|
||
|
||
/// 配置礼物数据
|
||
private func configGiftData() {
|
||
guard let gift = gift else {
|
||
// 如果没有礼物,隐藏礼物相关UI
|
||
giftIcon.isHidden = true
|
||
giftCountBadge.isHidden = true
|
||
return
|
||
}
|
||
|
||
// 显示礼物图标
|
||
giftIcon.isHidden = false
|
||
giftIcon.loadImage(gift.icon, bgColor: .clear)
|
||
|
||
// 配置礼物数量徽章
|
||
if giftCount > 0 {
|
||
giftCountBadge.isHidden = false
|
||
giftCountBadge.badgeValue = giftCount
|
||
} else {
|
||
giftCountBadge.isHidden = true
|
||
}
|
||
|
||
// 更新描述文本,包含礼物信息
|
||
if let giftName = gift.name, giftCount > 0 {
|
||
let giftText = "Thank you for your \(giftCount) \(giftName)"
|
||
descLabel.text = giftText
|
||
}else if let giftName = gift.name{
|
||
let giftText = "Thank you for your \(giftName)"
|
||
descLabel.text = giftText
|
||
}
|
||
}
|
||
|
||
/// 公共方法:配置页面数据
|
||
func configData(card: MeetCard?, gift: GiftDictModel?, giftCount: Int = 0) {
|
||
self.card = card
|
||
self.gift = gift
|
||
self.giftCount = giftCount
|
||
|
||
// 重新配置数据
|
||
configCardData()
|
||
configGiftData()
|
||
}
|
||
|
||
// MARK: - Action
|
||
|
||
@objc func chatButtonAction() {
|
||
guard let aiId = card?.aiId else{
|
||
dismiss(animated: false)
|
||
return
|
||
}
|
||
self.dismiss(animated: true) {
|
||
AppRouter.goChatVC(aiId: aiId)
|
||
}
|
||
}
|
||
|
||
@objc func cancelButtonAction() {
|
||
// self.removeFromParent()
|
||
// self.view.removeFromSuperview()
|
||
close()
|
||
}
|
||
}
|