Visual_Novel_iOS/crush/Crush/Src/Modules/Friend/HeartBeatLevel/HeartBeatLevelGridControlle...

203 lines
6.6 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.

//
// HeartBeatLevelGridController.swift
// Crush
//
// Created by Leon on 2025/8/16.
//
import UIKit
class HeartBeatLevelGridController: CLViewController<HeartBeatLevelGridView> {
var aiId: Int = 0
var relation: AIUserHeartBeatRelation?
var heartBeatLevelAccessDicts: [HeartbeatLeveLDict] = [HeartbeatLeveLDict]()
lazy var popover = PopoverHideRalationView()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
setupViews()
setupDatas()
setupEvents()
}
private func setupViews() {
//navigationView.alpha0Title = "Crush Level"
navigationView.title = "Crush Level"
navigationView.bgView.alpha = 0
let queryButton = {
let v = EPIconGhostButton(radius: .none, iconSize: .medium, iconCode: .faq)
v.addTarget(self, action: #selector(queryAction), for: .touchUpInside)
navigationView.rightStackH.addArrangedSubview(v)
v.snp.makeConstraints { make in
make.size.equalTo(CGSize(width: 44, height: 44))
}
return v
}()
let moreButton = {
let v = EPIconGhostButton(radius: .none, iconSize: .medium, iconCode: .more)
v.addTarget(self, action: #selector(moreAction(sender:)), for: .touchUpInside)
navigationView.rightStackH.addArrangedSubview(v)
v.snp.makeConstraints { make in
make.size.equalTo(CGSize(width: 44, height: 44))
}
return v
}()
queryButton.isHidden = false
moreButton.isHidden = false
}
private func setupDatas() {
loadHeartBeatLevel()
}
private func loadHeartBeatLevel(){
Hud.showIndicator()
AIRoleProvider.request(.heartBeatLevelGet(aiId: aiId), modelType: HeartBeatLevelRelation.self) {[weak self] result in
Hud.hideIndicator()
switch result {
case .success(let model):
self?.heartBeatLevelAccessDicts = model?.heartbeatLeveLDictList ?? []
self?.relation = model?.aiUserHeartbeatRelation
self?.reloadViewDatas()
case .failure:
break
}
}
}
private func setupEvents() {
container.headView.retrieveButton.addTarget(self, action: #selector(tapRetrieveButton), for: .touchUpInside)
popover.controlSwitch.addTarget(self, action: #selector(tapPopoverControlSwitch), for: .valueChanged)
NotificationCenter.default.addObserver(self, selector: #selector(notifiyRelationInfoUpdate), name: AppNotificationName.aiRoleRelationInfoUpdated.notificationName, object: nil)
}
@objc func notifiyRelationInfoUpdate(){
loadHeartBeatLevel()
}
// MARK: Functions
private func reloadViewDatas(){
container.headView.config(relation)
container.config(heartBeatLevelAccessDicts)
popover.controlSwitch.isOn = !(relation?.isShow ?? false)
//..
}
// MARK: Action
@objc private func queryAction() {
let content = "*通过聊天或送礼增加心动值24小时不联系心动值会自动扣减\n\n*心动值会提升心动等级,通过升级解锁称号,功能,以及不同的角色对话阶段\n\n *虚拟角色会根据对话的情绪感受,酌情判断增加或者减少心动值"
let alert = Alert(title: "Tips", text: content)
let action1 = AlertAction(title: "Got it", actionStyle: .confirm)
alert.addAction(action1)
alert.show()
}
@objc private func moreAction(sender: UIButton) {
let popover = p_createPopoverView()
popover.present(fromView: sender)
}
@objc private func tapRetrieveButton(){
let sheet = RetrieveHeartbeatSheet()
sheet.aiId = aiId
sheet.config(self.relation)
sheet.show()
}
@objc private func tapPopoverControlSwitch(sender: UISwitch) {
let onOfSwitch = !sender.isOn
//dlog("on\(onOfSwitch)")
Hud.showIndicator()
AIRoleProvider.request(.heartBeatRelationSwitch(aiId: aiId, isShow: onOfSwitch), modelType: EmptyModel.self) {[weak self] result in
Hud.hideIndicator()
switch result {
case .success:
self?.loadHeartBeatLevel() // Refresh
NotificationCenter.post(name: .heartbeatRelationHiddenUpdate)
case .failure:
sender.isOn = !onOfSwitch
break
}
}
}
private func p_createPopoverView() -> FSPopoverView {
let popoverView = FSPopoverView()
popoverView.dataSource = self
popoverView.showsArrow = false
popoverView.showsDimBackground = false
return popoverView
}
}
extension HeartBeatLevelGridController: FSPopoverViewDataSource {
func contentView(for popoverView: FSPopoverView) -> UIView? {
return popover
}
func contentSize(for popoverView: FSPopoverView) -> CGSize {
// return CGSize(width: 100, height: 60)
let calSize = popover.label.sizeThatFits(CGSize(width: CGFLOAT_MAX, height: 20))
let size = CGSize(width: calSize.width + 16 + 84, height: 60)
dlog("hoee \(size)")
return size
}
func containerSafeAreaInsets(for popoverView: FSPopoverView) -> UIEdgeInsets {
var insets = view.safeAreaInsets
insets.left = 10.0
insets.right = 10.0
return insets
}
}
class PopoverHideRalationView: UIView {
var controlSwitch: UISwitch!
var label: UILabel!
override init(frame: CGRect) {
super.init(frame: frame)
setupViews()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
private func setupViews() {
snp.makeConstraints { make in
make.height.equalTo(60)
}
controlSwitch = {
let v = UISwitch()
addSubview(v)
v.snp.makeConstraints { make in
make.trailing.equalToSuperview().offset(-16)
make.centerY.equalToSuperview()
}
return v
}()
label = {
let v = UILabel()
v.font = .t.tll
v.textColor = .text
addSubview(v)
v.snp.makeConstraints { make in
make.centerY.equalToSuperview()
make.leading.equalToSuperview().offset(16)
make.trailing.equalTo(controlSwitch.snp.leading).offset(-16)
}
return v
}()
label.text = "Hide Relations"
}
}