改了文本翻译UI
authorliangzhenying <867174124@qq.com>
Sat, 13 Sep 2025 03:26:16 +0000 (11:26 +0800)
committerliangzhenying <867174124@qq.com>
Sat, 13 Sep 2025 03:26:16 +0000 (11:26 +0800)
12 files changed:
ShenYin/ShenYin/AppLaunch.swift
ShenYin/ShenYin/Assets.xcassets/home/copy_icon.imageset/Contents.json [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/home/copy_icon.imageset/复制_1@2x.png [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/home/copy_icon.imageset/复制_1@3x.png [new file with mode: 0644]
ShenYin/ShenYin/JoySdkManager.swift
ShenYin/ShenYin/SceneDelegate.swift
ShenYin/ShenYin/UI/Home/Chat/ChatRecordBar.swift
ShenYin/ShenYin/UI/Home/Chat/ChatVC.swift
ShenYin/ShenYin/UI/Home/textTranslateVC/TextTranslateVC.swift
ShenYin/ShenYin/UI/Home/textTranslateVC/TranslateCell.swift
ShenYin/ShenYin/UI/Mine/Login/Controller/RegisterVC.swift
ShenYin/ShenYin/UI/common/SendToolBar.swift

index eb00957..d021252 100644 (file)
@@ -20,7 +20,7 @@ class AppLaunch:NSObject{
         if #available(iOS 15.0, *) {
             UITableView.appearance().sectionHeaderTopPadding = 0
         }
-        IQKeyboardManager.shared.enableAutoToolbar = true
+        IQKeyboardManager.shared.enableAutoToolbar = false
         IQKeyboardManager.shared.isEnabled = true
         IQKeyboardManager.shared.resignOnTouchOutside = true
     }
diff --git a/ShenYin/ShenYin/Assets.xcassets/home/copy_icon.imageset/Contents.json b/ShenYin/ShenYin/Assets.xcassets/home/copy_icon.imageset/Contents.json
new file mode 100644 (file)
index 0000000..617c769
--- /dev/null
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "复制_1@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "复制_1@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/ShenYin/ShenYin/Assets.xcassets/home/copy_icon.imageset/复制_1@2x.png b/ShenYin/ShenYin/Assets.xcassets/home/copy_icon.imageset/复制_1@2x.png
new file mode 100644 (file)
index 0000000..84d7017
Binary files /dev/null and "b/ShenYin/ShenYin/Assets.xcassets/home/copy_icon.imageset/\345\244\215\345\210\266_1@2x.png" differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/home/copy_icon.imageset/复制_1@3x.png b/ShenYin/ShenYin/Assets.xcassets/home/copy_icon.imageset/复制_1@3x.png
new file mode 100644 (file)
index 0000000..7b06553
Binary files /dev/null and "b/ShenYin/ShenYin/Assets.xcassets/home/copy_icon.imageset/\345\244\215\345\210\266_1@3x.png" differ
index 019f7a4..ff76bd3 100644 (file)
@@ -16,7 +16,7 @@ class JoySdkManager:NSObject{
         //MARK: 初始化SDK
         JoyGemAIManager.shared().initSdk()
         //MARK: 配置日志类型
-        JoyGemAIManager.shared().setLogMode(JoyGemLogMode.all)
+        JoyGemAIManager.shared().setLogMode(JoyGemLogMode.close)
         
         
         let fileManager = FileManager.default
index c891392..593c36c 100644 (file)
@@ -20,7 +20,7 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate {
         
         App.shared.window = window
         window?.rootViewController = BaseTC()
-        window?.rootViewController = UINavigationController(rootViewController: BleScanVC())
+//        window?.rootViewController = UINavigationController(rootViewController: TextTranlateVC())
         AppLaunch.start()
     }
 
index 353e36e..2afde8a 100644 (file)
 }
 
 class ChatRecordBar:BaseView{
-    var recordBtn = UIButton(type: .custom)
+    private var recordBtn = UIButton(type: .custom)
     weak var delegate:ChatRecordBarDelegate?
     
+    var isRecord:Bool = false{
+        didSet{
+            recordBtn.isSelected = isRecord
+        }
+    }
+    
     override func setupViews() {
         recordBtn.backgroundColor = .blue
         recordBtn.setTitle("开始录音", for: .normal)
index bd3982b..93d5cf2 100644 (file)
@@ -90,7 +90,7 @@ class ChatVC:BaseVC{
     }
     override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
         if (keyPath == "isActive") {
-            var isOpen = change?[NSKeyValueChangeKey.newKey] as? Bool
+            let isOpen = change?[NSKeyValueChangeKey.newKey] as? Bool
             if (isOpen == true) {
                 YLprogressHUD.showAutoHiden("AI对话开启")
             } else {
@@ -169,8 +169,10 @@ extension ChatVC:UITableViewDelegate,UITableViewDataSource {
 
 extension ChatVC : JoyGemChatManagerDelegate {
     func chatManager(_ manager: JoyGemChatManager, stateChange code: JoyGemStateCode) {
+        Logger.debug("事shi ",code)
         switch code {
         case .startRecord:
+            toolBar.isRecord = true
             if (isTtsPlaying) {
                 isTtsPlaying = false
                 PcmSound.sharedInstance().cleanup()
@@ -186,15 +188,18 @@ extension ChatVC : JoyGemChatManagerDelegate {
 //            stateLabel.text = "正在录音"
             break
         case .stopRecord:
-//            stateLabel.text = "操作耳机"
+            toolBar.isRecord = false
             break
         default:
             break
         }
     }
+    func chatManager(_ manager: JoyGemChatManager, eventUpdate event: JoyGemChatEvent) {
+        Logger.debug("事件改变",event)
+    }
     
     func chatManager(_ manager: JoyGemChatManager, onError code: JoyGemErrorCode) {
-        
+        Logger.debug("收到错误",code)
     }
     
     func chatManager(_ manager: JoyGemChatManager, audioData data: Data?, finish isFinish: Bool) {
@@ -247,18 +252,13 @@ extension ChatVC : JoyGemChatManagerDelegate {
             tableView.reloadData()
             scrollToBottom()
         }
-
-    }
-    
-    func chatManagerStopped(_ manager: JoyGemChatManager) {
-        
     }
 }
 
 extension ChatVC : PcmSoundDelegate {
     
     func remaining(_ frames: UInt) {
-        print("[frame:\(frames)]");
+        Logger.debug("[frame:\(frames)]");
         if (frames == 0) {
             JoyGemChatManager.shared().playAudioEnd()
         }
index e478c32..8a9417f 100644 (file)
@@ -8,6 +8,7 @@
 import UIKit
 import JoyGemAI
 class TextTranlateVC:BaseVC{
+    let scrollView = UIScrollView()
     let languageItem = LanguageSelectItem()
     let toolBar = SendToolBar()
     let tableView = UITableView(frame: CGRectZero, style: .plain)
@@ -17,35 +18,47 @@ class TextTranlateVC:BaseVC{
     }
     override func setupViews() {
         self.navBar.title = "文本翻译"
-
-        tableView.keyboardDismissMode = .onDrag
-        tableView.backgroundColor = .clear
-        tableView.delegate = self
-        tableView.dataSource = self
-        tableView.estimatedRowHeight = 60
-        tableView.separatorStyle = .none
-        tableView.register(TranslateCell.self, forCellReuseIdentifier: TranslateCell.reuseID)
         
+        view.addSubviews([languageItem,scrollView])
+        scrollView.addSubviews([toolBar,tableView])
         
-        toolBar.textField.text = ""
-        toolBar.delegate = self
-        view.addSubviews([toolBar,languageItem,tableView])
-
+        tableView.do { v in
+            v.keyboardDismissMode = .onDragWithAccessory
+            v.backgroundColor = .clear
+            v.delegate = self
+            v.dataSource = self
+            v.estimatedRowHeight = 60
+            v.separatorStyle = .none
+            v.register(TranslateCell.self, forCellReuseIdentifier: TranslateCell.reuseID)
+        }
+        toolBar.do { v in
+            v.textField.text = ""
+            v.delegate = self
+        }
     }
     override func setupLayout() {
         languageItem.snp.makeConstraints { make in
             make.width.centerX.equalToSuperview()
             make.top.equalToSuperview().inset(kNavBtm)
         }
+        scrollView.snp.makeConstraints { make in
+            make.top.equalTo(languageItem.snp.bottom)
+            make.left.equalToSuperview()
+            make.height.equalTo(kScreenHei - kNavBtm - 56)
+            make.width.equalTo(kScreenWid)
+        }
+        tableView.snp.makeConstraints { make in
+            make.top.equalToSuperview()
+            make.left.equalToSuperview()
+            make.width.equalTo(kScreenWid)
+            make.height.equalTo(kScreenHei - kNavBtm - 56 - 82)
+        }
+        
         toolBar.snp.makeConstraints { make in
             make.width.centerX.equalToSuperview()
             make.height.equalTo(52)
-            make.bottom.equalToSuperview().inset(20)
-        }
-        tableView.snp.makeConstraints { make in
-            make.top.equalTo(languageItem.snp.bottom)
-            make.left.right.equalToSuperview()
-            make.bottom.equalTo(toolBar.snp.top)
+            make.top.equalTo(tableView.snp.bottom).offset(10)
+            make.bottom.equalToSuperview()
         }
     }
     func scrollToBottom(){
@@ -70,7 +83,7 @@ extension TextTranlateVC:UITableViewDelegate,UITableViewDataSource {
 }
 extension TextTranlateVC:SendToolBarDelegate{
     func sendToolBar(_ toolBar: SendToolBar, _ text: String) {
-        toolBar.textField.resignFirstResponder()
+//        toolBar.textField.resignFirstResponder()
         dataList.append(TranslateCellModel(send: text,response: ""))
         tableView.reloadData()
         scrollToBottom()
index b60a5c4..b687552 100644 (file)
@@ -23,6 +23,7 @@ class TranslateCell:BaseTableViewCell{
     let line = BrokenLineView()
     let originalLabel = UILabel()
     let translationLabel = UILabel()
+    let copyIcon = UIImageView()
     
     override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
         super.init(style: style, reuseIdentifier: reuseIdentifier)
@@ -55,8 +56,12 @@ class TranslateCell:BaseTableViewCell{
         line.do { v in
             //            v.backgroundColor = .hexString("#93C6EC")
         }
+        copyIcon.do { v in
+            v.image = UIImage(named: "copy_icon")
+            v.yc.addTap(target: self, action: #selector(copyAction))
+        }
         contentView.addSubview(bgView)
-        bgView.addSubviews([originalLabel,translationLabel,line])
+        bgView.addSubviews([originalLabel,translationLabel,line,copyIcon])
         
         
         //        let brokenLineView = BrokenLineView(frame: CGRect(x: 0, y: 0, width: 300, height:100))
@@ -66,35 +71,44 @@ class TranslateCell:BaseTableViewCell{
     override func setupLayout() {
         bgView.snp.makeConstraints { make in
             make.top.bottom.equalToSuperview().inset(10)
-            make.width.lessThanOrEqualTo(kScreenWid - 36)
+            make.width.lessThanOrEqualTo(kScreenWid - 58)
             make.left.equalToSuperview().inset(18)
         }
         
         originalLabel.snp.makeConstraints { make in
             make.top.equalToSuperview().inset(14)
-            make.left.equalToSuperview().inset(10)
-            make.width.lessThanOrEqualTo(kScreenWid - 60)
+            make.left.equalToSuperview().inset(12)
+            make.width.lessThanOrEqualTo(kScreenWid - 82)
         }
         line.snp.makeConstraints { make in
-            make.left.right.equalToSuperview().inset(10)
-            make.height.equalTo(10)
-            make.top.equalTo(originalLabel.snp.bottom).offset(18)
+            make.left.right.equalToSuperview().inset(12)
+            make.height.equalTo(1)
+            make.top.equalTo(originalLabel.snp.bottom).offset(15)
         }
         
         translationLabel.snp.makeConstraints { make in
-            make.top.equalTo(line.snp.bottom).offset(18)
-            make.left.equalToSuperview().inset(10)
-            make.width.lessThanOrEqualTo(kScreenWid - 60)
+            make.top.equalTo(line.snp.bottom).offset(15)
+            make.left.equalToSuperview().inset(12)
+            make.width.lessThanOrEqualTo(kScreenWid - 82)
+            make.bottom.equalToSuperview().inset(47)
+        }
+        copyIcon.snp.makeConstraints { make in
+            make.right.equalToSuperview().inset(12)
+            make.size.equalTo(24)
             make.bottom.equalToSuperview().inset(10)
         }
     }
     
-        var data:TranslateCellModel!{
-            didSet{
-                originalLabel.text = data.send
-                translationLabel.text = data.response
-            }
+    var data:TranslateCellModel!{
+        didSet{
+            originalLabel.text = data.send
+            translationLabel.text = data.response
         }
+    }
+    @objc func copyAction(){
+        UIPasteboard.general.string = data.send + "\n" + data.response
+        YLprogressHUD.showAutoHiden("已拷贝")
+    }
 }
 
 
index a319653..0bacf68 100644 (file)
@@ -8,7 +8,7 @@
 import UIKit
 
 class RegisterVC:BaseVC{
-    
+    let scrollView = UIScrollView()
     let tipsLabel = UILabel()
     let bgView = UIView()
     let titleLabel = UILabel()
@@ -63,19 +63,30 @@ class RegisterVC:BaseVC{
         registerBtn.set(title: "注册",style: .theme1, target: self, action: #selector(registerAction))
         loginBtn.set(title: "登录",style: .theme2, target: self, action: #selector(loginAction))
         agreeView.isHidden = true
-        view.addSubviews([tipsLabel,bgView])
+        
+        scrollView.backgroundColor = .clear
+        view.addSubview(scrollView)
+        scrollView.addSubviews([tipsLabel,bgView])
         bgView.addSubviews([titleLabel,phoneView,codeView,pwdView,pwdView2,loginBtn,registerBtn,agreeView])
         
     }
     override func setupLayout(){
+        scrollView.snp.makeConstraints { make in
+            make.top.equalToSuperview().inset(kNavBtm)
+            make.left.equalToSuperview()
+            make.height.equalTo(kScreenHei - kNavBtm)
+            make.width.equalTo(kScreenWid)
+        }
         tipsLabel.snp.makeConstraints { make in
             make.left.equalToSuperview().inset(28)
-            make.top.equalTo(kNavBtm + 20)
+            make.top.equalTo(20)
             make.centerX.equalToSuperview()
         }
         bgView.snp.makeConstraints { make in
-            make.left.right.equalToSuperview()
-            make.top.equalToSuperview().inset(244)
+            make.left.equalToSuperview()
+            make.top.equalToSuperview().inset(160)
+            make.width.equalTo(kScreenWid)
+            make.height.equalTo(kScreenHei - 250)
             make.bottom.equalToSuperview()
         }
         
index fffe3bd..7656284 100644 (file)
@@ -31,6 +31,8 @@ class SendToolBar:UIView{
         textField.do { v in
             v.backgroundColor = .clear
             v.placeholder = "请输入..."
+            v.returnKeyType = .done
+            v.delegate = self
         }
         
         addSubview(bgView)
@@ -60,10 +62,18 @@ class SendToolBar:UIView{
     }
     
     @objc func sendAction(){
-        if let text = textField.text {
+        if let text = textField.text,text.isNotEmpty {
             self.delegate?.sendToolBar(self,text)
         }
     }
     
 }
-
+extension SendToolBar:UITextFieldDelegate{
+    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
+//        if let text = textField.text,text.isNotEmpty {
+//            self.delegate?.sendToolBar(self,text)
+//        }
+        textField.resignFirstResponder()
+        return false
+    }
+}