From: liangzhenying <867174124@qq.com> Date: Sat, 27 Sep 2025 02:24:24 +0000 (+0800) Subject: 对话UI完善 X-Git-Tag: 1.0.2~95 X-Git-Url: http://git.snicker.com.cn/sitemap.xml?a=commitdiff_plain;h=58b6509ffcb5eb2202d963ee51edfdd9428799d8;p=mirrors%2FShenYin.git 对话UI完善 --- diff --git a/ShenYin/ShenYin/Assets.xcassets/home/audio_record_normal.imageset/Contents.json b/ShenYin/ShenYin/Assets.xcassets/home/audio_record_normal.imageset/Contents.json new file mode 100644 index 0000000..0ffdf24 --- /dev/null +++ b/ShenYin/ShenYin/Assets.xcassets/home/audio_record_normal.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "record_normal@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "record_normal@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ShenYin/ShenYin/Assets.xcassets/home/audio_record_normal.imageset/record_normal@2x.png b/ShenYin/ShenYin/Assets.xcassets/home/audio_record_normal.imageset/record_normal@2x.png new file mode 100644 index 0000000..675a506 Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/home/audio_record_normal.imageset/record_normal@2x.png differ diff --git a/ShenYin/ShenYin/Assets.xcassets/home/audio_record_normal.imageset/record_normal@3x.png b/ShenYin/ShenYin/Assets.xcassets/home/audio_record_normal.imageset/record_normal@3x.png new file mode 100644 index 0000000..d9ec282 Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/home/audio_record_normal.imageset/record_normal@3x.png differ diff --git a/ShenYin/ShenYin/Assets.xcassets/home/record_detail_copy.imageset/Contents.json b/ShenYin/ShenYin/Assets.xcassets/home/record_detail_copy.imageset/Contents.json new file mode 100644 index 0000000..16fb6d3 --- /dev/null +++ b/ShenYin/ShenYin/Assets.xcassets/home/record_detail_copy.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Frame 1986@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Frame 1986@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ShenYin/ShenYin/Assets.xcassets/home/record_detail_copy.imageset/Frame 1986@2x.png b/ShenYin/ShenYin/Assets.xcassets/home/record_detail_copy.imageset/Frame 1986@2x.png new file mode 100644 index 0000000..92ab540 Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/home/record_detail_copy.imageset/Frame 1986@2x.png differ diff --git a/ShenYin/ShenYin/Assets.xcassets/home/record_detail_copy.imageset/Frame 1986@3x.png b/ShenYin/ShenYin/Assets.xcassets/home/record_detail_copy.imageset/Frame 1986@3x.png new file mode 100644 index 0000000..12af0e5 Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/home/record_detail_copy.imageset/Frame 1986@3x.png differ diff --git a/ShenYin/ShenYin/Assets.xcassets/home/upload.imageset/Contents.json b/ShenYin/ShenYin/Assets.xcassets/home/upload.imageset/Contents.json new file mode 100644 index 0000000..5c4d3b1 --- /dev/null +++ b/ShenYin/ShenYin/Assets.xcassets/home/upload.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Frame@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Frame@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ShenYin/ShenYin/Assets.xcassets/home/upload.imageset/Frame@2x.png b/ShenYin/ShenYin/Assets.xcassets/home/upload.imageset/Frame@2x.png new file mode 100644 index 0000000..3ce50ed Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/home/upload.imageset/Frame@2x.png differ diff --git a/ShenYin/ShenYin/Assets.xcassets/home/upload.imageset/Frame@3x.png b/ShenYin/ShenYin/Assets.xcassets/home/upload.imageset/Frame@3x.png new file mode 100644 index 0000000..375579f Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/home/upload.imageset/Frame@3x.png differ diff --git a/ShenYin/ShenYin/Assets.xcassets/mine/tip_normal.imageset/Contents.json b/ShenYin/ShenYin/Assets.xcassets/mine/tip_normal.imageset/Contents.json new file mode 100644 index 0000000..5905c9c --- /dev/null +++ b/ShenYin/ShenYin/Assets.xcassets/mine/tip_normal.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Ellipse_52@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Ellipse_52@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ShenYin/ShenYin/Assets.xcassets/mine/tip_normal.imageset/Ellipse_52@2x.png b/ShenYin/ShenYin/Assets.xcassets/mine/tip_normal.imageset/Ellipse_52@2x.png new file mode 100644 index 0000000..9280587 Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/mine/tip_normal.imageset/Ellipse_52@2x.png differ diff --git a/ShenYin/ShenYin/Assets.xcassets/mine/tip_normal.imageset/Ellipse_52@3x.png b/ShenYin/ShenYin/Assets.xcassets/mine/tip_normal.imageset/Ellipse_52@3x.png new file mode 100644 index 0000000..a1fa2d5 Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/mine/tip_normal.imageset/Ellipse_52@3x.png differ diff --git a/ShenYin/ShenYin/Assets.xcassets/mine/tip_selected.imageset/Contents.json b/ShenYin/ShenYin/Assets.xcassets/mine/tip_selected.imageset/Contents.json new file mode 100644 index 0000000..df1a323 --- /dev/null +++ b/ShenYin/ShenYin/Assets.xcassets/mine/tip_selected.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Group 1255@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Group 1255@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ShenYin/ShenYin/Assets.xcassets/mine/tip_selected.imageset/Group 1255@2x.png b/ShenYin/ShenYin/Assets.xcassets/mine/tip_selected.imageset/Group 1255@2x.png new file mode 100644 index 0000000..955a662 Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/mine/tip_selected.imageset/Group 1255@2x.png differ diff --git a/ShenYin/ShenYin/Assets.xcassets/mine/tip_selected.imageset/Group 1255@3x.png b/ShenYin/ShenYin/Assets.xcassets/mine/tip_selected.imageset/Group 1255@3x.png new file mode 100644 index 0000000..b142b7e Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/mine/tip_selected.imageset/Group 1255@3x.png differ diff --git a/ShenYin/ShenYin/Resource/dialog_record.gif b/ShenYin/ShenYin/Resource/dialog_record.gif new file mode 100644 index 0000000..056c544 Binary files /dev/null and b/ShenYin/ShenYin/Resource/dialog_record.gif differ diff --git a/ShenYin/ShenYin/Resource/record_start.gif b/ShenYin/ShenYin/Resource/record_start.gif new file mode 100644 index 0000000..89700a2 Binary files /dev/null and b/ShenYin/ShenYin/Resource/record_start.gif differ diff --git a/ShenYin/ShenYin/UI/Home/CallingRecordVC.swift b/ShenYin/ShenYin/UI/Home/CallingRecordVC.swift index e8f88d5..3113dba 100644 --- a/ShenYin/ShenYin/UI/Home/CallingRecordVC.swift +++ b/ShenYin/ShenYin/UI/Home/CallingRecordVC.swift @@ -23,9 +23,12 @@ class CallingRecordVC:BaseVC{ navBar.title = "通话录音" toolBar.delegate = self toolBar.hasRightItem = false + navBar.backgroundColor = .white + toolBar.delegate = self + view.backgroundColor = .white textView.do { v in - v.backgroundColor = .hexString("#F7F7F7") + v.backgroundColor = .white v.isEditable = false v.font = .regular(14) v.text = "" diff --git a/ShenYin/ShenYin/UI/Home/Chat/ChatRecordBar.swift b/ShenYin/ShenYin/UI/Home/Chat/ChatRecordBar.swift index 2afde8a..9c163c2 100644 --- a/ShenYin/ShenYin/UI/Home/Chat/ChatRecordBar.swift +++ b/ShenYin/ShenYin/UI/Home/Chat/ChatRecordBar.swift @@ -11,38 +11,79 @@ } class ChatRecordBar:BaseView{ - private var recordBtn = UIButton(type: .custom) + private var label = UILabel() + private var animationBg = UIView() + private var animationView = UIImageView() weak var delegate:ChatRecordBarDelegate? var isRecord:Bool = false{ didSet{ - recordBtn.isSelected = isRecord + if isRecord { + animationBg.backgroundColor = .hexString("#0092E1") + animationView.isHidden = false + label.text = "" + } + else{ + animationBg.backgroundColor = .white + animationView.isHidden = true + animationView.isHidden = true + label.text = "按住说话" + } } } override func setupViews() { - recordBtn.backgroundColor = .blue - recordBtn.setTitle("开始录音", for: .normal) - recordBtn.setTitle("停止录音", for: .selected) - recordBtn.addTarget(self, action: #selector(recordAction), for: .touchUpInside) - addSubview(recordBtn) + addSubview(animationBg) + animationBg.addSubviews([label,animationView]) + + backgroundColor = .clear + label.do { v in + v.textColor = .hexString("#121212") + v.font = .bold(16) + v.textAlignment = .center + } + + animationBg.do { v in + v.yc.setCornerRadius(16) + animationBg.backgroundColor = .white + } + + animationView.kf.setImage(with: Bundle.main.url(forResource: "dialog_record", withExtension: "gif")!) + self.isRecord = false + let longPressGesture = UILongPressGestureRecognizer(target: self, action: #selector(handleLongPress(_:))) + self.addGestureRecognizer(longPressGesture) + } override func setupLayout() { - recordBtn.snp.makeConstraints { make in - make.width.centerX.bottom.equalToSuperview() - make.height.equalToSuperview() + animationBg.snp.makeConstraints { make in + make.left.right.equalToSuperview().inset(18) + make.top.height.equalToSuperview() + } + animationView.snp.makeConstraints { make in + make.width.equalTo(218) + make.height.equalTo(24) + make.center.equalToSuperview() + } + label.snp.makeConstraints { make in + make.edges.equalToSuperview() } } - @objc func recordAction(){ - recordBtn.isSelected = !recordBtn.isSelected - if recordBtn.isSelected{ + @objc func handleLongPress(_ gesture: UILongPressGestureRecognizer) { + switch gesture.state { + case.began: + print("started") + self.isRecord = true delegate?.recordBarStart(self) - } - else{ + case.ended: + print("ended") + self.isRecord = false delegate?.recordBarStop(self) + default: + break } } + } diff --git a/ShenYin/ShenYin/UI/Home/Chat/ChatVC.swift b/ShenYin/ShenYin/UI/Home/Chat/ChatVC.swift index f271ff9..b547019 100644 --- a/ShenYin/ShenYin/UI/Home/Chat/ChatVC.swift +++ b/ShenYin/ShenYin/UI/Home/Chat/ChatVC.swift @@ -63,7 +63,7 @@ class ChatVC:BaseVC{ toolBar.snp.makeConstraints { make in make.width.centerX.equalToSuperview() make.height.equalTo(52) - make.bottom.equalToSuperview().inset(20) + make.bottom.equalToSuperview().inset(30) } tableView.snp.makeConstraints { make in make.top.equalToSuperview().inset(80) diff --git a/ShenYin/ShenYin/UI/Home/Chinese2English/Chinese2EnglishVC.swift b/ShenYin/ShenYin/UI/Home/Chinese2English/Chinese2EnglishVC.swift index 0c3e100..1385935 100644 --- a/ShenYin/ShenYin/UI/Home/Chinese2English/Chinese2EnglishVC.swift +++ b/ShenYin/ShenYin/UI/Home/Chinese2English/Chinese2EnglishVC.swift @@ -61,6 +61,10 @@ class Chinese2EnglishVC:BaseVC{ // } catch { // print(error) // } + + if TipsCache.needShow(type: .chinese2english) { + RecordTipsView(type: .chinese2english).show() + } } override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) diff --git a/ShenYin/ShenYin/UI/Home/Dialog/DialogTranlateVC.swift b/ShenYin/ShenYin/UI/Home/Dialog/DialogTranlateVC.swift index 90333d7..e026732 100644 --- a/ShenYin/ShenYin/UI/Home/Dialog/DialogTranlateVC.swift +++ b/ShenYin/ShenYin/UI/Home/Dialog/DialogTranlateVC.swift @@ -82,6 +82,10 @@ class DialogTranslateVC:BaseVC{ print(error) } PcmSound.sharedInstance().setup(16000, withchannels: 1) + + if TipsCache.needShow(type: .dialog) { + RecordTipsView(type: .dialog).show() + } } override func navRightViewTapped() { let tip = RecordTipsView(type: .tongchuan) diff --git a/ShenYin/ShenYin/UI/Home/FieldRecording/FieldRecordBar.swift b/ShenYin/ShenYin/UI/Home/FieldRecording/FieldRecordBar.swift index fc0689c..79c095d 100644 --- a/ShenYin/ShenYin/UI/Home/FieldRecording/FieldRecordBar.swift +++ b/ShenYin/ShenYin/UI/Home/FieldRecording/FieldRecordBar.swift @@ -27,7 +27,7 @@ class FieldRecordBar: BaseView { var hasRightItem:Bool = true override func setupViews() { - backgroundColor = .hexString("#F7F7F7") + backgroundColor = .white addSubviews([leftItem,rightItem,recordBtn]) recordBtn.do { v in diff --git a/ShenYin/ShenYin/UI/Home/FieldRecording/FieldRecordingVC.swift b/ShenYin/ShenYin/UI/Home/FieldRecording/FieldRecordingVC.swift index 8c65613..f0cfa70 100644 --- a/ShenYin/ShenYin/UI/Home/FieldRecording/FieldRecordingVC.swift +++ b/ShenYin/ShenYin/UI/Home/FieldRecording/FieldRecordingVC.swift @@ -18,13 +18,14 @@ class FieldRecordingVC:BaseVC{ override func setupViews() { navBar.title = "现场录音" + navBar.backgroundColor = .white toolBar.delegate = self - + view.backgroundColor = .white textView.do { v in v.isEditable = false v.font = .regular(14) v.text = "" - v.backgroundColor = .hexString("#F7F7F7") + v.backgroundColor = .white v.textColor = .hexString("#121212") v.contentInset = UIEdgeInsets(top: 0, left: 18, bottom: 0, right: 18) } diff --git a/ShenYin/ShenYin/UI/Home/FieldRecording/RhythView.swift b/ShenYin/ShenYin/UI/Home/FieldRecording/RhythView.swift index 1ea5b00..77f2e1b 100644 --- a/ShenYin/ShenYin/UI/Home/FieldRecording/RhythView.swift +++ b/ShenYin/ShenYin/UI/Home/FieldRecording/RhythView.swift @@ -1,47 +1,59 @@ import UIKit -//import DSWaveformImage +import Kingfisher class RhythView: BaseView { let lable = UILabel() - let wave = UIView() + let startWave = UIImageView() + let stopWave = UIImageView() + let wave = UIImageView() var timer:Timer? var num = 0 -// let wave = WaveformLiveView(frame: CGRect(x: 0, y: 0, width: kScreenWid, height: 50)) override func setupViews() { - addSubviews([lable,wave]) + addSubviews([startWave,stopWave,lable]) lable.do { v in v.textColor = .hexString("#121212") v.font = .bold(32) v.textAlignment = .center v.text = "00:00:00" } + + stopWave.image = UIImage(named: "audio_record_normal") + startWave.kf.setImage(with: Bundle.main.url(forResource: "record_start", withExtension: "gif")!) + startWave.isHidden = true +// startWave.backgroundColor = .green // backgroundColor = .red - wave.backgroundColor = .lightGray } override func setupLayout() { lable.snp.makeConstraints { make in - make.top.equalToSuperview().inset(10) + make.top.equalToSuperview().inset(0) make.centerX.equalToSuperview() } - wave.snp.makeConstraints { make in + stopWave.snp.makeConstraints { make in make.top.equalToSuperview().inset(40) make.left.right.equalToSuperview() make.height.equalTo(58) make.bottom.equalToSuperview() } + startWave.snp.makeConstraints { make in + make.edges.equalTo(stopWave) + } } @objc func timerAction(){ num += 1 lable.text = YLToos.formatSeconds(num) } func startTimer(){ + startWave.isHidden = false + stopWave.isHidden = true if let timer = timer,timer.isValid{ timer.invalidate() } timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(timerAction), userInfo: nil, repeats: true) } func stopTimer(){ + startWave.isHidden = true + stopWave.isHidden = false timer?.invalidate() } } diff --git a/ShenYin/ShenYin/UI/Home/RecordDetail/RecordDetaiContent.swift b/ShenYin/ShenYin/UI/Home/RecordDetail/RecordDetaiContent.swift new file mode 100644 index 0000000..0c02b3b --- /dev/null +++ b/ShenYin/ShenYin/UI/Home/RecordDetail/RecordDetaiContent.swift @@ -0,0 +1,65 @@ +// +// RecordDetaiContent.swift +// ShenYin +// +// Created by liangshi on 2025/9/26. +// + +class RecordDetaiContent: BaseView { + let titleLabel = UILabel() + let btn = UIButton(type: .custom) + let textView = UITextView() + var title:String!{ + didSet{ + titleLabel.text = title + } + } + var content:String!{ + didSet{ + textView.text = content + } + } + + override func setupViews() { + addSubviews([titleLabel,textView,btn]) + + titleLabel.do { v in + v.textColor = .rgb(0x0092E1) + v.font = .regular(16) + } + btn.do { v in + v.setImage(UIImage(named: "record_detail_copy"), for: .normal) + v.addTarget(self, action: #selector(copyAction), for: .touchUpInside) + } + textView.do { v in + v.font = .regular(14) + v.text = "" + v.textColor = .hexString("#121212") + v.contentInset = UIEdgeInsets(top: 0, left: 18, bottom: 0, right: 18) + v.backgroundColor = .clear + v.isEditable = false + } + backgroundColor = .color(.bgColor) + } + + override func setupLayout() { + titleLabel.snp.makeConstraints { make in + make.top.equalToSuperview().inset(15) + make.left.equalToSuperview().inset(18) + } + btn.snp.makeConstraints { make in + make.size.equalTo(26) + make.right.equalToSuperview().inset(18) + make.centerY.equalTo(titleLabel) + } + textView.snp.makeConstraints { make in + make.top.equalToSuperview().inset(35) + make.left.right.equalToSuperview() + make.bottom.equalToSuperview().inset(10) + } + } + @objc func copyAction(){ + UIPasteboard.general.string = textView.text +// YLprogressHUD.showAutoHiden("已拷贝") + } +} diff --git a/ShenYin/ShenYin/UI/Home/RecordDetail/RecordDetailTopBar.swift b/ShenYin/ShenYin/UI/Home/RecordDetail/RecordDetailTopBar.swift index 7a196f4..c62bc20 100644 --- a/ShenYin/ShenYin/UI/Home/RecordDetail/RecordDetailTopBar.swift +++ b/ShenYin/ShenYin/UI/Home/RecordDetail/RecordDetailTopBar.swift @@ -8,28 +8,34 @@ protocol RecordDetailTopBarDelegate { func recordDetailBarTranstlateAction(_ bar:RecordDetailTopBar) func recordDetailTopBarOgrinAction(_ bar:RecordDetailTopBar) + func recordDetailTopBarSummaryAction(_ bar:RecordDetailTopBar) } class RecordDetailTopBar: BaseView { let tranlateItem = LanguageItem() let originItem = LanguageItem() - + let summaryItem = LanguageItem() var delegate:RecordDetailTopBarDelegate? override func setupViews() { backgroundColor = .clear - addSubviews([tranlateItem,originItem]) + addSubviews([tranlateItem,originItem,summaryItem]) + originItem.do {v in + v.yc.addTap(target: self, action: #selector(originAction)) + v.label.text = "原文" + v.isSelected = true + } tranlateItem.do {v in v.yc.addTap(target: self, action: #selector(tralateAction)) v.label.text = "译文" v.isSelected = false } - originItem.do {v in - v.yc.addTap(target: self, action: #selector(originAction)) - v.label.text = "原文" - v.isSelected = true + summaryItem.do {v in + v.yc.addTap(target: self, action: #selector(summaryAction)) + v.label.text = "摘要" + v.isSelected = false } } @@ -38,13 +44,19 @@ class RecordDetailTopBar: BaseView { make.width.equalTo(100) make.top.equalToSuperview() make.height.equalTo(36) - make.right.equalToSuperview().inset(kScreenWid/2 + 15) + make.left.equalToSuperview().inset(18) } tranlateItem.snp.makeConstraints { make in make.width.equalTo(100) make.top.equalToSuperview() make.height.equalTo(36) - make.left.equalToSuperview().offset(kScreenWid/2 + 15) + make.centerX.equalToSuperview() + } + summaryItem.snp.makeConstraints { make in + make.width.equalTo(100) + make.top.equalToSuperview() + make.height.equalTo(36) + make.right.equalToSuperview().inset(18) } } @objc func tralateAction(){ @@ -55,7 +67,11 @@ class RecordDetailTopBar: BaseView { originItem.isSelected = !originItem.isSelected delegate?.recordDetailTopBarOgrinAction(self) } - + @objc func summaryAction(){ + summaryItem.isSelected = !summaryItem.isSelected + delegate?.recordDetailTopBarSummaryAction(self) + } + class LanguageItem: BaseView { let label = UILabel() diff --git a/ShenYin/ShenYin/UI/Home/RecordDetail/RecordDetailVC.swift b/ShenYin/ShenYin/UI/Home/RecordDetail/RecordDetailVC.swift index 8624305..4c20ccc 100644 --- a/ShenYin/ShenYin/UI/Home/RecordDetail/RecordDetailVC.swift +++ b/ShenYin/ShenYin/UI/Home/RecordDetail/RecordDetailVC.swift @@ -12,19 +12,21 @@ class RecordDetailVC:BaseVC{ let timeLabel = UILabel() let topBar = RecordDetailTopBar() let toolBar = RecordDetailBar() - let textView = UITextView() - var messageList : [(String,UInt)] = [] - var recordFilePath : String? - + let originView = RecordDetaiContent() + let translateView = RecordDetaiContent() + let summaryView = RecordDetaiContent() override func viewDidLoad() { super.viewDidLoad() } override func setupViews() { navBar.title = "现场录音" - navBar.rightView.setImage(UIImage(named: "help_icon"), for: .normal) + navBar.rightView.setImage(UIImage(named: "upload"), for: .normal) + toolBar.delegate = self - topBar.delegate = self + topBar.do { v in + v.delegate = self + } timeLabel.do { (v) in v.font = .regular(14) @@ -32,13 +34,19 @@ class RecordDetailVC:BaseVC{ v.textColor = .hexString("#666666") v.text = Date().format(.full3) } - textView.do { v in - v.font = .regular(14) - v.text = "" - v.textColor = .hexString("#121212") - v.contentInset = UIEdgeInsets(top: 0, left: 18, bottom: 0, right: 18) + originView.do { v in + v.title = "原文" +// v.content = "好优美的一篇文章,山花落尽,我心犹青|||记得春日时分,山花绽放得那样热烈,鲜红的、明黄的、洁白的,仿佛将整片山野染成了一幅画。那时的心也如山花般明亮,轻快地跳跃在生活的每一个角落。" } - view.addSubviews([timeLabel,topBar,textView,toolBar]) + translateView.do { v in + v.title = "译文" +// v.content = "What a beautiful article, the mountain flowers have all fallen, yet my heart remains green ||| Remembering the springtime, the mountain flowers bloomed so vividly, bright red, bright yellow, and pure white, as if they had painted the entire mountain wilderness into a picture. At that time, my heart was as bright as the mountain flowers, joyfully jumping around in every corner of life. " + } + summaryView.do { v in + v.title = "摘要" +// v.content = "这是摘要" + } + view.addSubviews([timeLabel,topBar,originView,translateView,summaryView,toolBar]) } override func setupLayout() { @@ -55,40 +63,141 @@ class RecordDetailVC:BaseVC{ toolBar.snp.makeConstraints { make in make.width.centerX.equalToSuperview() make.height.equalTo(95) - make.bottom.equalToSuperview().inset(20) - } - textView.snp.makeConstraints { make in - make.top.equalTo(topBar.snp.bottom) - make.left.right.equalToSuperview() - make.bottom.equalTo(toolBar.snp.top) + make.bottom.equalToSuperview() } + updateLayout() } override func setupData() { - PcmSound.sharedInstance().delegate = self; - PcmSound.sharedInstance().setup(16000, withchannels: 1) - let options: AVAudioSession.CategoryOptions = [.allowBluetooth] - do { - try AVAudioSession.sharedInstance().setCategory(.playback, options: [options]) - try AVAudioSession.sharedInstance().setActive(true) - } catch { - Logger.debug(error) - } + } override func navRightViewTapped() { } - func scrollToBottom(){ - let range = NSMakeRange(textView.text.count - 1, 1) - textView.scrollRangeToVisible(range) + + func updateLayout(){ + var h = 0.0 + + if topBar.originItem.isSelected && topBar.tranlateItem.isSelected && topBar.summaryItem.isSelected{ + originView.isHidden = false + translateView.isHidden = false + summaryView.isHidden = false + h = (kScreenHei - kNavBtm - 36 - 36 - 95)/3 + originView.snp.remakeConstraints { make in + make.top.equalTo(topBar.snp.bottom) + make.left.right.equalToSuperview() + make.height.equalTo(h) + } + translateView.snp.remakeConstraints { make in + make.top.equalTo(originView.snp.bottom) + make.left.right.equalToSuperview() + make.height.equalTo(h) + } + summaryView.snp.remakeConstraints { make in + make.top.equalTo(translateView.snp.bottom) + make.left.right.equalToSuperview() + make.height.equalTo(h) + } + } + else if topBar.originItem.isSelected && topBar.tranlateItem.isSelected{ + originView.isHidden = false + translateView.isHidden = false + summaryView.isHidden = true + h = (kScreenHei - kNavBtm - 36 - 36 - 95)/2 + originView.snp.remakeConstraints { make in + make.top.equalTo(topBar.snp.bottom) + make.left.right.equalToSuperview() + make.height.equalTo(h) + } + translateView.snp.remakeConstraints { make in + make.top.equalTo(originView.snp.bottom) + make.left.right.equalToSuperview() + make.height.equalTo(h) + } + } + else if topBar.originItem.isSelected && topBar.summaryItem.isSelected{ + originView.isHidden = false + translateView.isHidden = true + summaryView.isHidden = false + h = (kScreenHei - kNavBtm - 36 - 36 - 95)/2 + originView.snp.remakeConstraints { make in + make.top.equalTo(topBar.snp.bottom) + make.left.right.equalToSuperview() + make.height.equalTo(h) + } + summaryView.snp.remakeConstraints { make in + make.top.equalTo(originView.snp.bottom) + make.left.right.equalToSuperview() + make.height.equalTo(h) + } + } + else if topBar.tranlateItem.isSelected && topBar.summaryItem.isSelected{ + originView.isHidden = true + translateView.isHidden = false + summaryView.isHidden = false + h = (kScreenHei - kNavBtm - 36 - 36 - 95)/2 + translateView.snp.remakeConstraints { make in + make.top.equalTo(topBar.snp.bottom) + make.left.right.equalToSuperview() + make.height.equalTo(h) + } + summaryView.snp.remakeConstraints { make in + make.top.equalTo(translateView.snp.bottom) + make.left.right.equalToSuperview() + make.height.equalTo(h) + } + } + else if topBar.originItem.isSelected { + originView.isHidden = false + translateView.isHidden = true + summaryView.isHidden = true + h = (kScreenHei - kNavBtm - 36 - 36 - 95) + originView.snp.remakeConstraints { make in + make.top.equalTo(topBar.snp.bottom) + make.left.right.equalToSuperview() + make.height.equalTo(h) + } + } + else if topBar.tranlateItem.isSelected { + originView.isHidden = true + translateView.isHidden = false + summaryView.isHidden = true + h = (kScreenHei - kNavBtm - 36 - 36 - 95) + translateView.snp.remakeConstraints { make in + make.top.equalTo(topBar.snp.bottom) + make.left.right.equalToSuperview() + make.height.equalTo(h) + } + } + else if topBar.summaryItem.isSelected { + originView.isHidden = false + translateView.isHidden = true + summaryView.isHidden = false + h = (kScreenHei - kNavBtm - 36 - 36 - 95) + summaryView.snp.remakeConstraints { make in + make.top.equalTo(topBar.snp.bottom) + make.left.right.equalToSuperview() + make.height.equalTo(h) + } + }else{ + originView.isHidden = true + translateView.isHidden = true + summaryView.isHidden = true + } + + } } extension RecordDetailVC:RecordDetailTopBarDelegate{ + func recordDetailTopBarSummaryAction(_ bar: RecordDetailTopBar) { + updateLayout() + } + func recordDetailBarTranstlateAction(_ bar: RecordDetailTopBar) { - + updateLayout() } func recordDetailTopBarOgrinAction(_ bar: RecordDetailTopBar) { - + updateLayout() } } extension RecordDetailVC:RecordDetailBarDelegate{ @@ -108,10 +217,3 @@ extension RecordDetailVC:RecordDetailBarDelegate{ } } - -extension RecordDetailVC : PcmSoundDelegate { - - func remaining(_ frames: UInt) { - Logger.debug("[frame:\(frames)]"); - } -} diff --git a/ShenYin/ShenYin/UI/Home/RecordTranslateVC.swift b/ShenYin/ShenYin/UI/Home/RecordTranslateVC.swift index fc60166..075e03e 100644 --- a/ShenYin/ShenYin/UI/Home/RecordTranslateVC.swift +++ b/ShenYin/ShenYin/UI/Home/RecordTranslateVC.swift @@ -70,6 +70,10 @@ class RecordTranslateVC:BaseVC{ Logger.debug(error) } PcmSound.sharedInstance().setup(16000, withchannels: 1) + + if TipsCache.needShow(type: .tongchuan) { + RecordTipsView(type: .tongchuan).show() + } } override func navRightViewTapped() { let tip = RecordTipsView(type: .tongchuan) diff --git a/ShenYin/ShenYin/UI/Launch/AppManager.swift b/ShenYin/ShenYin/UI/Launch/AppManager.swift index f06e6f1..183d48a 100644 --- a/ShenYin/ShenYin/UI/Launch/AppManager.swift +++ b/ShenYin/ShenYin/UI/Launch/AppManager.swift @@ -45,5 +45,6 @@ extension App{ extension App{ var deviceValid:Bool{ return BleManager.shared.isConnetd +// return !BleManager.shared.isConnetd } } diff --git a/ShenYin/ShenYin/UI/Launch/SceneDelegate.swift b/ShenYin/ShenYin/UI/Launch/SceneDelegate.swift index d49cccf..531b766 100644 --- a/ShenYin/ShenYin/UI/Launch/SceneDelegate.swift +++ b/ShenYin/ShenYin/UI/Launch/SceneDelegate.swift @@ -20,7 +20,7 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { App.shared.window = window window?.rootViewController = BaseTC() -// window?.rootViewController = UINavigationController(rootViewController: DialogTranslateVC()) +// window?.rootViewController = UINavigationController(rootViewController: ChatVC()) AppLaunch.start() } diff --git a/ShenYin/ShenYin/UI/common/Cache/CacheManager.swift b/ShenYin/ShenYin/UI/common/Cache/CacheManager.swift new file mode 100644 index 0000000..49d9de8 --- /dev/null +++ b/ShenYin/ShenYin/UI/common/Cache/CacheManager.swift @@ -0,0 +1,18 @@ +// +// c.swift +// ShenYin +// +// Created by liangshi on 2025/9/11. +// +import CoreBluetooth + +class CacheManager{ + static let shared = CacheManager() + var currentDevice:DeviceModel? + + func saveDevice(_ device: DeviceModel) { + self.currentDevice = device + DeviceCache.shared.saveDevice(device) + } +} + diff --git a/ShenYin/ShenYin/UI/Launch/CacheManager.swift b/ShenYin/ShenYin/UI/common/Cache/DeviceCache.swift similarity index 81% rename from ShenYin/ShenYin/UI/Launch/CacheManager.swift rename to ShenYin/ShenYin/UI/common/Cache/DeviceCache.swift index 5f2f202..9980b4f 100644 --- a/ShenYin/ShenYin/UI/Launch/CacheManager.swift +++ b/ShenYin/ShenYin/UI/common/Cache/DeviceCache.swift @@ -1,20 +1,9 @@ // -// c.swift +// DeviceCache.swift // ShenYin // -// Created by liangshi on 2025/9/11. +// Created by liangshi on 2025/9/26. // -import CoreBluetooth - -class CacheManager{ - static let shared = CacheManager() - var currentDevice:DeviceModel? - - func saveDevice(_ device: DeviceModel) { - self.currentDevice = device - DeviceCache.shared.saveDevice(device) - } -} class DeviceModel: NSObject, NSCoding { var name = "" diff --git a/ShenYin/ShenYin/UI/common/Cache/TipsCache.swift b/ShenYin/ShenYin/UI/common/Cache/TipsCache.swift new file mode 100644 index 0000000..dc5ce48 --- /dev/null +++ b/ShenYin/ShenYin/UI/common/Cache/TipsCache.swift @@ -0,0 +1,21 @@ +// +// TipsCache.swift +// ShenYin +// +// Created by liangshi on 2025/9/26. +// + + + + +class TipsCache{ + static func needShow(type:RecordTipsType,show:Bool){ + UserDefaults.standard.set(show, forKey: type.title) + } + static func needShow(type:RecordTipsType)->Bool{ + if let value = UserDefaults.standard.value(forKey: type.title){ + return value as? Bool ?? false + } + return true + } +} diff --git a/ShenYin/ShenYin/UI/common/LoadingButton.swift b/ShenYin/ShenYin/UI/common/LoadingButton.swift index 7565b2b..1c9f657 100644 --- a/ShenYin/ShenYin/UI/common/LoadingButton.swift +++ b/ShenYin/ShenYin/UI/common/LoadingButton.swift @@ -24,7 +24,7 @@ class LoadingButton:UIButton{ } func startAnimating(finished:(()->Void)? = nil){ loading = true - activeView.backgroundColor = .hexString("#F7F7F7") + activeView.backgroundColor = .white activeView.startAnimating() DispatchQueue.main.asyncAfter(deadline:.now() + 2) { self.stopAnimating() diff --git a/ShenYin/ShenYin/UI/common/pop/RecordTipsView.swift b/ShenYin/ShenYin/UI/common/pop/RecordTipsView.swift index 4ae8ed7..e8cac32 100644 --- a/ShenYin/ShenYin/UI/common/pop/RecordTipsView.swift +++ b/ShenYin/ShenYin/UI/common/pop/RecordTipsView.swift @@ -63,12 +63,13 @@ class RecordTipsView: BasePresentView { let desLabel1 = UILabel() let desLabel2 = UILabel() let actionbtn = UIButton(type: .custom) + let agreeView = AgreeView() var didSelected: ((Int,String)->Void)? var tipsType:RecordTipsType = .dialog init(type:RecordTipsType) { tipsType = type - let h = 595.0 + let h = 620.0 super.init(contentHeight:h) } @@ -78,7 +79,7 @@ class RecordTipsView: BasePresentView { override func setupSubView() { super.setupSubView() - contentView.addSubviews([titleLabel,btn,tipsIcon,desLabel1,desLabel2,actionbtn]) + contentView.addSubviews([titleLabel,btn,tipsIcon,desLabel1,desLabel2,actionbtn,agreeView]) } override func setupLayout() { super.setupLayout() @@ -106,11 +107,15 @@ class RecordTipsView: BasePresentView { m.left.right.equalToSuperview().inset(30) } actionbtn.snp.makeConstraints { (m) in - m.bottom.equalToSuperview().inset(30) + m.bottom.equalToSuperview().inset(60) m.left.right.equalToSuperview().inset(52) m.height.equalTo(46) } - + agreeView.snp.makeConstraints { (m) in + m.bottom.equalToSuperview().inset(20) + m.centerX.equalToSuperview() + m.height.equalTo(30) + } } override func setupStyle() { @@ -164,6 +169,10 @@ class RecordTipsView: BasePresentView { v.setTitleColor(.white, for: .normal) v.addTarget(self, action: #selector(btnAction), for: .touchUpInside) } + agreeView.do { v in + v.agreeBtn.isSelected = false + v.agreeBtn.addTarget(self, action: #selector(agreeBtnAction), for: .touchUpInside) + } } @objc func closeAction(){ hide() @@ -171,4 +180,42 @@ class RecordTipsView: BasePresentView { @objc func btnAction(){ hide() } + @objc func agreeBtnAction(){ + agreeView.agreeBtn.isSelected = !agreeView.agreeBtn.isSelected + TipsCache.needShow(type: tipsType, show: !agreeView.agreeBtn.isSelected) + } + class AgreeView: BaseView { + let agreeBtn = UIButton() + let agreeTitle = UILabel() + override func setupViews() { + agreeBtn.do { (v) in + v.isSelected = true + v.contentMode = .center + v.setImage(UIImage(named: "tip_normal"), for: .normal) + v.setImage(UIImage(named: "tip_selected"), for: .selected) + } + agreeTitle.do { (v) in + v.textColor = .hexString("##999999") + v.font = .regular(12) + v.textAlignment = .left + v.text = "下次不再提示" + } +// backgroundColor = .red + addSubviews([agreeBtn,agreeTitle]) + } + override func setupLayout() { + agreeBtn.snp.makeConstraints { (m) in + m.left.top.equalToSuperview() + m.height.equalTo(30) + m.width.equalTo(30) + } + agreeTitle.snp.makeConstraints { (m) in + m.left.equalTo(agreeBtn.snp.right) + m.height.equalToSuperview() + m.centerY.equalTo(agreeBtn) + m.right.equalToSuperview() + } + } + } + }