123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229 |
- //
- // TSTTPInputVC.swift
- // AIEmoji
- //
- // Created by 100Years on 2025/3/11.
- //
- class TSTTPInputVC: TSBaseVC {
-
- var viewH:CGFloat{
- get {
- if cusStackView.viewH > 0{
- return cusStackView.viewH
- }
- return 605.0
- // return 489.0+136.0
- }
- }
-
- var reloadUIBlock:(()->Void)?
- lazy var viewModel: TSTTPInputVM = {
- let viewModel:TSTTPInputVM = TSTTPInputVM()
- viewModel.isCanGennerateBlock = { [weak self] enabled in
- guard let self = self else { return }
- creatBtnView.setBtnEnabled(isEnabled: enabled)
- }
- return viewModel
- }()
- //###################################### 导航栏 view ######################################
- lazy var vipBtn: UIButton = {
- let vipBtn = UIButton.createButton(image: UIImage(named: "nav_vip")) { [weak self] in
- guard let self = self else { return }
- TSPurchaseVC.show(target: self) {}
- }
- return vipBtn
- }()
-
- lazy var navBarView: TSBaseNavContentBarView = {
- let navBarView = TSBaseNavContentBarView()
-
- let titleImageView = UIImageView.createImageView(imageName: "nav_title_ttp",contentMode: .scaleToFill)
- navBarView.barView.addSubview(titleImageView)
- titleImageView.snp.makeConstraints { make in
- make.centerY.equalToSuperview()
- make.left.equalTo(16)
- }
-
- navBarView.barView.addSubview(vipBtn)
- vipBtn.snp.makeConstraints { make in
- make.centerY.equalToSuperview()
- make.trailing.equalTo(-16)//(-60)
- make.width.height.equalTo(24)
- }
-
- return navBarView
- }()
- //###################################### cusStackView ######################################
- lazy var cusStackView: TSCustomStackView = {
- let cusStackView = TSCustomStackView(axis: .vertical,spacing: 0)
- return cusStackView
- }()
-
- //###################################### 输入框 ######################################
- lazy var promptTextView: TSPromptTextView = {
- let promptTextView = TSPromptTextView(randomTextArray: kRandomTextArray) { [weak self] text in
- guard let self = self else { return }
- viewModel.promptText = text
- }
- promptTextView.sendBolck = { [weak self] text in
- guard let self = self else { return }
- if creatBtnView.isEnabled {
- generateImage()
- }
- }
- promptTextView.AIBolck = { [weak self] in
- guard let self = self else { return }
- let vc = TSChatViewController()
- vc.viewModel.uiStyle = .perfectHint
- // vc.inputText = promptTextView.text
-
- vc.textBlock = { [weak self] text ,bool in
- guard let self = self else { return }
- promptTextView.setText(text: text)
- viewModel.promptText = text
- if bool {
- kDelayMainShort {
- self.view.endEditing(true)
- }
- }
- }
- kPushVC(target: self, modelVC: vc)
- }
- return promptTextView
- }()
-
- //###################################### Prompt类型 ######################################
- lazy var promptStyleView: TSTTPStyleView = creatPromptStyleView()
-
- //###################################### 尺寸类型 ######################################
- lazy var ratioStyleView: TSTTPRatioView = {
- let ratioStyleView = TSTTPRatioView()
- ratioStyleView.selectRatio = viewModel.selectRatio //一定要放在dataArray设置前
- ratioStyleView.dataArray = viewModel.ttpRatioDataArray
- ratioStyleView.selectedValueBlock = { [weak self] model in
- guard let self = self else { return }
- viewModel.selectRatio = model
- updateVipView()
- }
- return ratioStyleView
- }()
- //###################################### collectionComponent ######################################
- var collectionViewObserver: CollectionViewObserver!
- let collectionViewBtootm:CGFloat = 80
- lazy var collectionComponent: TSCollectionViewComponent = creatCollectionComponent()
- var vipFreeNumType:VipFreeNumType = VipFreeNumType.textGeneratePic
- //###################################### Button ######################################
- lazy var creatBtnView:TSAppBtnView = {
- let creatBtnView = TSAppBtnView()
- creatBtnView.setUpButton(style: .generate, vipFreeNumType: vipFreeNumType) { [weak self] in
- guard let self = self else { return }
- generateImage()
- }
- creatBtnView.setBtnEnabled(isEnabled: false)
- creatBtnView.isIconVipBlock = { [weak self] in
- guard let self = self else { return false}
- var showVip = kPurchaseDefault.generateVipShow(type: vipFreeNumType)
- if showVip == false {
- showVip = self.viewModel.selectPromptModel.isVip
- }
- return showVip
- }
- creatBtnView.isClickVipBlock = { [weak self] in
- guard let self = self else { return false}
- var isVip = kPurchaseDefault.freeNumAvailable(type: vipFreeNumType) == false
- if viewModel.selectPromptModel.isVip == true {
- isVip = true
- }
- return isVip
- }
- return creatBtnView
- }()
-
- override func createView() {
- let tapGesture = UITapGestureRecognizer(target: self, action: #selector(clickView))
- tapGesture.cancelsTouchesInView = false
- view.addGestureRecognizer(tapGesture)
-
- navBarContentView.addSubview(navBarView)
- navBarView.snp.makeConstraints { make in
- make.edges.equalToSuperview()
- }
-
- contentView.addSubview(cusStackView)
- cusStackView.snp.makeConstraints { make in
- make.top.leading.bottom.trailing.equalTo(0)
- }
- cusStackView.addSubviewToStack(promptTextView)
- cusStackView.addSubviewToStack(promptStyleView)
- cusStackView.addSubviewToStack(ratioStyleView)
- cusStackView.addSubviewToStack(collectionComponent.collectionView, length: 0)
- cusStackView.addSpacing(length: collectionViewBtootm)
-
- contentView.addSubview(creatBtnView)
- creatBtnView.snp.makeConstraints { make in
- make.bottom.equalTo(-16)
- make.leading.equalTo(16)
- make.trailing.equalTo(-16)
- make.height.equalTo(48)
- }
- }
-
- override func dealThings() {
- updateVipView()
- NotificationCenter.default.addObserver(self, selector: #selector(vipInfoChanged), name: .kPurchaseDidChanged, object: nil)
- observerCollectionView()
- updateListDataView()
-
-
- // 同时 VC主动刷新UI界面
- NotificationCenter.default.addObserver(forName: .kTTPDataChanged, object: nil, queue: OperationQueue.main) { [weak self] _ in
- guard let self = self else { return }
- DispatchQueue.main.async {
- self.updateListDataView()
- }
- }
- }
-
- @objc func vipInfoChanged() {
- updateVipView()
- }
-
- @objc func clickView() {
- view.endEditing(true)
- }
- func updateVipView() {
- kExecuteOnMainThread {
- self.vipBtn.isHidden = PurchaseManager.default.isVip
- self.creatBtnView.updateVipView()
- }
- }
- }
- extension TSTTPInputVC {
- func generateImage() {
-
- var isVip = kPurchaseDefault.freeNumAvailable(type: .textGeneratePic) == false
- if viewModel.selectPromptModel.isVip == true {
- isVip = true
- }
-
- if kJudgeVip(externalBool: isVip, vc: self) { return } //判断 vip
- let gennerateVC = TSTextPicGennerateVC(generateStyleModel: viewModel.generateStyleModel) {[weak self] model in
- guard let self = self else { return }
- model.request.promptSort = viewModel.promptText
- viewModel.saveModel(model: model)
- updateVipView()
- reloadUIBlock?()
- updateListDataView()
- }
-
- kPresentModalVC(target: self, modelVC: gennerateVC,transitionStyle: .crossDissolve)
- }
- }
|