--- /dev/null
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "Group 2104@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "Group 2104@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
--- /dev/null
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "Group_2122@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "Group_2122@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
--- /dev/null
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "Frame_2245@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "Frame_2245@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
--- /dev/null
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "Frame_2246@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "Frame_2246@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
--- /dev/null
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "Group_2299@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "Group_2299@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
App.shared.window = window
setConfig()
window?.rootViewController = BaseTC()
-// window?.rootViewController = UINavigationController(rootViewController: TextTranlateVC())
+ window?.rootViewController = UINavigationController(rootViewController: ChatVC())
}
self.tabBar.backgroundColor = .white
view.backgroundColor = .color(.bgColor)
- self.selectedIndex = 4
+ self.selectedIndex = 0
}
}
}
setupViews()
setupLayout()
+ loadData()
addLog()
}
open override func viewWillAppear(_ animated: Bool) {
func setupLayout(){
}
-
+ func loadData(){
+
+ }
func addLog(){
logBtn.frame = CGRect(x: UIScreen.main.bounds.size.width - 80, y: 200, width:60, height: 60)
logBtn.backgroundColor = .blue
--- /dev/null
+//
+// GlobalConfig.swift
+// ShenYin
+//
+// Created by liangshi on 2025/8/27.
+//
+
+class GlobalConfig{
+ static let languages = ["简体中文","English","日语","法语"]
+}
import UIKit
class CallingRecordVC:BaseVC{
-
+ let toolBar = FieldRecordBar()
+ let textView = UITextView()
+ let rhythView = RhythView()
override func viewDidLoad() {
super.viewDidLoad()
-
-
}
override func setupViews() {
- self.navBar.title = "通话录音"
+ navBar.title = "通话录音"
+ navBar.rightView.setImage(UIImage(named: "help_icon"), for: .normal)
+
+ textView.do { v in
+ v.text = "好优美的一篇文章,山花落尽,我心犹青|||记得春日时分,山花绽放得那样热烈,鲜红的、明黄的、洁白的,仿佛将整片山野染成了一幅画。那时的心也如山花般明亮,轻快地跳跃在生活的每一个角落。然而,繁华易逝,花朵终会飘落。花落的那天,我站在同一片山坡上,听着风带走它们的碎影。那种空落感从心底涌起,像极了许多未能言说的遗憾,带着些许酸涩。"
+ v.font = .regular(14)
+ v.textColor = .hexString("#121212")
+ v.contentInset = UIEdgeInsets(top: 0, left: 18, bottom: 0, right: 18)
+ }
+ view.addSubviews([rhythView,textView,toolBar])
+
}
override func setupLayout() {
+ rhythView.snp.makeConstraints { make in
+ make.width.centerX.equalToSuperview()
+ make.height.equalTo(100)
+ make.top.equalToSuperview().inset(kNavBtm)
+ }
+ toolBar.snp.makeConstraints { make in
+ make.width.centerX.equalToSuperview()
+ make.height.equalTo(120)
+ make.bottom.equalToSuperview().inset(20)
+ }
+ textView.snp.makeConstraints { make in
+ make.top.equalTo(rhythView.snp.bottom)
+ make.left.right.equalToSuperview()
+ make.bottom.equalTo(toolBar.snp.top)
+ }
+ }
+ override func navRightViewTapped() {
+
+ }
+ func scrollToBottom(){
}
-
}
--- /dev/null
+//
+// ChatCell.swift
+// ShenYin
+//
+// Created by liangshi on 2025/8/27.
+//
+/// Ai回应模型
+public class ChatCellModel {
+ public var type: Int = 0
+
+ public var content: String = ""
+
+ public var description: String {
+ return "UBAiResponse(type: \(type), state:\(type), content:\(content))"
+ }
+}
+
+class ChatCell:BaseTableViewCell{
+ let bgView = UIView()
+ let originalLabel = UILabel()
+
+ override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
+ super.init(style: style, reuseIdentifier: reuseIdentifier)
+
+ }
+
+ required init?(coder: NSCoder) {
+ fatalError("init(coder:) has not been implemented")
+ }
+
+ override func setupViews() {
+ contentView.backgroundColor = .rgb(0xF6F6F6)
+
+ bgView.do { v in
+ v.yc.setCornerRadius(12)
+ v.backgroundColor = .white
+ }
+ originalLabel.do { v in
+ v.text = "你好,欢迎使用AI翻译,点击下方按钮立即开始咱们的对话吧"
+ v.font = .bold(14)
+ v.textColor = .hexString("#606D80")
+ v.numberOfLines = 0
+ v.textAlignment = .left
+ }
+
+ contentView.addSubview(bgView)
+ bgView.addSubviews([originalLabel])
+ }
+
+ override func setupLayout() {
+ bgView.snp.makeConstraints { make in
+ make.top.bottom.equalToSuperview().inset(10)
+ make.width.lessThanOrEqualTo(kScreenWid - 36)
+ make.left.equalToSuperview().inset(18)
+ }
+
+ originalLabel.snp.makeConstraints { make in
+ make.left.right.top.bottom.equalToSuperview().inset(10)
+ make.width.lessThanOrEqualTo(kScreenWid - 56)
+ }
+ }
+
+ var data:ChatCellModel!{
+ didSet{
+ if data.type == 1 {
+ bgView.backgroundColor = .color(.theme)
+ originalLabel.textColor = .white
+
+ bgView.snp.remakeConstraints { make in
+ make.top.bottom.equalToSuperview().inset(10)
+ make.right.equalToSuperview().inset(20)
+ }
+ }
+ else{
+ bgView.backgroundColor = .white
+ originalLabel.textColor = .hexString("#121212")
+
+ bgView.snp.remakeConstraints { make in
+ make.top.bottom.equalToSuperview().inset(10)
+ make.left.equalToSuperview().inset(20)
+ }
+ }
+ originalLabel.text = data.content
+ }
+ }
+}
--- /dev/null
+//
+// ChatVC.swift
+// ShenYin
+//
+// Created by liangshi on 2025/8/6.
+//
+
+import UIKit
+
+class ChatVC:BaseVC{
+ let toolBar = SendToolBar()
+ let tableView = UITableView(frame: CGRectZero, style: .plain)
+ var dataList:[ChatCellModel] = []
+ override func viewDidLoad() {
+ super.viewDidLoad()
+ }
+ override func setupViews() {
+ navBar.rightView.setImage(UIImage(named: "help_icon"), for: .normal)
+
+
+ tableView.backgroundColor = .clear
+ tableView.delegate = self
+ tableView.dataSource = self
+ tableView.estimatedRowHeight = 60
+ tableView.separatorStyle = .none
+ tableView.register(ChatCell.self, forCellReuseIdentifier: ChatCell.reuseID)
+ view.addSubview(tableView)
+
+
+ toolBar.textField.text = ""
+ toolBar.delegate = self
+ view.addSubview(toolBar)
+
+ }
+ override func setupLayout() {
+ 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.equalToSuperview().inset(80)
+ make.left.right.equalToSuperview()
+ make.bottom.equalTo(toolBar.snp.top)
+ }
+ }
+ override func loadData() {
+ let model1 = ChatCellModel()
+ model1.type = 0
+ model1.content = "您好,有什么可以帮助您"
+
+ let model2 = ChatCellModel()
+ model2.type = 1
+ model2.content = "明天会下雨吗"
+
+ let model3 = ChatCellModel()
+ model3.type = 0
+ model3.content = "明天晴转多云,不下雨。明天去哪里玩呀,有没有选好地方,我知道好很多好玩的地方哦"
+
+ let model4 = ChatCellModel()
+ model4.type = 1
+ model4.content = "好的,谢谢啊"
+ dataList = [model1,model2,model3,model4]
+ tableView.reloadData()
+ }
+ override func navRightViewTapped() {
+ App.shared.goToPage(RoleListVC())
+ }
+ func scrollToBottom(){
+ if dataList.count > 0 {
+ tableView.scrollToRow(at: IndexPath(row: dataList.count - 1, section: 0), at: .none, animated: true)
+ }
+ }
+}
+extension ChatVC:UITableViewDelegate,UITableViewDataSource {
+ func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
+ return dataList.count
+ }
+
+ func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
+ let cell = ChatCell.cell(withTableView: tableView, indexPath: indexPath)
+ cell.data = dataList[indexPath.row]
+ return cell
+ }
+ func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
+
+ }
+}
+extension ChatVC:SendToolBarDelegate{
+ func sendToolBar(_ toolBar: SendToolBar, _ text: String) {
+ toolBar.textField.resignFirstResponder()
+ // list.append(ChatCellModel(isSend:true,content:text))
+ // tableView.reloadData()
+ // scrollToBottom()
+ // StartburstGlassesSdk.shared().chat.fireText(text)
+ }
+}
import UIKit
class RoleListVC: BaseVC{
let tableView = UITableView(frame: .zero, style: .plain)
- var list:[MineCellType] = []
+ var list = [1,2,3,4,5,6,7]
override func viewDidLoad() {
super.viewDidLoad()
+++ /dev/null
-//
-// ChatVC.swift
-// ShenYin
-//
-// Created by liangshi on 2025/8/6.
-//
-
-import UIKit
-
-class ChatVC:BaseVC{
-
- override func viewDidLoad() {
- super.viewDidLoad()
-
-
- }
- override func setupViews() {
- self.navBar.title = "对话"
- }
- override func setupLayout() {
-
- }
-
-}
// Created by liangshi on 2025/8/6.
//
-
import UIKit
class Chinese2EnglishVC:BaseVC{
-
+ let toolBar = RecordBar()
+ let tableView = UITableView(frame: CGRectZero, style: .plain)
+ var dataList = [1,2,3]
override func viewDidLoad() {
super.viewDidLoad()
-
-
}
override func setupViews() {
- self.navBar.title = "中英互译"
+ navBar.title = "中英互译"
+ navBar.rightView.setImage(UIImage(named: "help_icon"), for: .normal)
+
+
+ tableView.backgroundColor = .clear
+ tableView.delegate = self
+ tableView.dataSource = self
+ tableView.estimatedRowHeight = 60
+ tableView.separatorStyle = .none
+ tableView.register(TranslateCell.self, forCellReuseIdentifier: TranslateCell.reuseID)
+ view.addSubview(tableView)
+ view.addSubview(toolBar)
+
}
override func setupLayout() {
+ toolBar.snp.makeConstraints { make in
+ make.width.centerX.equalToSuperview()
+ make.height.equalTo(120)
+ make.bottom.equalToSuperview().inset(20)
+ }
+ tableView.snp.makeConstraints { make in
+ make.top.equalToSuperview().inset(80)
+ make.left.right.equalToSuperview()
+ make.bottom.equalTo(toolBar.snp.top)
+ }
+ }
+ override func navRightViewTapped() {
}
+ func scrollToBottom(){
+ if dataList.count > 0 {
+ tableView.scrollToRow(at: IndexPath(row: dataList.count - 1, section: 0), at: .none, animated: true)
+ }
+ }
+}
+extension Chinese2EnglishVC:UITableViewDelegate,UITableViewDataSource {
+ func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
+ return dataList.count
+ }
+ func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
+ let cell = TranslateCell.cell(withTableView: tableView, indexPath: indexPath)
+ // cell.data = dataList[indexPath.row]
+ return cell
+ }
+ func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
+
+ }
}
import UIKit
class DialogTranlateVC:BaseVC{
-
+ let toolBar = RecordBar()
+ let tableView = UITableView(frame: CGRectZero, style: .plain)
+ var dataList = [1,2,3]
override func viewDidLoad() {
super.viewDidLoad()
-
-
}
override func setupViews() {
- self.navBar.title = "对话翻译"
+ navBar.title = "对话翻译"
+ navBar.rightView.setImage(UIImage(named: "help_icon"), for: .normal)
+
+
+ tableView.backgroundColor = .clear
+ tableView.delegate = self
+ tableView.dataSource = self
+ tableView.estimatedRowHeight = 60
+ tableView.separatorStyle = .none
+ tableView.register(TranslateCell.self, forCellReuseIdentifier: TranslateCell.reuseID)
+ view.addSubview(tableView)
+ view.addSubview(toolBar)
+
}
override func setupLayout() {
+ toolBar.snp.makeConstraints { make in
+ make.width.centerX.equalToSuperview()
+ make.height.equalTo(120)
+ make.bottom.equalToSuperview().inset(20)
+ }
+ tableView.snp.makeConstraints { make in
+ make.top.equalToSuperview().inset(80)
+ make.left.right.equalToSuperview()
+ make.bottom.equalTo(toolBar.snp.top)
+ }
+ }
+ override func navRightViewTapped() {
}
+ func scrollToBottom(){
+ if dataList.count > 0 {
+ tableView.scrollToRow(at: IndexPath(row: dataList.count - 1, section: 0), at: .none, animated: true)
+ }
+ }
+}
+extension DialogTranlateVC:UITableViewDelegate,UITableViewDataSource {
+ func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
+ return dataList.count
+ }
+ func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
+ let cell = TranslateCell.cell(withTableView: tableView, indexPath: indexPath)
+ // cell.data = dataList[indexPath.row]
+ return cell
+ }
+ func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
+
+ }
}
--- /dev/null
+//
+// Untitled.swift
+// ShenYin
+//
+// Created by liangshi on 2025/8/27.
+//
+
+enum RecordSate:Int{
+ case normal
+ case recording
+ case pause
+}
+
+class FieldRecordBar: BaseView {
+ let recordBtn = UIButton()
+ let leftItem = RecordBarItem()
+ let rightItem = RecordBarButton()
+ var state:RecordSate = .normal
+
+ override func setupViews() {
+ backgroundColor = .white
+ addSubviews([leftItem,rightItem,recordBtn])
+
+ recordBtn.do { v in
+ v.setImage(UIImage(named: "btn_record_normal"), for: .normal)
+ v.setImage(UIImage(named: "btn_record_stop"), for: .selected)
+ v.addTarget(self, action: #selector(recordBtnAction), for: .touchUpInside)
+ }
+ leftItem.do {v in
+ v.yc.addTap(target: self, action: #selector(leftAction))
+ }
+ rightItem.do {v in
+ v.state = .normal
+ v.yc.addTap(target: self, action: #selector(pauseAction))
+ }
+ }
+
+ override func setupLayout() {
+ recordBtn.snp.makeConstraints { make in
+ make.size.equalTo(56)
+ make.center.equalToSuperview()
+ }
+ leftItem.snp.makeConstraints { make in
+ make.size.equalTo(56)
+ make.centerY.equalTo(recordBtn)
+ make.right.equalToSuperview().offset(-(kScreenWid/2 + 60))
+ }
+ rightItem.snp.makeConstraints { make in
+ make.size.equalTo(56)
+ make.centerY.equalTo(recordBtn)
+ make.left.equalToSuperview().offset(kScreenWid/2 + 60)
+ }
+ }
+ @objc func leftAction(){
+ if recordBtn.isSelected {
+ return
+ }
+ let v = CustomPicker(title: "请选择语言", list: GlobalConfig.languages)
+ v.selectedIndex = 0
+ v.show()
+ v.didSelected = {[weak self] (index,value) in
+ guard let self = self else { return }
+ leftItem.titleLabel.text = value
+ }
+ return
+ }
+ @objc func recordBtnAction(){
+ recordBtn.isSelected = !recordBtn.isSelected
+ rightItem.state = .recording
+ rightItem.isHidden = !recordBtn.isSelected
+
+ if recordBtn.isSelected {
+ leftItem.alpha = 0.5
+ }
+ else{
+ leftItem.alpha = 1
+ }
+ }
+ @objc func pauseAction(){
+ if rightItem.state == .recording {
+ rightItem.state = .pause
+ }
+ else if rightItem.state == .pause {
+ rightItem.state = .recording
+ }
+ }
+
+ class RecordBarItem: BaseView {
+ let icon = UIImageView()
+ let titleLabel = UILabel()
+ override func setupViews() {
+ addSubviews([titleLabel,icon])
+ icon.do { v in
+ v.image = UIImage(named: "record_select_language")
+ }
+ titleLabel.do { v in
+ v.textColor = .rgb(0x121212)
+ v.font = .regular(10)
+ v.text = "中文"
+ }
+ }
+
+ override func setupLayout() {
+ icon.snp.makeConstraints { make in
+ make.size.equalTo(28)
+ make.top.equalToSuperview().inset(10)
+ make.centerX.equalToSuperview()
+ }
+ titleLabel.snp.makeConstraints { make in
+ make.top.equalTo(icon.snp.bottom).offset(5)
+ make.centerX.equalTo(icon)
+ }
+ }
+ }
+ class RecordBarButton: BaseView {
+ let icon = UIImageView()
+ let titleLabel = UILabel()
+ var state:RecordSate = .normal{
+ didSet{
+ if state == .pause {
+ titleLabel.text = "继续"
+ icon.image = UIImage(named: "record_play")
+ }
+ else if state == .recording{
+ titleLabel.text = "暂停"
+ icon.image = UIImage(named: "record_pause")
+ }
+ }
+ }
+
+ override func setupViews() {
+ addSubviews([titleLabel,icon])
+ icon.do { v in
+ }
+ titleLabel.do { v in
+ v.textColor = .rgb(0x121212)
+ v.font = .regular(10)
+ }
+ }
+
+ override func setupLayout() {
+ icon.snp.makeConstraints { make in
+ make.size.equalTo(28)
+ make.top.equalToSuperview().inset(10)
+ make.centerX.equalToSuperview()
+ }
+ titleLabel.snp.makeConstraints { make in
+ make.top.equalTo(icon.snp.bottom).offset(5)
+ make.centerX.equalTo(icon)
+ }
+ }
+ }
+}
+++ /dev/null
-//
-// Fi.swift
-// ShenYin
-//
-// Created by liangshi on 2025/8/26.
-//
-
-import UIKit
-
-/// Ai回应模型
-public class UBAiResponse {
- /// 类型,
- /// 0:AI录音解析错误(只发类型即可,后面字节均不发)
- /// 1:AI录音解析内容
- /// 2:AI回应内容
- /// 3:AI回应错误(只发类型即可,后面字节均不发)
- /// 4:AI回应结束(只发类型即可,后面字节均不发)
- public var type: Int = 0
- /// 类型 start middle end
- public var state:String = ""
-
- /// 回复id
- public var reponseId: String = ""
- /// 内容
- public var content: String = ""
- /// 累积内容
- public var totalContent: String = ""
-
-
- init(_ reponseId:String) {
- self.reponseId = reponseId
- }
-
- public var description: String {
- return "UBAiResponse(type: \(type), state:\(state), content:\(content))"
- }
-}
-
-
-class FieldRecordingCell:BaseTableViewCell{
- let bgView = UIView()
- let line = BrokenLineView()
- let originalLabel = UILabel()
- let translationLabel = UILabel()
-
- override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
- super.init(style: style, reuseIdentifier: reuseIdentifier)
-
- }
-
- required init?(coder: NSCoder) {
- fatalError("init(coder:) has not been implemented")
- }
-
- override func setupViews() {
- contentView.backgroundColor = .rgb(0xF6F6F6)
-
- bgView.do { v in
- v.yc.setCornerRadius(12)
- v.backgroundColor = .white
- }
- originalLabel.do { v in
- v.text = "你好,欢迎使用AI翻译,点击下方按钮立即开始咱们的对话吧"
- v.font = .regular(14)
- v.textColor = .hexString("#606D80")
- v.numberOfLines = 0
- v.textAlignment = .left
- }
- translationLabel.do { v in
- v.text = "Hello, welcome to AI translation, click the button below now Let's start our conversation"
- v.font = .regular(14)
- v.textColor = .hexString("#121212")
- v.numberOfLines = 0
- v.textAlignment = .left
- }
- line.do { v in
-// v.backgroundColor = .hexString("#93C6EC")
- }
- contentView.addSubview(bgView)
- bgView.addSubviews([originalLabel,translationLabel,line])
-
-
-// let brokenLineView = BrokenLineView(frame: CGRect(x: 0, y: 0, width: 300, height:100))
-// addSubview(brokenLineView)
- }
-
- override func setupLayout() {
- bgView.snp.makeConstraints { make in
- make.top.bottom.equalToSuperview().inset(10)
- make.width.lessThanOrEqualTo(kScreenWid - 36)
- 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)
- }
- line.snp.makeConstraints { make in
- make.left.right.equalToSuperview().inset(10)
- make.height.equalTo(10)
- make.top.equalTo(originalLabel.snp.bottom).offset(18)
- }
-
- translationLabel.snp.makeConstraints { make in
- make.top.equalTo(line.snp.bottom).offset(18)
- make.left.equalToSuperview().inset(10)
- make.width.lessThanOrEqualTo(kScreenWid - 60)
- make.bottom.equalToSuperview().inset(10)
- }
- }
-
-// var data:UBAiResponse!{
-// didSet{
-// if data.type == 1 {
-// bgView.snp.remakeConstraints { make in
-// make.top.bottom.equalToSuperview().inset(10)
-// make.right.equalToSuperview().inset(20)
-// }
-// }
-// else{
-//
-// bgView.snp.remakeConstraints { make in
-// make.top.bottom.equalToSuperview().inset(10)
-// make.left.equalToSuperview().inset(20)
-// }
-// }
-// msgLabel.text = data.totalContent
-// }
-// }
-}
-
-
-
import UIKit
class FieldRecordingVC:BaseVC{
- let toolBar = SendToolBar()
- let tableView = UITableView(frame: CGRectZero, style: .plain)
- var dataList = [1,2,3]
+ let toolBar = FieldRecordBar()
+ let textView = UITextView()
+ let rhythView = RhythView()
override func viewDidLoad() {
super.viewDidLoad()
}
override func setupViews() {
- self.navBar.title = "现场录音"
- tableView.backgroundColor = .clear
- tableView.delegate = self
- tableView.dataSource = self
- tableView.estimatedRowHeight = 60
- tableView.separatorStyle = .none
- tableView.register(FieldRecordingCell.self, forCellReuseIdentifier: FieldRecordingCell.reuseID)
- view.addSubview(tableView)
+ navBar.title = "现场录音"
+ navBar.rightView.setImage(UIImage(named: "help_icon"), for: .normal)
+ textView.do { v in
+ v.text = "好优美的一篇文章,山花落尽,我心犹青|||记得春日时分,山花绽放得那样热烈,鲜红的、明黄的、洁白的,仿佛将整片山野染成了一幅画。那时的心也如山花般明亮,轻快地跳跃在生活的每一个角落。然而,繁华易逝,花朵终会飘落。花落的那天,我站在同一片山坡上,听着风带走它们的碎影。那种空落感从心底涌起,像极了许多未能言说的遗憾,带着些许酸涩。"
+ v.font = .regular(14)
+ v.textColor = .hexString("#121212")
+ v.contentInset = UIEdgeInsets(top: 0, left: 18, bottom: 0, right: 18)
+ }
+ view.addSubviews([rhythView,textView,toolBar])
- toolBar.textField.text = ""
- toolBar.delegate = self
- view.addSubview(toolBar)
-
}
override func setupLayout() {
+ rhythView.snp.makeConstraints { make in
+ make.width.centerX.equalToSuperview()
+ make.height.equalTo(100)
+ make.top.equalToSuperview().inset(kNavBtm)
+ }
toolBar.snp.makeConstraints { make in
make.width.centerX.equalToSuperview()
- make.height.equalTo(52)
+ make.height.equalTo(120)
make.bottom.equalToSuperview().inset(20)
}
- tableView.snp.makeConstraints { make in
- make.top.equalToSuperview().inset(80)
+ textView.snp.makeConstraints { make in
+ make.top.equalTo(rhythView.snp.bottom)
make.left.right.equalToSuperview()
make.bottom.equalTo(toolBar.snp.top)
}
}
- func scrollToBottom(){
- if dataList.count > 0 {
- tableView.scrollToRow(at: IndexPath(row: dataList.count - 1, section: 0), at: .none, animated: true)
- }
- }
-}
-extension FieldRecordingVC:UITableViewDelegate,UITableViewDataSource {
- func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
- return dataList.count
- }
-
- func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
- let cell = FieldRecordingCell.cell(withTableView: tableView, indexPath: indexPath)
-// cell.data = dataList[indexPath.row]
- return cell
- }
- func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
+ override func navRightViewTapped() {
}
-}
-extension FieldRecordingVC:SendToolBarDelegate{
- func sendToolBar(_ toolBar: SendToolBar, _ text: String) {
- toolBar.textField.resignFirstResponder()
-// list.append(ChatCellModel(isSend:true,content:text))
-// tableView.reloadData()
-// scrollToBottom()
-// StartburstGlassesSdk.shared().chat.fireText(text)
+ func scrollToBottom(){
+
}
}
--- /dev/null
+//
+// RecordBar.swift
+// ShenYin
+//
+// Created by liangshi on 2025/8/27.
+//
+
+class RecordBar: BaseView {
+ let recordBtn = UIButton()
+ let leftItem = RecordBarItem()
+ let rightItem = RecordBarItem()
+
+
+ override func setupViews() {
+ backgroundColor = .white
+ addSubviews([leftItem,rightItem,recordBtn])
+
+ recordBtn.do { v in
+ v.setImage(UIImage(named: "btn_record_normal"), for: .normal)
+ v.setImage(UIImage(named: "btn_record_stop"), for: .selected)
+ v.addTarget(self, action: #selector(recordBtnAction), for: .touchUpInside)
+ }
+ leftItem.do {v in
+// v.backgroundColor = .green
+ }
+ rightItem.do {v in
+// v.backgroundColor = .yellow
+ }
+ }
+
+ override func setupLayout() {
+ recordBtn.snp.makeConstraints { make in
+ make.size.equalTo(56)
+ make.center.equalToSuperview()
+ }
+ leftItem.snp.makeConstraints { make in
+ make.size.equalTo(56)
+ make.centerY.equalTo(recordBtn)
+ make.right.equalToSuperview().offset(-(kScreenWid/2 + 60))
+ }
+ rightItem.snp.makeConstraints { make in
+ make.size.equalTo(56)
+ make.centerY.equalTo(recordBtn)
+ make.left.equalToSuperview().offset(kScreenWid/2 + 60)
+ }
+ }
+
+ @objc func recordBtnAction(){
+ recordBtn.isSelected = !recordBtn.isSelected
+ }
+
+ class RecordBarItem: BaseView {
+ let icon = UIImageView()
+ let titleLabel = UILabel()
+ let valueLabel = UILabel()
+
+ override func setupViews() {
+// backgroundColor = .red
+ addSubviews([titleLabel,valueLabel,icon])
+ icon.do { v in
+ v.image = UIImage(named: "")
+ v.backgroundColor = .black
+ }
+ titleLabel.do { v in
+ v.textColor = .rgb(0x121212)
+ v.font = .bold(16)
+ v.text = "中文"
+ }
+ valueLabel.do { v in
+ v.textColor = .rgb(0x666666)
+ v.font = .regular(10)
+ v.text = "耳机"
+ }
+ }
+
+ override func setupLayout() {
+ icon.snp.makeConstraints { make in
+ make.size.equalTo(12)
+ make.top.equalToSuperview().inset(10)
+ make.right.equalToSuperview()
+ }
+ titleLabel.snp.makeConstraints { make in
+ make.right.equalTo(icon.snp.left).offset(-5)
+ make.centerY.equalTo(icon)
+ }
+ valueLabel.snp.makeConstraints { make in
+ make.right.equalTo(titleLabel)
+ make.top.equalTo(titleLabel.snp.bottom).offset(5)
+ }
+ }
+ }
+}
--- /dev/null
+//
+// Untitled.swift
+// ShenYin
+//
+// Created by liangshi on 2025/8/27.
+//
+
+class RhythView: BaseView {
+
+
+ override func setupViews() {
+ backgroundColor = .red
+
+ }
+
+ override func setupLayout() {
+
+ }
+
+}
}
collectionIcon.image = UIImage(named: "collection_selected")
playIcon.do { v in
- v.backgroundColor = .lightGray
+ v.image = UIImage(named: "play_icon")
}
}
}
playIcon.snp.makeConstraints { (m) in
- m.width.equalTo(30)
- m.height.equalTo(30)
+ m.width.size.equalTo(34)
m.left.equalToSuperview().inset(14)
m.centerY.equalToSuperview()
}
titleLabel.snp.makeConstraints { (m) in
m.top.equalTo(16)
- m.left.equalToSuperview().offset(52)
+ m.left.equalTo(playIcon.snp.right).offset(6)
}
collectionIcon.snp.makeConstraints { (m) in
m.size.equalTo(16)
import UIKit
class RecordTranslateVC:BaseVC{
-
+ let toolBar = RecordBar()
+ let tableView = UITableView(frame: CGRectZero, style: .plain)
+ var dataList = [1,2,3]
override func viewDidLoad() {
super.viewDidLoad()
-
-
}
override func setupViews() {
- self.navBar.title = "同声传译"
+ navBar.title = "同声传译"
+ navBar.rightView.setImage(UIImage(named: "help_icon"), for: .normal)
+
+
+ tableView.backgroundColor = .clear
+ tableView.delegate = self
+ tableView.dataSource = self
+ tableView.estimatedRowHeight = 60
+ tableView.separatorStyle = .none
+ tableView.register(TranslateCell.self, forCellReuseIdentifier: TranslateCell.reuseID)
+ view.addSubview(tableView)
+ view.addSubview(toolBar)
+
}
override func setupLayout() {
+ toolBar.snp.makeConstraints { make in
+ make.width.centerX.equalToSuperview()
+ make.height.equalTo(120)
+ make.bottom.equalToSuperview().inset(20)
+ }
+ tableView.snp.makeConstraints { make in
+ make.top.equalToSuperview().inset(80)
+ make.left.right.equalToSuperview()
+ make.bottom.equalTo(toolBar.snp.top)
+ }
+ }
+ override func navRightViewTapped() {
}
+ func scrollToBottom(){
+ if dataList.count > 0 {
+ tableView.scrollToRow(at: IndexPath(row: dataList.count - 1, section: 0), at: .none, animated: true)
+ }
+ }
+}
+extension RecordTranslateVC:UITableViewDelegate,UITableViewDataSource {
+ func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
+ return dataList.count
+ }
+ func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
+ let cell = TranslateCell.cell(withTableView: tableView, indexPath: indexPath)
+ // cell.data = dataList[indexPath.row]
+ return cell
+ }
+ func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
+
+ }
}
case .recordTranslate:
App.shared.goToPage(RecordTranslateVC())
case .dialogTranslate:
- App.shared.goToPage(ChatVC())
+ App.shared.goToPage(DialogTranlateVC())
case .textTranslate:
App.shared.goToPage(TextTranlateVC())
}
bottonView.do { v in
v.backgroundColor = .rgb(0xFAFAFA)
v.yc.setCornerRadius(30)
+ v.yc.addTap(target: self, action: #selector(chatAction))
}
tipsIcon.do { v in
v.image = UIImage(named: "home_chat")
make.centerY.equalToSuperview()
}
}
+ @objc func chatAction(){
+ App.shared.goToPage(ChatVC())
+ }
}
// v.selectedIndex(4)
// v.show(animate: true)
- let v = CustomPicker(title: "tishi", list: ["2","3","4","5","6","7","8"])
- v.selectedIndex = 2
- v.show()
- v.didSelected = { (index,value) in
- print(index,value)
- }
- return
+
}
@objc func addDeviceAction(){
}
override func setupViews() {
self.navBar.title = "文本翻译"
+ navBar.rightView.setImage(UIImage(named: "help_icon"), for: .normal)
+
+
tableView.backgroundColor = .clear
tableView.delegate = self
tableView.dataSource = self
make.left.right.equalToSuperview()
make.bottom.equalTo(toolBar.snp.top)
}
+ }
+ override func navRightViewTapped() {
+
}
func scrollToBottom(){
if dataList.count > 0 {
// Created by liangshi on 2025/8/26.
//
+
class TranslateCell:BaseTableViewCell{
let bgView = UIView()
let line = BrokenLineView()
pageControl.snp.makeConstraints { (m) in
m.width.equalToSuperview()
m.height.equalTo(25)
- m.bottom.equalToSuperview().inset(10)
+ m.bottom.equalToSuperview().inset(5)
m.centerX.equalToSuperview()
}
}
v.textColor = .rgb(0x333333)
v.font = .semiBold(16)
v.textAlignment = .center
- v.text = "标题"
+ v.text = title
}
btn.do { v in
v.setImage(UIImage(named: "close_icon"), for: .normal)