增加换肤功能
This commit is contained in:
@@ -0,0 +1,98 @@
|
||||
//
|
||||
// FloatChatMessageView.swift
|
||||
// TUIRoomKit
|
||||
//
|
||||
// Created by CY zhao on 2024/5/10.
|
||||
//
|
||||
|
||||
import SnapKit
|
||||
import UIKit
|
||||
|
||||
class FloatChatMessageView: UIView {
|
||||
private let messageHorizonSpacing: CGFloat = 8
|
||||
private let messageVerticalSpacing: CGFloat = 5
|
||||
init(floatMessage: FloatChatMessage? = nil) {
|
||||
self.floatMessage = floatMessage
|
||||
super.init(frame: .zero)
|
||||
setupUI()
|
||||
}
|
||||
|
||||
required init?(coder: NSCoder) {
|
||||
fatalError("init(coder:) has not been implemented")
|
||||
}
|
||||
|
||||
lazy var messageLabel: UILabel = {
|
||||
let label = UILabel()
|
||||
label.font = UIFont(name: "PingFangSC-Regular", size: 14.0)
|
||||
label.numberOfLines = 0
|
||||
label.text = " "
|
||||
label.textAlignment = .left
|
||||
label.lineBreakMode = .byWordWrapping
|
||||
label.textColor = .white
|
||||
return label
|
||||
}()
|
||||
|
||||
var floatMessage: FloatChatMessage? {
|
||||
didSet {
|
||||
guard let floatMessage = floatMessage else {
|
||||
return
|
||||
}
|
||||
updateMessage(with: floatMessage)
|
||||
}
|
||||
}
|
||||
|
||||
var height: CGFloat {
|
||||
return messageLabel.frame.height + 2 * messageVerticalSpacing
|
||||
}
|
||||
|
||||
func setupUI() {
|
||||
backgroundColor = UIColor.tui_color(withHex: "#22262E", alpha: 0.4)
|
||||
layer.cornerRadius = 13.0
|
||||
constructViewHierarchy()
|
||||
activateConstraints()
|
||||
updateMessage(with: floatMessage)
|
||||
}
|
||||
|
||||
private func constructViewHierarchy() {
|
||||
addSubview(messageLabel)
|
||||
}
|
||||
|
||||
private func activateConstraints() {
|
||||
messageLabel.snp.makeConstraints { make in
|
||||
make.leading.equalToSuperview().offset(messageHorizonSpacing)
|
||||
make.top.equalToSuperview().offset(messageVerticalSpacing)
|
||||
}
|
||||
self.snp.makeConstraints { make in
|
||||
make.width.equalTo(messageLabel).offset(2 * messageHorizonSpacing)
|
||||
make.height.equalTo(messageLabel).offset(2 * messageVerticalSpacing)
|
||||
}
|
||||
}
|
||||
|
||||
private func updateMessage(with message: FloatChatMessage?) {
|
||||
guard let message = message else {
|
||||
messageLabel.attributedText = nil
|
||||
return
|
||||
}
|
||||
messageLabel.attributedText = getAttributedText(from: message)
|
||||
}
|
||||
|
||||
private func getAttributedText(from message: FloatChatMessage) -> NSMutableAttributedString {
|
||||
var userName = message.user.userName.isEmpty ? message.user.userId : message.user.userName
|
||||
userName = userName + ": "
|
||||
let userNameAttributes: [NSAttributedString.Key: Any] = [.font: UIFont.systemFont(ofSize: 12),
|
||||
.foregroundColor: UIColor.tui_color(withHex: "B2BBD1")]
|
||||
let userNameAttributedText = NSMutableAttributedString(string: userName,
|
||||
attributes: userNameAttributes)
|
||||
|
||||
let contentAttributedText: NSMutableAttributedString = getFullContentAttributedText(content: message.content)
|
||||
userNameAttributedText.append(contentAttributedText)
|
||||
return userNameAttributedText
|
||||
}
|
||||
|
||||
private func getFullContentAttributedText(content: String) -> NSMutableAttributedString {
|
||||
return EmotionHelper.shared.obtainImagesAttributedString(byText: content,
|
||||
font: UIFont(name: "PingFangSC-Regular", size: 12) ??
|
||||
UIFont.systemFont(ofSize: 12))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user