Commit 7fb9b20c authored by pete谢兆麟's avatar pete谢兆麟

Merge branch 'yinhe-live-1212' of...

Merge branch 'yinhe-live-1212' of http://gitlab.galaxy-immi.com/mobile-group/galaxy-iOS into yinhe-live-1212
parents 5831c3bf 9c9c2afd
......@@ -7216,7 +7216,7 @@
CODE_SIGN_ENTITLEMENTS = galaxy/galaxyTestEnv.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 18;
CURRENT_PROJECT_VERSION = 3;
DEVELOPMENT_TEAM = RXHYW88XR7;
ENABLE_USER_SCRIPT_SANDBOXING = NO;
FRAMEWORK_SEARCH_PATHS = (
......@@ -7242,7 +7242,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0.6;
MARKETING_VERSION = 2.0.0;
PRODUCT_BUNDLE_IDENTIFIER = com.intelligence.galaxy;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
......@@ -7360,7 +7360,7 @@
CODE_SIGN_ENTITLEMENTS = galaxy/galaxy.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 18;
CURRENT_PROJECT_VERSION = 3;
DEVELOPMENT_TEAM = RXHYW88XR7;
ENABLE_USER_SCRIPT_SANDBOXING = NO;
FRAMEWORK_SEARCH_PATHS = (
......@@ -7386,7 +7386,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0.6;
MARKETING_VERSION = 2.0.0;
PRODUCT_BUNDLE_IDENTIFIER = com.intelligence.galaxy;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
......@@ -7567,7 +7567,7 @@
CODE_SIGN_ENTITLEMENTS = galaxy/galaxyDebug.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 18;
CURRENT_PROJECT_VERSION = 3;
DEVELOPMENT_TEAM = RXHYW88XR7;
ENABLE_USER_SCRIPT_SANDBOXING = NO;
FRAMEWORK_SEARCH_PATHS = (
......@@ -7593,7 +7593,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0.6;
MARKETING_VERSION = 2.0.0;
PRODUCT_BUNDLE_IDENTIFIER = com.intelligence.galaxy;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
......@@ -7614,7 +7614,7 @@
CODE_SIGN_ENTITLEMENTS = galaxy/galaxy.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 18;
CURRENT_PROJECT_VERSION = 3;
DEVELOPMENT_TEAM = RXHYW88XR7;
ENABLE_USER_SCRIPT_SANDBOXING = NO;
FRAMEWORK_SEARCH_PATHS = (
......@@ -7640,7 +7640,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0.6;
MARKETING_VERSION = 2.0.0;
PRODUCT_BUNDLE_IDENTIFIER = com.intelligence.galaxy;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
......
......@@ -261,19 +261,6 @@ extension YHAIMainChatViewController: UITableViewDelegate, UITableViewDataSource
if msgType == .text {
let cell = tableView.dequeueReusableCell(withIdentifier: YHAITextMessageCell.cellReuseIdentifier, for: indexPath) as! YHAITextMessageCell
cell.message = msg
cell.messageClick = {
[weak self] text in
guard let self = self else { return }
self.bottomInputView.showKeyBoard(false)
if self.isNeedStopResonse() {
self.stopAutoResponse { success in
self.sendMessage(text)
}
} else {
self.sendMessage(text)
}
}
return cell
} else if msgType == .recommendText {
......@@ -379,17 +366,41 @@ extension YHAIMainChatViewController: UITableViewDelegate, UITableViewDataSource
return height
}
if msgType == .recommendText { // 推荐文字消息
let label = UILabel()
label.textAlignment = .left
label.font = UIFont.PFSC_M(ofSize:12)
label.numberOfLines = 0
label.text = message.body.contentText
let maxWidth = KScreenWidth-20*2-16*2 // 最大宽度限制
let size = label.sizeThatFits(CGSize(width: maxWidth, height: .greatestFiniteMagnitude))
var textHeight = ceil(size.height)
return textHeight+10.0*3.0
}
if msgType != .text {
return UITableView.automaticDimension
}
let text = message.body.contentText // 要显示的文本内容
let font = UIFont.PFSC_R(ofSize: 14) // 字体大小
let maxWidth = KScreenWidth-20*2-16*2 // 最大宽度限制
// 以下是文字消息计算高度
let label = UILabel()
label.textAlignment = .left
label.font = UIFont.PFSC_R(ofSize:14)
label.numberOfLines = 0
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.lineSpacing = 4.0
let attributes = [NSAttributedString.Key.font : font] as [NSAttributedString.Key : Any]
let size = (text as NSString).boundingRect(with: CGSize(width: maxWidth, height: .greatestFiniteMagnitude), options: .usesLineFragmentOrigin, attributes: attributes, context: nil).size
let attributedText = NSAttributedString(
string: message.body.contentText,
attributes: [NSAttributedString.Key.paragraphStyle: paragraphStyle,
NSAttributedString.Key.font: UIFont.PFSC_R(ofSize:14)]
)
label.attributedText = attributedText
let maxWidth = message.isSelf ? KScreenWidth-58-20-16*2 : KScreenWidth-20*2-16*2 // 最大宽度限制
let size = label.sizeThatFits(CGSize(width: maxWidth, height: .greatestFiniteMagnitude))
var textHeight = ceil(size.height)
if textHeight < 20.0 {
textHeight = 20.0
......
......@@ -246,43 +246,12 @@ class YHAIRequestManager: NSObject {
}
if receiveMessage.isUserfulMessage() {
if receiveMessage.body.isDone() || receiveMessage.isMessageCompleted() {
if receiveMessage.body.isDone() {
completion?(nil, sessionDone)
} else {
completion?(receiveMessage, sessionDone)
}
}
//
// if receiveMessage.isUserfulMessage() {
// if receiveMessage.body.isDone() || receiveMessage.isMessageCompleted() {
// completion?(nil, sessionDone)
// return
// }
// if receiveMessage.isNeedSpiceMessage() {
// let text = receiveMessage.body.contentText
// if text.count > 1 {
// let textArray = Array(text)
// for (index, character) in textArray.enumerated() {
// let msg = receiveMessage.copy() as! YHAIChatMessage
// msg.body.contentText = String(character)
// msg.body.status = ""
// if index == textArray.count-1 {
// msg.body.status = receiveMessage.body.status
// }
// msg.updateBodyToData()
// printLog("AAAAA- \(msg)")
// sessionDone = receiveMessage.body.isDone()
// completion?(msg, sessionDone)
// }
//
// } else {
// completion?(receiveMessage, sessionDone)
// }
//
// } else {
// completion?(receiveMessage, sessionDone)
// }
// }
}
} // arr 结束
}
......
......@@ -67,6 +67,7 @@ class YHAIRobotChatViewController: YHBaseViewController {
lazy var cleanBtn: UIButton = {
let btn = UIButton()
btn.frame = CGRectMake(KScreenWidth-24-20, k_Height_statusBar()+k_Height_NavContentBar/2.0-12, 24, 24)
btn.setImage(UIImage(named: "msg_clean"), for: .normal)
btn.YH_clickEdgeInsets = UIEdgeInsets(top: 20, left: 20, bottom: 20, right: 20)
btn.addTarget(self, action: #selector(didCleanButtonClicked), for: .touchUpInside)
......@@ -80,8 +81,11 @@ class YHAIRobotChatViewController: YHBaseViewController {
lazy var bannerView: YHAIChatBannerView = {
let view = YHAIChatBannerView(frame: CGRectMake(0, 0, KScreenWidth, 360))
let bgImgHeight = 242.0/335.0 * (KScreenWidth-40.0)
let height = 360.0-242.0+bgImgHeight
let view = YHAIChatBannerView(frame: CGRectMake(0, 0, KScreenWidth, height))
view.bgImgV.image = getBannerBg()
view.bgCardView.backgroundColor = getBannerBgColor()
view.titleLabel.text = getHeaderTitle()
view.descLabel.text = getHeaderDesc()
view.bannerArr = self.getBannerForRobotType(robotType)
......@@ -129,25 +133,21 @@ class YHAIRobotChatViewController: YHBaseViewController {
gk_navTitle = myTitle
gk_navTitleColor = .mainTextColor
gk_navigationBar.addSubview(cleanBtn)
self.view.addSubview(self.tableView)
self.view.addSubview(self.bottomInputView)
self.view.addSubview(self.bgImgView)
self.view.insertSubview(bgImgView, belowSubview: gk_navigationBar)
self.gk_navigationItem.rightBarButtonItem = UIBarButtonItem.gk_item(image: UIImage(named: "msg_clean"), target: self, action: #selector(didCleanButtonClicked))
if self.isNeedShowBannerHeader {
self.tableView.tableHeaderView = self.bannerView
} else {
self.tableView.tableHeaderView = nil
}
cleanBtn.snp.makeConstraints { make in
make.width.height.equalTo(24)
make.centerY.equalToSuperview()
make.right.equalToSuperview().offset(-20)
}
bgImgView.snp.makeConstraints { make in
make.edges.equalToSuperview()
}
......@@ -328,6 +328,17 @@ class YHAIRobotChatViewController: YHBaseViewController {
return UIImage(named: "ai_chat_header_bg_0")
}
func getBannerBgColor() -> UIColor {
if robotType == YHAIRobotType.education.rawValue {
return .init(hex: 0xDAF6FC)
} else if robotType == YHAIRobotType.sale.rawValue {
return .init(hex: 0xE6F4FF)
}
return .init(hex: 0xE6F4FF)
}
func getFlowMessages() -> [String] {
if robotType == YHAIRobotType.education.rawValue {
......@@ -401,11 +412,6 @@ extension YHAIRobotChatViewController: UITableViewDelegate, UITableViewDataSourc
if msgType == .text {
let cell = tableView.dequeueReusableCell(withIdentifier: YHAITextMessageCell.cellReuseIdentifier, for: indexPath) as! YHAITextMessageCell
cell.message = msg
cell.messageClick = {
[weak self] text in
guard let self = self else { return }
}
return cell
} else if msgType == .recommendText {
......@@ -510,17 +516,41 @@ extension YHAIRobotChatViewController: UITableViewDelegate, UITableViewDataSourc
return height
}
if msgType == .recommendText { // 推荐文字消息
let label = UILabel()
label.textAlignment = .left
label.font = UIFont.PFSC_M(ofSize:12)
label.numberOfLines = 0
label.text = message.body.contentText
let maxWidth = KScreenWidth-20*2-16*2 // 最大宽度限制
let size = label.sizeThatFits(CGSize(width: maxWidth, height: .greatestFiniteMagnitude))
var textHeight = ceil(size.height)
return textHeight+10.0*3.0
}
if msgType != .text {
return UITableView.automaticDimension
}
let text = message.body.contentText // 要显示的文本内容
let font = UIFont.PFSC_R(ofSize: 14) // 字体大小
let maxWidth = KScreenWidth-20*2-16*2 // 最大宽度限制
// 以下是文字消息计算高度
let label = UILabel()
label.textAlignment = .left
label.font = UIFont.PFSC_R(ofSize:14)
label.numberOfLines = 0
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.lineSpacing = 4.0
let attributes = [NSAttributedString.Key.font : font] as [NSAttributedString.Key : Any]
let size = (text as NSString).boundingRect(with: CGSize(width: maxWidth, height: .greatestFiniteMagnitude), options: .usesLineFragmentOrigin, attributes: attributes, context: nil).size
let attributedText = NSAttributedString(
string: message.body.contentText,
attributes: [NSAttributedString.Key.paragraphStyle: paragraphStyle,
NSAttributedString.Key.font: UIFont.PFSC_R(ofSize:14)]
)
label.attributedText = attributedText
let maxWidth = message.isSelf ? KScreenWidth-58-20-16*2 : KScreenWidth-20*2-16*2 // 最大宽度限制
let size = label.sizeThatFits(CGSize(width: maxWidth, height: .greatestFiniteMagnitude))
var textHeight = ceil(size.height)
if textHeight < 20.0 {
textHeight = 20.0
......
......@@ -33,6 +33,7 @@ class YHAIServiceListViewController: YHBaseViewController {
collectView.dataSource = self
collectView.register(YHAIProductCell.self, forCellWithReuseIdentifier: YHAIProductCell.cellReuseIdentifier)
collectView.register(YHAIGreetCollectionReusableView.self, forSupplementaryViewOfKind: UICollectionView.elementKindSectionHeader, withReuseIdentifier: YHAIGreetCollectionReusableView.reuseIdentifier)
collectView.register(UICollectionReusableView.self, forSupplementaryViewOfKind: UICollectionView.elementKindSectionFooter, withReuseIdentifier: "UICollectionReusableView")
collectView.contentInset = .zero
collectView.showsVerticalScrollIndicator = false
return collectView
......@@ -208,13 +209,20 @@ extension YHAIServiceListViewController: UICollectionViewDelegate, UICollectionV
return headerView
}
return UICollectionReusableView(frame: CGRectMake(0, 0, KScreenWidth, 42.0))
let footerView: UICollectionReusableView = collectionView.dequeueReusableSupplementaryView(ofKind: UICollectionView.elementKindSectionFooter, withReuseIdentifier: "UICollectionReusableView", for: indexPath)
return footerView
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection:Int) -> CGSize {
return CGSize(width: KScreenWidth, height: 177)
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForFooterInSection:Int) -> CGSize {
return CGSize(width: KScreenWidth, height: 42.0)
}
}
extension YHAIServiceListViewController: JXSegmentedListContainerViewListDelegate {
......
......@@ -133,6 +133,8 @@ class YHAICardItemView: UIView {
@objc func didItemViewClicked() {
UIApplication.shared.yhKeyWindow()?.endEditing(true)
YHAIJumpPageTool.jumpPageWithType(mode: cardModel.redirectMode, path: cardModel.redirectPath) {
dict in
self.evaluationResultCallback?(dict)
......
......@@ -62,6 +62,13 @@ class YHAIChatBannerView: UIView {
return imagV
}()
lazy var bgCardView: UIView = {
let v = UIView()
v.layer.cornerRadius = 12.0
v.clipsToBounds = true
return v
}()
var bannerArr: [YHAIChatBannerItem] = [] {
didSet {
// 设置为0是先停掉自动滑动定时器
......@@ -88,8 +95,6 @@ class YHAIChatBannerView: UIView {
view.automaticSlidingInterval = bannerSildingInterval
view.register(YHAIChatBannerItemCell.self, forCellWithReuseIdentifier: YHAIChatBannerItemCell.cellReuseIdentifier)
view.itemSize = CGSizeMake(KScreenWidth-40.0, YHAIChatBannerView.bannersHeight)//FSPagerView.automaticSize
view.layer.cornerRadius = 4.0
view.clipsToBounds = true
return view
}()
......@@ -98,6 +103,7 @@ class YHAIChatBannerView: UIView {
view.normalColor = .init(hex: 0xD5DAE1)
view.selectedColor = .brandMainColor
view.layer.cornerRadius = 1.0
view.clipsToBounds = true
return view
}()
......@@ -137,26 +143,33 @@ class YHAIChatBannerView: UIView {
func createUI() {
addSubview(shadowView)
addSubview(bgCardView)
addSubview(bgImgV)
bgImgV.addSubview(titleLabel)
bgImgV.addSubview(descLabel)
bgImgV.addSubview(bannerView)
bannerView.addSubview(indicatorView)
bgImgV.addSubview(indicatorView)
shadowView.snp.makeConstraints { make in
make.edges.equalTo(bgCardView)
}
let bgImgHeight = 242.0/335.0 * (KScreenWidth-40.0)
bgCardView.snp.makeConstraints { make in
make.left.right.bottom.equalTo(bgImgV)
make.top.equalTo(bgImgV.snp.top).offset(33)
make.top.equalTo(33.0/242.0 * bgImgHeight)
}
bgImgV.snp.makeConstraints { make in
make.top.equalTo(0)
make.left.equalTo(20)
make.right.equalTo(-20)
make.height.equalTo(242)
make.height.equalTo(bgImgHeight)
}
titleLabel.snp.makeConstraints { make in
make.top.equalTo(57)
make.top.equalTo(bgCardView).offset(24.0)
make.left.equalTo(20)
make.height.equalTo(20)
}
......@@ -171,7 +184,7 @@ class YHAIChatBannerView: UIView {
make.bottom.equalTo(bgImgV)
make.left.equalTo(0)
make.right.equalTo(0)
make.height.equalTo(YHAIChatBannerView.bannersHeight)
make.height.equalTo(YHAIChatBannerView.bannersHeight/242.0 * bgImgHeight)
}
indicatorView.snp.makeConstraints { make in
......@@ -186,7 +199,7 @@ class YHAIChatBannerView: UIView {
make.left.equalTo(0)
make.right.equalTo(0)
make.height.equalTo(33.0*2+10.0 + 10.0*2.0)
make.top.equalTo(bannerView.snp.bottom).offset(6)
make.top.equalTo(bgImgV.snp.bottom).offset(6)
make.bottom.equalTo(-6)
}
}
......
......@@ -26,9 +26,10 @@ class YHAIChatInputShadowView: UIView {
let shadowPath = UIBezierPath(roundedRect: bounds, cornerRadius: 12)
layer.shadowPath = shadowPath.cgPath
layer.shadowColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.12).cgColor
layer.shadowColor = UIColor(red: 0.35, green: 0.432, blue: 0.556, alpha: 0.12).cgColor
layer.shadowOpacity = 1
layer.shadowRadius = 6
layer.shadowRadius = 20
layer.shadowOffset = CGSize(width: 0, height: 0)
}
......
......@@ -25,7 +25,7 @@ class YHAIChatShadowView: UIView {
let shadowPath = UIBezierPath(roundedRect: bounds, cornerRadius: 6)
// 设置阴影属性
layer.shadowPath = shadowPath.cgPath
layer.shadowColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.06).cgColor
layer.shadowColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.08).cgColor
layer.shadowOpacity = 1
layer.shadowRadius = 6.0
layer.shadowOffset = CGSize(width: 0, height: 4)
......
......@@ -8,6 +8,8 @@
import UIKit
import SDWebImage
import Photos
import PhotosUI
class YHAIPictureMessageCell: UITableViewCell {
......@@ -68,16 +70,6 @@ class YHAIPictureMessageCell: UITableViewCell {
ratio = img.size.width/img.size.height
}
imgH = imgW/ratio
// if imgH > 476 {
// imgH = 476
// imgW = imgH*ratio
//
// } else {
// imgW = 220
// imgH = imgW/ratio
// }
return CGSizeMake(imgW, imgH)
}
......@@ -86,10 +78,17 @@ class YHAIPictureMessageCell: UITableViewCell {
return v
}()
lazy var downloadBtn: UIButton = {
let btn = UIButton()
btn.setImage(UIImage(named: "ai_chat_img_download"), for: .normal)
btn.addTarget(self, action: #selector(didDownloadBtnClicked), for: .touchUpInside)
btn.layer.cornerRadius = 6.0
btn.YH_clickEdgeInsets = UIEdgeInsets(top: 16, left: 16, bottom: 16, right: 16)
return btn
}()
lazy var whiteContentView: UIView = {
let v = UIView()
v.layer.cornerRadius = 12.0
v.clipsToBounds = true
let tap = UITapGestureRecognizer(target: self, action: #selector(didMessageClicked))
v.addGestureRecognizer(tap)
return v
......@@ -100,13 +99,6 @@ class YHAIPictureMessageCell: UITableViewCell {
return v
}()
lazy var rightAngleView: UIView = {
let v = UIView()
v.backgroundColor = .white
v.isHidden = true
return v
}()
required init?(coder: NSCoder) {
super.init(coder: coder)
}
......@@ -116,15 +108,20 @@ class YHAIPictureMessageCell: UITableViewCell {
setupUI()
}
override func layoutSubviews() {
super.layoutSubviews()
roundCorners(keepTopLeft: true)
}
func setupUI() {
selectionStyle = .none
contentView.backgroundColor = .clear
backgroundColor = .clear
contentView.addSubview(shadowView)
contentView.addSubview(rightAngleView)
contentView.addSubview(whiteContentView)
whiteContentView.addSubview(imgView)
whiteContentView.addSubview(downloadBtn)
whiteContentView.snp.makeConstraints { make in
make.left.equalTo(20)
......@@ -138,19 +135,117 @@ class YHAIPictureMessageCell: UITableViewCell {
make.edges.equalToSuperview()
}
shadowView.snp.makeConstraints { make in
make.edges.equalTo(whiteContentView)
downloadBtn.snp.makeConstraints { make in
make.width.equalTo(26)
make.height.equalTo(26)
make.left.equalTo(16)
make.bottom.equalTo(-16)
}
rightAngleView.snp.makeConstraints { make in
make.top.left.equalTo(whiteContentView)
make.width.height.equalTo(15)
shadowView.snp.makeConstraints { make in
make.left.equalTo(whiteContentView).offset(-0)
make.right.equalTo(whiteContentView).offset(0)
make.top.equalTo(whiteContentView).offset(-0)
make.bottom.equalTo(whiteContentView).offset(0)
}
}
@objc func didMessageClicked() {
self.endEditing(true)
UIApplication.shared.yhKeyWindow()?.endEditing(true)
YHPictureReviewManager.shared.showNetWorkPicturs(curIndex: 0, arrPicturs: [imgInfo.imageUrl])
}
@objc func didDownloadBtnClicked() {
if imgInfo.imageType == YHAIImageType.url.rawValue {
// 尝试从缓存中获取图片
let cachedImage = SDImageCache.shared.imageFromCache(forKey: imgInfo.imageUrl)
downloadImage(cachedImage, urlString: imgInfo.imageDownloadUrl)
} else if imgInfo.imageType == YHAIImageType.local.rawValue {
let img = UIImage(named: imgInfo.localImageName)
downloadImage(img, urlString: imgInfo.imageDownloadUrl)
}
}
func downloadImage(_ img: UIImage?, urlString: String) {
if let img = img {
saveImage(img)
return
}
guard let url = URL(string: urlString) else {
YHHUD.flash(message: "保存失败")
return
}
let task = URLSession.shared.dataTask(with: url) {
[weak self] data, response, error in
DispatchQueue.main.async {
guard let self = self else { return }
guard let data = data else {
YHHUD.flash(message: "保存失败")
return
}
let image = UIImage(data: data)
if let image = image {
self.saveImage(image)
}
}
}
task.resume()
}
func saveImage(_ image: UIImage) {
// 确保应用有权访问相册
PHPhotoLibrary.requestAuthorization { status in
if status == .authorized {
// 保存图片到相册
DispatchQueue.main.async {
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)
YHHUD.flash(message: "保存成功")
}
} else {
DispatchQueue.main.async {
YHHUD.flash(message: "保存失败,请检查系统权限")
}
}
}
}
func roundCorners(keepTopLeft: Bool) {
let path = UIBezierPath()
let radius: CGFloat = 6.0 // 圆角半径
// 设置路径
path.move(to: CGPoint(x: keepTopLeft ? 0 : radius, y: 0)) // 从左上角开始,视情况决定是否切圆角
// 左上角
if keepTopLeft {
path.addLine(to: CGPoint(x: 0, y: 0)) // 不切左上角
} else {
path.addArc(withCenter: CGPoint(x: radius, y: radius), radius: radius, startAngle: .pi, endAngle: .pi * 1.5, clockwise: true)
}
// 右上角
path.addLine(to: CGPoint(x: self.bounds.width, y: 0))
path.addArc(withCenter: CGPoint(x: self.bounds.width - radius, y: radius), radius: radius, startAngle: .pi * 1.5, endAngle: 0, clockwise: true)
// 右下角
path.addLine(to: CGPoint(x: self.bounds.width, y: self.bounds.height))
path.addArc(withCenter: CGPoint(x: self.bounds.width - radius, y: self.bounds.height - radius), radius: radius, startAngle: 0, endAngle: .pi / 2, clockwise: true)
// 左下角
path.addLine(to: CGPoint(x: 0, y: self.bounds.height))
path.addArc(withCenter: CGPoint(x: radius, y: self.bounds.height - radius), radius: radius, startAngle: .pi / 2, endAngle: .pi, clockwise: true)
path.close() // 关闭路径
// 创建 CAShapeLayer
let maskLayer = CAShapeLayer()
maskLayer.path = path.cgPath
self.whiteContentView.layer.mask = maskLayer // 设置 UIView 的 mask
}
}
......@@ -181,7 +181,7 @@ class YHAITextInputView: UIView {
}
textView.snp.makeConstraints { make in
make.left.equalTo(5)
make.left.equalTo(16)
make.top.equalTo(11-YHAutoTextView.verticalGap)
make.bottom.equalTo(-(11-YHAutoTextView.verticalGap))
make.right.equalTo(sendBtn.snp.left).offset(-5)
......
......@@ -18,17 +18,24 @@ class YHAITextMessageCell: UITableViewCell {
var message: YHAIChatMessage = YHAIChatMessage() {
didSet {
messageLabel.text = message.body.contentText
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.lineSpacing = 4.0
let textColor: UIColor = message.isSelf ? .white : .mainTextColor
let attributedText = NSAttributedString(
string: message.body.contentText,
attributes: [NSAttributedString.Key.paragraphStyle: paragraphStyle,
NSAttributedString.Key.foregroundColor: textColor,
NSAttributedString.Key.font: UIFont.PFSC_R(ofSize:14)]
)
messageLabel.attributedText = attributedText
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.left.greaterThanOrEqualTo(58)
make.right.equalTo(-20)
make.top.equalTo(16)
make.bottom.equalTo(0)
......@@ -45,18 +52,10 @@ class YHAITextMessageCell: UITableViewCell {
} else {
messageLabel.text = message.body.contentText
whiteContentView.backgroundColor = .white
messageLabel.textColor = .mainTextColor
whiteContentView.snp.remakeConstraints { make in
make.left.equalTo(20)
if message.getType() == .recommendText {
make.right.lessThanOrEqualTo(-20)
} else {
make.right.equalTo(-20)
}
make.top.equalTo(16)
make.bottom.equalTo(0)
}
......@@ -167,7 +166,7 @@ class YHAITextMessageCell: UITableViewCell {
make.height.equalTo(37)
make.width.equalTo(82)
}
copyBtn.iconInLeft(spacing: 0.0)
copyBtn.iconInLeft(spacing: 2.0)
return v
......@@ -261,9 +260,6 @@ class YHAITextMessageCell: UITableViewCell {
@objc func didMessageClicked() {
UIApplication.shared.yhKeyWindow()?.endEditing(true)
if message.getType() == .recommendText {
let text = message.getText()
messageClick?(text)
}
messageClick?(self.message.body.contentText)
}
}
......@@ -194,6 +194,8 @@ class YHCardMessageCell: UITableViewCell {
@objc func didBottomButtonClicked() {
UIApplication.shared.yhKeyWindow()?.endEditing(true)
var type = YHAIJumpType.common
if cardListModel.isEvaluation() {
type = YHAIJumpType.evaluation
......
......@@ -91,6 +91,9 @@ class YHProductItemView: UIView {
}
@objc func didClickProductItem() {
UIApplication.shared.yhKeyWindow()?.endEditing(true)
YHAIJumpPageTool.jumpPageWithType(mode: productModel.redirectMode, path: productModel.redirectPath) {
dict in
}
......
......@@ -112,6 +112,7 @@ class YHProductListMessageCell: UITableViewCell {
@objc func didMoreButtonClicked() {
UIApplication.shared.yhKeyWindow()?.endEditing(true)
YHAIJumpPageTool.jumpPageWithType(mode: listModel.redirectMode, path: listModel.redirectPath) {
dict in
}
......
......@@ -85,24 +85,22 @@ class YHRecommendTextMessageCell: UITableViewCell {
whiteContentView.snp.makeConstraints { make in
make.left.equalTo(20)
make.right.lessThanOrEqualTo(-20)
make.top.equalTo(16)
make.top.equalTo(10)
make.bottom.equalTo(0)
}
messageLabel.snp.makeConstraints { make in
make.left.equalTo(16)
make.right.equalTo(-16)
make.top.equalTo(16)
make.bottom.equalTo(-16)
make.top.equalTo(10)
make.bottom.equalTo(-10)
}
}
@objc func didMessageClicked() {
UIApplication.shared.yhKeyWindow()?.endEditing(true)
if message.getType() == .recommendText {
let text = message.getText()
messageClick?(text)
}
}
}
......@@ -275,9 +275,14 @@ class YHLivePlayerViewController: YHBasePlayerViewController {
playbackInfo?.title = liveDetail.live_title
playbackInfo?.uid = UInt(liveDetail.user_id)
messageListView.anchorName = liveDetail.hxNickname
let isOnLive = liveDetail.getLiveState() == .onLive || liveDetail.getLiveState() == .stop
if needJoinLiveChannel {
if !liveDetail.rtmp_channel.isEmpty, !liveDetail.token.isEmpty, let uid = playbackInfo?.uid, let player = player, !player.isJoined {
if !liveDetail.rtmp_channel.isEmpty, !liveDetail.token.isEmpty, let uid = playbackInfo?.uid, let player = player, isOnLive {
YHPlayerManager.shared.joinChannel(for: player, token: liveDetail.token, channelId: liveDetail.rtmp_channel, uid: uid, view: playerView, defaultMuted: false)
} else if !isOnLive {
if let player = player {
YHPlayerManager.shared.leaveChannel(for: player)
}
}
}
// 如果没有预设roomId,使用接口返回的roomId
......@@ -601,21 +606,20 @@ class YHLivePlayerViewController: YHBasePlayerViewController {
case .liveStart:
self.handleLiveDetailSuccess(liveDetail, needJoinIMRoom: false, needJoinLiveChannel: true)
case .liveEnd:
self.handleLiveDetailSuccess(liveDetail, needJoinIMRoom: false, needJoinLiveChannel: false)
self.handleLiveDetailSuccess(liveDetail, needJoinIMRoom: false, needJoinLiveChannel: true)
case .livePause:
self.handleLiveDetailSuccess(liveDetail, needJoinIMRoom: false, needJoinLiveChannel: false)
case .liveResume:
self.handleLiveDetailSuccess(liveDetail, needJoinIMRoom: false, needJoinLiveChannel: false)
self.handleLiveDetailSuccess(liveDetail, needJoinIMRoom: false, needJoinLiveChannel: true)
case .liveGoodsRefresh:
self.handleLiveDetailSuccess(liveDetail, needJoinIMRoom: false, needJoinLiveChannel: false)
self.goodsListView?.dataSource = liveDetail.goods
}
} else {
printLog("YHLivePlayerViewController: 请求失败")
if let errorMsg = error?.errorMsg, !errorMsg.isEmpty {
YHHUD.flash(message: errorMsg)
}
return
// if let errorMsg = error?.errorMsg, !errorMsg.isEmpty {
// YHHUD.flash(message: errorMsg)
// }
}
}
}
......
......@@ -9,6 +9,7 @@
import UIKit
enum YHLiveState: Int {
case unknown = -1
case start = 0
case stop = 1
case end = 2
......@@ -122,7 +123,7 @@ class YHLiveStateViewController: YHBaseViewController {
view.addSubview(logImageView)
logImageView.snp.makeConstraints { make in
make.centerX.equalToSuperview()
make.top.equalTo(196)
make.top.equalTo(240)
make.width.height.equalTo(78)
}
......@@ -229,7 +230,7 @@ class YHLiveStateViewController: YHBaseViewController {
loginSubTitleLabel.text = "直播已结束"
messageLabel.text = "直播已结束,去首页逛逛吧~"
getCodeButton.isHidden = false
case .onLive:
case .onLive, .unknown:
break
}
}
......
......@@ -48,7 +48,7 @@ class YHLiveDetailModel: SmartCodable {
func getLiveState() -> YHLiveState {
switch status {
case 0:
return .onLive
return .unknown
case 1:
if stream_status == 3 {
return .stop
......@@ -59,7 +59,7 @@ class YHLiveDetailModel: SmartCodable {
case 3:
return .end
default:
return .onLive
return .unknown
}
}
......
......@@ -39,7 +39,6 @@ class YHLiveShopView: UIView {
override init(frame: CGRect) {
super.init(frame: frame)
//backgroundColor = UIColor(white: 0.5, alpha: 0.1)
let tap = UITapGestureRecognizer(target: self, action: #selector(handleTap))
tap.delegate = self
addGestureRecognizer(tap)
......@@ -51,7 +50,6 @@ class YHLiveShopView: UIView {
}
func setView() {
backgroundColor = UIColor(hex: 0x0000, alpha: 0.5)
centerView = {
let view = UIView()
view.backgroundColor = .white
......@@ -61,7 +59,6 @@ class YHLiveShopView: UIView {
centerView.snp.makeConstraints { make in
make.top.equalToSuperview().offset(295)
make.left.right.bottom.equalToSuperview()
// make.height.equalTo(518)
}
let headImageView = {
......@@ -150,10 +147,13 @@ class YHLiveShopView: UIView {
}
static func show(callBack: @escaping ((Int) -> Void)) -> YHLiveShopView {
let view = YHLiveShopView(frame: CGRect(x: 0, y: 0, width: KScreenWidth, height: KScreenHeight))
let view = YHLiveShopView(frame: CGRect(x: 0, y: KScreenWidth, width: KScreenWidth, height: KScreenHeight))
view.backData = callBack
let window = UIApplication.shared.yhKeyWindow()
window?.addSubview(view)
UIView.animate(withDuration: 0.25, delay: 0, options: .curveEaseOut) {
view.frame.origin.y = 0
} completion: { _ in }
return view
}
......
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "Group 2033196882@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "Group 2033196882@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
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