123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- //
- // TSPromptTextView.swift
- // AIEmoji
- //
- // Created by 100Years on 2025/3/11.
- //
- class TSPromptTextView: TSBaseView {
- var randomTextArray: [String]
- var textChangedBlock: (String) -> Void
- var sendBolck: ((String) -> Void)?
- var AIBolck: (() -> Void)?
- init(randomTextArray: [String], textChangedBlock: @escaping (String) -> Void) {
- self.randomTextArray = randomTextArray
- self.textChangedBlock = textChangedBlock
- super.init(frame: .zero)
- }
- @MainActor required init?(coder: NSCoder) {
- fatalError("init(coder:) has not been implemented")
- }
- lazy var robotImageView: UIImageView = {
- let robotImageView = UIImageView.createImageView(imageName: "aichat_avatar")
- return robotImageView
- }()
- lazy var randomTextPicker: TSRandomTextPicker = {
- let textPicker = TSRandomTextPicker(texts: randomTextArray)
- return textPicker
- }()
- lazy var textBgView: UIView = {
- let textBgView = UIView()
- textBgView.backgroundColor = "#292929".uiColor
- textBgView.cornerRadius = 12
- return textBgView
- }()
- lazy var customTextView: TSPlaceholderTextView = {
- let customTextView = TSPlaceholderTextView(
- placeholder: "Type your idea here.".localized,
- text: "",
- font: .font(size: 14),
- textColor: .white,
- backgroundColor: .clear
- )
- customTextView.delegate = self
- customTextView.returnKeyType = .done
- return customTextView
- }()
- lazy var inspirationBtn: UIButton = {
- let inspirationBtn = UIButton.createButton(
- // title: "Hint Inspiration".localized,
- image: UIImage(named: "inspiration_yellow"),
- backgroundColor: "#FECB34".uiColor.withAlphaComponent(0.1),
- font: .font(size: 12),
- titleColor: .themeColor,
- corner: 8.0) { [weak self] in
- guard let self = self else { return }
- customTextView.text = randomTextPicker.getRandomText()
- textViewDidChange(customTextView)
- }
- inspirationBtn.contentEdgeInsets = UIEdgeInsets(top: 4, left: 7, bottom: 4, right: 7)
- // inspirationBtn.imageEdgeInsets = UIEdgeInsets(top: 0, left: -4, bottom: 0, right: 0)
- inspirationBtn.isHidden = false
- return inspirationBtn
- }()
- lazy var AIView: UIView = {
- let AIView = UIView()
- AIView.backgroundColor = "#4D6BFE".uiColor.withAlphaComponent(0.1)
- AIView.cornerRadius = 8
- AIView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(clickAIView)))
- let iconImageView = UIImageView.createImageView(imageName: "deepseek_icon")
- let aiInfoLabel = UILabel.createLabel(text: "Prompt Optimization".localized, font: .font(size: 14), textColor: "#4D6BFE".uiColor, textAlignment: .left, numberOfLines: 1)
- let arrowImageView = UIImageView.createImageView(imageName: "blue_down_arrow")
- AIView.addSubview(iconImageView)
- iconImageView.snp.makeConstraints { make in
- make.leading.equalTo(8)
- make.centerY.equalToSuperview()
- make.width.height.equalTo(20)
- }
- AIView.addSubview(aiInfoLabel)
- aiInfoLabel.snp.makeConstraints { make in
- make.leading.equalTo(iconImageView.snp.trailing).offset(4)
- make.centerY.equalToSuperview()
- }
- AIView.addSubview(arrowImageView)
- arrowImageView.snp.makeConstraints { make in
- make.leading.equalTo(aiInfoLabel.snp.trailing).offset(4)
- make.trailing.equalTo(-8)
- make.centerY.equalToSuperview()
- make.width.height.equalTo(16)
- }
- return AIView
- }()
- lazy var clearBtn: UIButton = {
- let clearBtn = UIButton.createButton(
- image: UIImage(named: "clear_text")
- ) { [weak self] in
- guard let self = self else { return }
- customTextView.text = ""
- textViewDidChange(customTextView)
- }
- clearBtn.isHidden = true
- return clearBtn
- }()
- override func creatUI() {
- contentView.addSubview(textBgView)
- textBgView.addSubview(customTextView)
- textBgView.addSubview(inspirationBtn)
- textBgView.addSubview(AIView)
- textBgView.addSubview(clearBtn)
-
- makeConstraints()
- }
- func makeConstraints() {
- textBgView.snp.makeConstraints { make in
- make.top.equalTo(16)
- make.leading.equalTo(16)
- make.trailing.equalTo(-16)
- make.height.equalTo(182.0)
- make.bottom.equalTo(0)
- }
- customTextView.snp.makeConstraints { make in
- make.top.equalTo(21)
- make.leading.equalTo(16)
- make.trailing.equalTo(-16)
- make.bottom.equalTo(-52)
- }
- inspirationBtn.snp.makeConstraints { make in
- make.height.equalTo(28)
- make.bottom.equalTo(-16)
- make.leading.equalTo(16)
- }
- AIView.snp.makeConstraints { make in
- make.height.equalTo(28)
- make.bottom.equalTo(-16)
- make.leading.equalTo(inspirationBtn.snp.trailing).offset(8)
- }
- clearBtn.snp.makeConstraints { make in
- make.width.height.equalTo(16)
- make.bottom.equalTo(-16)
- make.trailing.equalTo(-16)
- }
- }
- func getVipText() -> String {
- return "Generate".localized
- }
- }
- extension TSPromptTextView: UITextViewDelegate {
- func textViewDidChange(_ textView: UITextView) {
- let text = textView.text.replacingOccurrences(of: " ", with: "")
- clearBtn.isHidden = text.count > 0 ? false : true
- textChangedBlock(textView.text)
- }
- func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
- if text == "\n" {
- sendBolck?(textView.text)
- return false
- }
- return true
- }
- }
- extension TSPromptTextView {
- func setText(text: String) {
- customTextView.text = text
- textViewDidChange(customTextView)
- }
- var text: String {
- return customTextView.text
- }
- @objc func clickAIView() {
- AIBolck?()
- }
- }
|