Visual_Novel_iOS/crush/Crush/Src/Modules/Home/Match/MeetMatchedController.swift

418 lines
12 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// 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()
}
}