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
}
--- /dev/null
+{
+ "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
+ }
+}
//MARK: 初始化SDK
JoyGemAIManager.shared().initSdk()
//MARK: 配置日志类型
- JoyGemAIManager.shared().setLogMode(JoyGemLogMode.all)
+ JoyGemAIManager.shared().setLogMode(JoyGemLogMode.close)
let fileManager = FileManager.default
App.shared.window = window
window?.rootViewController = BaseTC()
- window?.rootViewController = UINavigationController(rootViewController: BleScanVC())
+// window?.rootViewController = UINavigationController(rootViewController: TextTranlateVC())
AppLaunch.start()
}
}
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)
}
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 {
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()
// 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) {
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()
}
import UIKit
import JoyGemAI
class TextTranlateVC:BaseVC{
+ let scrollView = UIScrollView()
let languageItem = LanguageSelectItem()
let toolBar = SendToolBar()
let tableView = UITableView(frame: CGRectZero, style: .plain)
}
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(){
}
extension TextTranlateVC:SendToolBarDelegate{
func sendToolBar(_ toolBar: SendToolBar, _ text: String) {
- toolBar.textField.resignFirstResponder()
+// toolBar.textField.resignFirstResponder()
dataList.append(TranslateCellModel(send: text,response: ""))
tableView.reloadData()
scrollToBottom()
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)
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))
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("已拷贝")
+ }
}
import UIKit
class RegisterVC:BaseVC{
-
+ let scrollView = UIScrollView()
let tipsLabel = UILabel()
let bgView = UIView()
let titleLabel = UILabel()
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()
}
textField.do { v in
v.backgroundColor = .clear
v.placeholder = "请输入..."
+ v.returnKeyType = .done
+ v.delegate = self
}
addSubview(bgView)
}
@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
+ }
+}