Commit 71687caa authored by Steven杜宇's avatar Steven杜宇

// AI

parent 89c86835
...@@ -878,6 +878,7 @@ ...@@ -878,6 +878,7 @@
04FD85702C21646200BEF9C5 /* YHMyInterestTopicCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04FD856F2C21646200BEF9C5 /* YHMyInterestTopicCell.swift */; }; 04FD85702C21646200BEF9C5 /* YHMyInterestTopicCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04FD856F2C21646200BEF9C5 /* YHMyInterestTopicCell.swift */; };
04FD85722C21786900BEF9C5 /* YHNameCardInfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04FD85712C21786900BEF9C5 /* YHNameCardInfoView.swift */; }; 04FD85722C21786900BEF9C5 /* YHNameCardInfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04FD85712C21786900BEF9C5 /* YHNameCardInfoView.swift */; };
04FD85742C219CFD00BEF9C5 /* YHMatchResultListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04FD85732C219CFD00BEF9C5 /* YHMatchResultListViewController.swift */; }; 04FD85742C219CFD00BEF9C5 /* YHMatchResultListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04FD85732C219CFD00BEF9C5 /* YHMatchResultListViewController.swift */; };
04FEDCF72D07EB4D00D24FE2 /* YHTextPrintView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04FEDCF62D07EB4D00D24FE2 /* YHTextPrintView.swift */; };
6203A87EDC96313BBE789D9C /* Pods_galaxy.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 987C69D43AE8D85DC1930DCF /* Pods_galaxy.framework */; }; 6203A87EDC96313BBE789D9C /* Pods_galaxy.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 987C69D43AE8D85DC1930DCF /* Pods_galaxy.framework */; };
A5000F512C3BC28B00843452 /* YHHomeHoldViewPageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5000F502C3BC28B00843452 /* YHHomeHoldViewPageViewController.swift */; }; A5000F512C3BC28B00843452 /* YHHomeHoldViewPageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5000F502C3BC28B00843452 /* YHHomeHoldViewPageViewController.swift */; };
A51044182B493675006B60BB /* README.md in Resources */ = {isa = PBXBuildFile; fileRef = A51044172B493675006B60BB /* README.md */; }; A51044182B493675006B60BB /* README.md in Resources */ = {isa = PBXBuildFile; fileRef = A51044172B493675006B60BB /* README.md */; };
...@@ -1993,6 +1994,7 @@ ...@@ -1993,6 +1994,7 @@
04FD856F2C21646200BEF9C5 /* YHMyInterestTopicCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHMyInterestTopicCell.swift; sourceTree = "<group>"; }; 04FD856F2C21646200BEF9C5 /* YHMyInterestTopicCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHMyInterestTopicCell.swift; sourceTree = "<group>"; };
04FD85712C21786900BEF9C5 /* YHNameCardInfoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHNameCardInfoView.swift; sourceTree = "<group>"; }; 04FD85712C21786900BEF9C5 /* YHNameCardInfoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHNameCardInfoView.swift; sourceTree = "<group>"; };
04FD85732C219CFD00BEF9C5 /* YHMatchResultListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHMatchResultListViewController.swift; sourceTree = "<group>"; }; 04FD85732C219CFD00BEF9C5 /* YHMatchResultListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHMatchResultListViewController.swift; sourceTree = "<group>"; };
04FEDCF62D07EB4D00D24FE2 /* YHTextPrintView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHTextPrintView.swift; sourceTree = "<group>"; };
19B28612265782F9DC1BE0B0 /* Pods-galaxy.testenv.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-galaxy.testenv.xcconfig"; path = "Target Support Files/Pods-galaxy/Pods-galaxy.testenv.xcconfig"; sourceTree = "<group>"; }; 19B28612265782F9DC1BE0B0 /* Pods-galaxy.testenv.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-galaxy.testenv.xcconfig"; path = "Target Support Files/Pods-galaxy/Pods-galaxy.testenv.xcconfig"; sourceTree = "<group>"; };
58C2405158A4A6632D0E7460 /* Pods-galaxy.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-galaxy.debug.xcconfig"; path = "Target Support Files/Pods-galaxy/Pods-galaxy.debug.xcconfig"; sourceTree = "<group>"; }; 58C2405158A4A6632D0E7460 /* Pods-galaxy.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-galaxy.debug.xcconfig"; path = "Target Support Files/Pods-galaxy/Pods-galaxy.debug.xcconfig"; sourceTree = "<group>"; };
987C69D43AE8D85DC1930DCF /* Pods_galaxy.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_galaxy.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 987C69D43AE8D85DC1930DCF /* Pods_galaxy.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_galaxy.framework; sourceTree = BUILT_PRODUCTS_DIR; };
...@@ -4493,6 +4495,7 @@ ...@@ -4493,6 +4495,7 @@
04BE3A912CFFFF0900BD31DB /* YHProductItemView.swift */, 04BE3A912CFFFF0900BD31DB /* YHProductItemView.swift */,
04BE3A922CFFFF0900BD31DB /* YHProductListMessageCell.swift */, 04BE3A922CFFFF0900BD31DB /* YHProductListMessageCell.swift */,
0430EFD92D041F5800EC8CC0 /* YHAIEvaluationWebView.swift */, 0430EFD92D041F5800EC8CC0 /* YHAIEvaluationWebView.swift */,
04FEDCF62D07EB4D00D24FE2 /* YHTextPrintView.swift */,
); );
path = V; path = V;
sourceTree = "<group>"; sourceTree = "<group>";
...@@ -6305,6 +6308,7 @@ ...@@ -6305,6 +6308,7 @@
04A271232BABFF3200652B1B /* YHCertificateUploadTypeCell.swift in Sources */, 04A271232BABFF3200652B1B /* YHCertificateUploadTypeCell.swift in Sources */,
04B360F32C636525001EB053 /* YHPrincipleWaitResultViewController.swift in Sources */, 04B360F32C636525001EB053 /* YHPrincipleWaitResultViewController.swift in Sources */,
045792132CBCFB8000EBD99B /* YHResignUploadTravelCardDetailModel.swift in Sources */, 045792132CBCFB8000EBD99B /* YHResignUploadTravelCardDetailModel.swift in Sources */,
04FEDCF72D07EB4D00D24FE2 /* YHTextPrintView.swift in Sources */,
04358E0A2C7835B000811928 /* YHMakeCertificatePlaceModel.swift in Sources */, 04358E0A2C7835B000811928 /* YHMakeCertificatePlaceModel.swift in Sources */,
A582B2412BB95998009D098C /* YHHKPlanTipsCell.swift in Sources */, A582B2412BB95998009D098C /* YHHKPlanTipsCell.swift in Sources */,
04CA2C072CB8F9C800F36DE7 /* YHResignUploadDocListProgressModel.swift in Sources */, 04CA2C072CB8F9C800F36DE7 /* YHResignUploadDocListProgressModel.swift in Sources */,
......
...@@ -25,7 +25,7 @@ class YHAIChatConfiguration { ...@@ -25,7 +25,7 @@ class YHAIChatConfiguration {
} }
func handleReceiveMessage(_ res: YHAIChatMessage?, _ done: Bool, _ messages: inout [YHAIChatMessage]) { func handleReceiveMessage(res: YHAIChatMessage?, done: Bool, lastTextPrintMsg:YHAIChatMessage?, messages: inout [YHAIChatMessage], cacheMessages: inout [YHAIChatMessage]) {
// 去除loading消息 // 去除loading消息
removeThinkingMessageFromChatList(&messages) removeThinkingMessageFromChatList(&messages)
...@@ -39,6 +39,11 @@ class YHAIChatConfiguration { ...@@ -39,6 +39,11 @@ class YHAIChatConfiguration {
if let res = res { if let res = res {
var find = false var find = false
if res.isNeedSpiceMessage() {
}
for msg in messages { for msg in messages {
if msg.messageId == res.messageId { if msg.messageId == res.messageId {
if msg.isNeedSpiceMessage(), res.isNeedSpiceMessage() { if msg.isNeedSpiceMessage(), res.isNeedSpiceMessage() {
......
...@@ -149,7 +149,7 @@ class YHAIMainChatViewController: YHBaseViewController { ...@@ -149,7 +149,7 @@ class YHAIMainChatViewController: YHBaseViewController {
self.manager.requestAI(botId: self.robotId, conversationId: self.conversationId, question:text) { self.manager.requestAI(botId: self.robotId, conversationId: self.conversationId, question:text) {
[weak self] res, done in [weak self] res, done in
guard let self = self else { return } guard let self = self else { return }
self.chatConfig.handleReceiveMessage(res, done, &messages) // self.chatConfig.handleReceiveMessage(res, done, &messages)
if done { if done {
print("RESPONSE-DONE") print("RESPONSE-DONE")
self.bottomInputView.status = self.bottomInputView.textView.text.isEmpty ? .disableSend : .enableSend self.bottomInputView.status = self.bottomInputView.textView.text.isEmpty ? .disableSend : .enableSend
......
...@@ -20,10 +20,34 @@ class YHAIRobotChatViewController: YHBaseViewController { ...@@ -20,10 +20,34 @@ class YHAIRobotChatViewController: YHBaseViewController {
let minimumScrollInterval: CFTimeInterval = 2.0 let minimumScrollInterval: CFTimeInterval = 2.0
var conversationId: String = "" var conversationId: String = ""
var messages:[YHAIChatMessage] = [] var messages:[YHAIChatMessage] = []
var cacheMessage: [YHAIChatMessage] = []
var lastTextPrintMessage:YHAIChatMessage? = nil
var isNeedShowBannerHeader: Bool = false var isNeedShowBannerHeader: Bool = false
var robotType: String = "" var robotType: String = ""
let manager = YHAIRequestManager() let manager = YHAIRequestManager()
let viewModel = YHAIViewModel() let viewModel = YHAIViewModel()
lazy var timer: DispatchSourceTimer = {
let timer = DispatchSource.makeTimerSource(queue: DispatchQueue.main)
timer.schedule(deadline: .now(), repeating: 0.1)
timer.setEventHandler { [weak self] in
guard let self = self else { return }
DispatchQueue.main.async {
for msg in self.messages {
if msg.isNeedSpiceMessage() {
msg.body.contentTextIndex += 1
}
}
self.tableView.reloadData()
}
}
return timer
}()
deinit {
// 在对象释放时取消定时器
timer.cancel()
}
lazy var chatConfig: YHAIChatConfiguration = { lazy var chatConfig: YHAIChatConfiguration = {
let config = YHAIChatConfiguration() let config = YHAIChatConfiguration()
...@@ -224,7 +248,7 @@ class YHAIRobotChatViewController: YHBaseViewController { ...@@ -224,7 +248,7 @@ class YHAIRobotChatViewController: YHBaseViewController {
self.manager.requestAI(botId: self.robotId, conversationId: self.conversationId, question:text) { self.manager.requestAI(botId: self.robotId, conversationId: self.conversationId, question:text) {
[weak self] res, done in [weak self] res, done in
guard let self = self else { return } guard let self = self else { return }
self.chatConfig.handleReceiveMessage(res, done, &messages) self.chatConfig.handleReceiveMessage(res: res, done: done, lastTextPrintMsg: self.lastTextPrintMessage, messages:&messages, cacheMessages:&cacheMessage)
if done { if done {
print("RESPONSE-DONE") print("RESPONSE-DONE")
self.bottomInputView.status = self.bottomInputView.textView.text.isEmpty ? .disableSend : .enableSend self.bottomInputView.status = self.bottomInputView.textView.text.isEmpty ? .disableSend : .enableSend
...@@ -254,6 +278,7 @@ class YHAIRobotChatViewController: YHBaseViewController { ...@@ -254,6 +278,7 @@ class YHAIRobotChatViewController: YHBaseViewController {
reloadAndScrollToBottom(true, true) reloadAndScrollToBottom(true, true)
autoResponseLocalTextMessage() autoResponseLocalTextMessage()
timer.resume()
} }
} }
...@@ -491,7 +516,8 @@ extension YHAIRobotChatViewController: UITableViewDelegate, UITableViewDataSourc ...@@ -491,7 +516,8 @@ extension YHAIRobotChatViewController: UITableViewDelegate, UITableViewDataSourc
} }
func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? { func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
let view = UIView() let view = YHTextPrintView(frame: .zero)
return view return view
} }
...@@ -501,7 +527,7 @@ extension YHAIRobotChatViewController: UITableViewDelegate, UITableViewDataSourc ...@@ -501,7 +527,7 @@ extension YHAIRobotChatViewController: UITableViewDelegate, UITableViewDataSourc
func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat { func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return 1.0 return UITableView.automaticDimension
} }
func scrollViewWillBeginDragging(_ scrollView: UIScrollView) { func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
......
...@@ -40,6 +40,7 @@ class YHAIHistoryMessage: SmartCodable { ...@@ -40,6 +40,7 @@ class YHAIHistoryMessage: SmartCodable {
body.type = self.type body.type = self.type
body.cardsInfo = self.cardsInfo body.cardsInfo = self.cardsInfo
body.imageInfo = self.imageInfo body.imageInfo = self.imageInfo
body.isHistoryMsg = true
msg.body = body msg.body = body
msg.setDone() msg.setDone()
msg.updateBodyToData() msg.updateBodyToData()
......
...@@ -195,11 +195,18 @@ class YHAIMessageBody: SmartCodable { ...@@ -195,11 +195,18 @@ class YHAIMessageBody: SmartCodable {
var contentType: Int = 0 var contentType: Int = 0
var contentText: String = "" var contentText: String = ""
var contentTextIndex: Int = 0 var contentTextIndex: Int = 0 {
didSet {
if contentTextIndex > contentText.count {
contentTextIndex = contentText.count
}
}
}
var chatId: String = "" var chatId: String = ""
var botId: String = "" var botId: String = ""
var status: String = "" var status: String = ""
var type: String = "" var type: String = ""
var isHistoryMsg: Bool = false
var cardsInfo: YHAIListInfoModel? var cardsInfo: YHAIListInfoModel?
var imageInfo: YHAIImageInfo? var imageInfo: YHAIImageInfo?
......
...@@ -47,11 +47,20 @@ class YHAITextMessageCell: UITableViewCell { ...@@ -47,11 +47,20 @@ class YHAITextMessageCell: UITableViewCell {
messageLabel.text = message.body.contentText messageLabel.text = message.body.contentText
// let text = message.body.contentText let text = message.body.contentText
// if text.count >= message.body.contentTextIndex { if message.body.isHistoryMsg {
// messageLabel.text = String(text.prefix(message.body.contentTextIndex)) messageLabel.text = text
// }
} else if message.isNeedSpiceMessage() {
if text.count > message.body.contentTextIndex {
messageLabel.text = String(text.prefix(message.body.contentTextIndex+1))
} else {
messageLabel.text = text
}
} else {
messageLabel.text = text
}
whiteContentView.backgroundColor = .white whiteContentView.backgroundColor = .white
messageLabel.textColor = .mainTextColor messageLabel.textColor = .mainTextColor
......
//
// YHTextPrintView.swift
// galaxy
//
// Created by Dufet on 2024/12/10.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
import Lottie
class YHTextPrintView: UIView {
var messageClick:((String)->())?
var message: YHAIChatMessage = YHAIChatMessage() {
didSet {
messageLabel.text = message.body.contentText
rightAngleView.backgroundColor = message.isSelf ? .brandMainColor : .white
rightAngleView.isHidden = message.getType() != .text
if message.isSelf {
whiteContentView.backgroundColor = .brandMainColor
messageLabel.textColor = .white
whiteContentView.snp.remakeConstraints { make in
make.left.greaterThanOrEqualTo(20)
make.right.equalTo(-20)
make.top.equalTo(20)
make.bottom.equalTo(0)
}
rightAngleView.snp.remakeConstraints { make in
make.top.right.equalTo(whiteContentView)
make.width.height.equalTo(15)
}
isNeedShowCopyView = false
isNeedShowLoadingView = false
} else {
messageLabel.text = message.body.contentText
let text = message.body.contentText
if message.body.isHistoryMsg {
messageLabel.text = text
} else if message.isNeedSpiceMessage() {
if text.count > message.body.contentTextIndex {
messageLabel.text = String(text.prefix(message.body.contentTextIndex+1))
} else {
messageLabel.text = text
}
} else {
messageLabel.text = text
}
whiteContentView.backgroundColor = .white
messageLabel.textColor = .mainTextColor
whiteContentView.snp.remakeConstraints { make in
make.left.equalTo(20)
make.right.equalTo(-20)
make.top.equalTo(20)
make.bottom.equalTo(0)
}
rightAngleView.snp.remakeConstraints { make in
make.top.left.equalTo(whiteContentView)
make.width.height.equalTo(15)
}
if message.getType() == .recommendText {
isNeedShowCopyView = false
isNeedShowLoadingView = false
} else {
isNeedShowCopyView = message.isDone
let complete = message.isDone
isNeedShowLoadingView = !complete
}
}
self.setNeedsLayout()
self.layoutIfNeeded()
}
}
var isNeedShowCopyView: Bool = false {
didSet {
copyContentView.isHidden = !isNeedShowCopyView
copyContentView.snp.remakeConstraints { make in
make.left.equalTo(0)
make.right.equalTo(0)
make.top.equalTo(loadingImgView.snp.bottom).offset(16)
make.height.equalTo(isNeedShowCopyView ? 37.0 : 0.0)
make.bottom.equalTo(0)
}
}
}
var isNeedShowLoadingView: Bool = false {
didSet {
loadingImgView.isHidden = !isNeedShowLoadingView
loadingImgView.snp.remakeConstraints { make in
make.right.equalTo(-16)
make.width.equalTo(26)
make.height.equalTo(isNeedShowLoadingView ? 18 : 0)
make.top.equalTo(messageLabel.snp.bottom).offset(isNeedShowLoadingView ? 6 : 0)
}
}
}
lazy var contentView: UIView = {
let view = UIView()
return view
}()
lazy var whiteContentView: UIView = {
let v = UIView()
v.backgroundColor = .white
v.layer.cornerRadius = 12.0
v.clipsToBounds = true
let tap = UITapGestureRecognizer(target: self, action: #selector(didMessageClicked))
v.addGestureRecognizer(tap)
let longPress = UILongPressGestureRecognizer(target: self, action: #selector(didCopyTextLongGesture(_:)))
v.addGestureRecognizer(longPress)
return v
}()
var rightAngleView: UIView = {
let v = UIView()
v.backgroundColor = .white
v.isHidden = true
return v
}()
lazy var messageLabel:UILabel = {
let lable = UILabel()
lable.textColor = UIColor.mainTextColor
lable.textAlignment = .left
lable.font = UIFont.PFSC_R(ofSize:14)
lable.numberOfLines = 0
return lable
}()
lazy var copyContentView: UIView = {
let v = UIView()
v.clipsToBounds = true
v.isHidden = true
let bgImgV = UIImageView(image: UIImage(named: "ai_chat_copy_bg"))
v.addSubview(bgImgV)
bgImgV.snp.makeConstraints { make in
make.left.top.bottom.equalToSuperview()
make.width.equalTo(KScreenWidth-40)
}
let label = UILabel()
label.textColor = UIColor.init(hex: 0x8993A2)
label.textAlignment = .left
label.font = UIFont.PFSC_R(ofSize:12)
label.text = "以上内容由银河AI生成"
v.addSubview(label)
label.snp.makeConstraints { make in
make.left.equalTo(16)
make.centerY.equalToSuperview()
make.height.equalTo(17)
}
let copyBtn = UIButton()
copyBtn.setTitle("复制", for: .normal)
copyBtn.titleLabel?.font = .PFSC_R(ofSize: 12)
copyBtn.setTitleColor(.mainTextColor, for: .normal)
copyBtn.setImage(UIImage(named: "ai_chat_msg_copy"), for: .normal)
copyBtn.YH_clickEdgeInsets = UIEdgeInsets(top: 15, left: 15, bottom: 15, right: 15)
copyBtn.addTarget(self, action: #selector(didCopyTextButtonClicked), for: .touchUpInside)
v.addSubview(copyBtn)
copyBtn.snp.makeConstraints { make in
make.right.equalTo(0)
make.centerY.equalToSuperview()
make.height.equalTo(37)
make.width.equalTo(82)
}
copyBtn.iconInLeft(spacing: 0.0)
return v
}()
let loadingImgView: LottieAnimationView! = {
let lottieView = LottieAnimationView(name: "ai_chat_loading")
lottieView.loopMode = .loop
lottieView.contentMode = .scaleAspectFit
lottieView.play()
return lottieView
}()
@objc func didCopyTextButtonClicked() {
let text = message.body.contentText
UIPasteboard.general.string = text
YHHUD.flash(message: "复制成功")
}
@objc func didCopyTextLongGesture(_ sender: UIGestureRecognizer) {
let text = message.body.contentText
if sender.state == .began {
UIPasteboard.general.string = text
YHHUD.flash(message: "复制成功")
}
}
lazy var shadowView: YHAIChatShadowView = {
let v = YHAIChatShadowView()
return v
}()
required init?(coder: NSCoder) {
super.init(coder: coder)
}
override init(frame: CGRect) {
super.init(frame: frame)
setupUI()
}
func setupUI() {
self.addSubview(contentView)
contentView.backgroundColor = .clear
backgroundColor = .clear
contentView.addSubview(shadowView)
contentView.addSubview(rightAngleView)
contentView.addSubview(whiteContentView)
whiteContentView.addSubview(messageLabel)
whiteContentView.addSubview(loadingImgView)
whiteContentView.addSubview(copyContentView)
contentView.snp.makeConstraints { make in
make.edges.equalToSuperview()
}
shadowView.snp.makeConstraints { make in
make.edges.equalTo(whiteContentView)
}
rightAngleView.snp.makeConstraints { make in
make.top.left.equalTo(whiteContentView)
make.width.height.equalTo(15)
}
whiteContentView.snp.makeConstraints { make in
make.left.equalTo(20)
make.right.equalTo(-20)
make.top.equalTo(20)
make.bottom.equalTo(0)
}
messageLabel.snp.makeConstraints { make in
make.left.equalTo(16)
make.right.equalTo(-16)
make.top.equalTo(16)
}
loadingImgView.snp.makeConstraints { make in
make.right.equalTo(-16)
make.width.equalTo(26)
make.height.equalTo(18)
make.top.equalTo(messageLabel.snp.bottom).offset(6)
}
copyContentView.snp.makeConstraints { make in
make.left.equalTo(0)
make.top.equalTo(loadingImgView.snp.bottom).offset(16)
make.height.equalTo(0)
make.bottom.equalTo(0)
}
}
@objc func didMessageClicked() {
self.endEditing(true)
if message.getType() == .recommendText {
let text = message.getText()
messageClick?(text)
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment