Files
yingmeng-ios-switf/yinmeng-ios/Modules/Chat/View/ChatList/ChatListCell.swift
2024-03-01 14:22:06 +08:00

226 lines
6.6 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// ChatListCell.swift
// yinmeng-ios
//
// Created by MaiMang on 2024/2/29.
//
import UIKit
import Reusable
import NIMSDK
import Kingfisher
func showTime(msglastTime: TimeInterval, showDetail: Bool) -> String {
//
let nowDate = Date()
let msgDate = Date(timeIntervalSince1970: msglastTime)
var result: String?
let components: Set<Calendar.Component> = [.year, .month, .day, .weekday, .hour, .minute]
let calendar = Calendar.current
let nowDateComponents = calendar.dateComponents(components, from: nowDate)
let msgDateComponents = calendar.dateComponents(components, from: msgDate)
var hour = msgDateComponents.hour ?? 0
let oneDayTimeIntervalValue: TimeInterval = 24 * 60 * 60 //
result = getPeriodOfTime(hour: hour, minute: msgDateComponents.minute ?? 0)
if hour > 12 {
hour -= 12
}
let isSameMonth = (nowDateComponents.year == msgDateComponents.year) && (nowDateComponents.month == msgDateComponents.month)
if isSameMonth && (nowDateComponents.day == msgDateComponents.day) { //
result = "\(result ?? "") \(hour):\(String(format: "%02d", msgDateComponents.minute ?? 0))"
} else if isSameMonth && (nowDateComponents.day == (msgDateComponents.day! + 1)) { //
result = showDetail ? "昨天\(result ?? "") \(hour):\(String(format: "%02d", msgDateComponents.minute ?? 0))" : "昨天"
} else if isSameMonth && (nowDateComponents.day == (msgDateComponents.day! + 2)) { //
result = showDetail ? "前天\(result ?? "") \(hour):\(String(format: "%02d", msgDateComponents.minute ?? 0))" : "前天"
} else if nowDate.timeIntervalSince(msgDate) < 7 * oneDayTimeIntervalValue { //
let weekDay = weekdayStr(msgDateComponents.weekday ?? 1)
result = showDetail ? "\(weekDay)\(result ?? "") \(hour):\(String(format: "%02d", msgDateComponents.minute ?? 0))" : weekDay
} else { //
let day = "\(msgDateComponents.year ?? 0)-\(msgDateComponents.month ?? 0)-\(msgDateComponents.day ?? 0)"
result = showDetail ? "\(day)\(result ?? "") \(hour):\(String(format: "%02d", msgDateComponents.minute ?? 0))" : day
}
return result ?? ""
}
func getPeriodOfTime(hour: Int, minute: Int) -> String {
var periodOfTime = ""
if hour >= 0 && hour < 6 {
periodOfTime = "凌晨"
} else if hour >= 6 && hour < 12 {
periodOfTime = "上午"
} else if hour == 12 {
periodOfTime = "中午"
} else if hour > 12 && hour < 18 {
periodOfTime = "下午"
} else if hour >= 18 && hour <= 23 {
periodOfTime = "晚上"
}
return periodOfTime
}
func weekdayStr(_ weekday: Int) -> String {
switch weekday {
case 1:
return "星期日"
case 2:
return "星期一"
case 3:
return "星期二"
case 4:
return "星期三"
case 5:
return "星期四"
case 6:
return "星期五"
case 7:
return "星期六"
default:
return ""
}
}
class ChatListCell: UITableViewCell, Reusable {
var rescent:NIMRecentSession? {
didSet {
if let sessionId = rescent?.session?.sessionId {
NIMSDK.shared().userManager.fetchUserInfos([sessionId]) { users, error in
if error == nil {
let user = users?[safe:0]
if let url = user?.userInfo?.avatarUrl {
self.avatarImgView.kf.setImage(with: URL(string: url),
placeholder: UIImage(named: "public_avatar"))
}
self.nameLb.text = user?.userInfo?.nickName
}
}
textLb.text = rescent?.lastMessage?.text ?? "消息"
if let count = rescent?.unreadCount, count > 0 {
badgeLb.text = "\(count)"
badgeLb.isHidden = false
} else {
badgeLb.isHidden = true
}
if let message = rescent?.lastMessage {
self.dateLb.isHidden = false
self.dateLb.text = showTime(msglastTime: rescent?.lastMessage?.timestamp ?? 0, showDetail: false)
} else {
self.dateLb.isHidden = true
}
}
}
}
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
selectionStyle = .none
backgroundColor = .clear
contentView.addSubview(backView)
backView.addSubview(avatarImgView)
backView.addSubview(textLb)
backView.addSubview(nameLb)
backView.addSubview(dateLb)
backView.addSubview(badgeLb)
backView.snp.makeConstraints { make in
make.left.right.equalToSuperview().inset(16)
make.top.equalToSuperview().offset(10)
make.bottom.equalToSuperview()
}
avatarImgView.snp.makeConstraints { make in
make.size.equalTo(CGSize(width: 60, height: 60))
make.centerY.equalToSuperview()
make.left.equalToSuperview().offset(8)
}
nameLb.snp.makeConstraints { make in
make.left.equalTo(avatarImgView.snp.right).offset(12)
make.bottom.equalTo(avatarImgView.snp.centerY).offset(-4)
make.right.lessThanOrEqualTo(backView).offset(-20)
}
textLb.snp.makeConstraints { make in
make.left.equalTo(nameLb)
make.top.equalTo(avatarImgView.snp.centerY).offset(4)
make.right.lessThanOrEqualTo(backView).offset(-20)
}
dateLb.snp.makeConstraints { make in
make.centerY.equalTo(nameLb)
make.right.equalToSuperview().offset(-8)
}
badgeLb.snp.makeConstraints { make in
make.right.equalTo(dateLb)
make.centerY.equalTo(textLb)
make.size.equalTo(CGSize(width: 18, height: 18))
}
}
private lazy var backView: UIView = {
let view = UIView()
view.backgroundColor = ThemeColor(hexStr: "#525566")
view.layer.masksToBounds = true
view.addCorner(cornerRadii: UIView.CornerRadii.init(topLeft: 36, topRight: 10, bottomLeft: 36, bottomRight: 10), frame: CGRectMake(0, 0, ScreenWidth - 32, 72))
return view
}()
private lazy var avatarImgView: UIImageView = {
let imageView = UIImageView()
imageView.isUserInteractionEnabled = true
imageView.layer.masksToBounds = true
imageView.contentMode = .scaleAspectFill
imageView.layer.cornerRadius = 30
return imageView
}()
private lazy var textLb: UILabel = {
let label = UILabel()
label.textColor = UIColor(white: 1, alpha: 0.8)
label.font = UIFont.systemFont(ofSize: 14)
return label
}()
private lazy var nameLb: UILabel = {
let label = UILabel()
label.textColor = .white
label.font = UIFont.systemFont(ofSize: 15, weight: .medium)
return label
}()
private lazy var dateLb: UILabel = {
let label = UILabel()
label.textColor = ThemeColor(hexStr: "#7D8499")
label.font = UIFont.systemFont(ofSize: 12, weight: .light)
return label
}()
private lazy var badgeLb: UILabel = {
let label = UILabel()
label.textColor = .white
label.backgroundColor = .red
label.textAlignment = .center
label.font = UIFont.systemFont(ofSize: 11)
label.layer.cornerRadius = 9
label.layer.masksToBounds = true
return label
}()
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}