Files
yingmeng-ios-switf/yinmeng-ios/Modules/Room/View/RoomTopView/RoomTopView.swift
2024-03-13 18:44:52 +08:00

284 lines
11 KiB
Swift

//
// RoomTopView.swift
// yinmeng-ios
//
// Created by duoban on 2024/3/6.
//
import UIKit
import MarqueeLabel
import FFPopup
import Nuke
typealias DidClickTypeBlcok = (_ type:Int,_ uid:String)->Void
class RoomTopView: UIView {
override init(frame: CGRect) {
super.init(frame: frame)
setUILayout()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
private func setUILayout(){
addSubview(superStackView)
addSubview(settingBnt)
quitView.delegate = self
superStackView.addSubview(avatarView)
superStackView.addSubview(nameStackView)
superStackView.addSubview(colectRoomBtn)
nameStackView.addArrangedSubview(textStackView)
nameStackView.addArrangedSubview(onlineNumStackView)
onlineNumStackView.addArrangedSubview(userIdView)
onlineNumStackView.addArrangedSubview(greenPointView)
onlineNumStackView.addArrangedSubview(onlineNumView)
textStackView.addArrangedSubview(textView)
textStackView.addArrangedSubview(giftIconView)
textStackView.addArrangedSubview(lockIconView)
addSubview(quitView)
superStackView.snp.makeConstraints { make in
make.leading.equalTo(UIDevice.scaleWidth(width: 15))
make.bottom.equalTo(-UIDevice.scaleWidth(width: 5))
make.height.equalTo(UIDevice.scaleWidth(width: 34))
make.width.greaterThanOrEqualTo(10)
make.trailing.equalTo(colectRoomBtn.snp.trailing).offset(UIDevice.scaleWidth(width: 5))
}
settingBnt.snp.makeConstraints { make in
make.trailing.equalTo(-UIDevice.scaleWidth(width: 13))
make.centerY.equalTo(nameStackView)
make.width.height.equalTo(UIDevice.scaleWidth(width: 25))
}
avatarView.snp.makeConstraints { make in
make.leading.top.equalTo(UIDevice.scaleWidth(width: 0))
make.width.height.equalTo(nameStackView.snp.height)
}
nameStackView.snp.makeConstraints { make in
make.leading.equalTo(avatarView.snp.trailing).offset((UIDevice.scaleWidth(width: 5)))
make.bottom.equalTo(0)
make.height.equalTo(UIDevice.scaleWidth(width: 34))
}
colectRoomBtn.snp.makeConstraints { make in
make.leading.equalTo(textStackView.snp.trailing).offset((UIDevice.scaleWidth(width: 5)))
make.height.equalTo(UIDevice.scaleWidth(width: 20))
make.width.equalTo(UIDevice.scaleWidth(width: 40))
make.centerY.equalTo(superStackView)
}
textView.snp.makeConstraints { make in
make.width.lessThanOrEqualTo(UIDevice.scaleWidth(width: 90))
make.height.equalTo(UIDevice.scaleWidth(width: 18))
}
greenPointView.snp.makeConstraints { make in
make.width.height.equalTo(UIDevice.scaleWidth(width: 3))
}
userIdView.snp.makeConstraints { make in
make.height.equalTo(UIDevice.scaleWidth(width: 16))
}
giftIconView.snp.makeConstraints { make in
make.width.height.equalTo(UIDevice.scaleWidth(width: 10))
}
lockIconView.snp.makeConstraints { make in
make.width.height.equalTo(UIDevice.scaleWidth(width: 18))
}
}
//MARK: - bntTarget
var roomData:RoomDataModel? = nil{
didSet{
guard let _roomData = roomData else { return }
userIdView.text = "ID:\(_roomData.erbanNo)"
textView.text = _roomData.title
colectRoomBtn.isSelected = _roomData.isRoomFans
lockIconView.isHidden = _roomData.roomPwd.isEmpty
giftIconView.isHidden = _roomData.hasAnimationEffect
onlineNumView.text = "\(_roomData.onlineNum)"
Nuke.loadImage(with: _roomData.avatar, into: avatarView, completion: nil)
colectRoomBtn.isHidden = true
if !_roomData.isRoomFans,_roomData.uid != "\(AuthManager.userUid)"{
colectRoomBtn.isHidden = false
}
if colectRoomBtn.isHidden{
colectRoomBtn.snp.updateConstraints { make in
make.width.equalTo(UIDevice.scaleWidth(width: 0))
}
}else{
colectRoomBtn.snp.updateConstraints { make in
make.width.equalTo(UIDevice.scaleWidth(width: 40))
}
}
}
}
@objc func colectRoomAction(){
colectRoomBtn.isHidden = true
colectRoomBtn.snp.updateConstraints { make in
make.width.equalTo(0)
}
guard let roomUid = roomData?.uid else { return }
RoomVCViewModel.roomVM.collectRoom(roomUid: roomUid, type:"1" )
}
@objc func settingBntAction(){
let pop = FFPopup.init(contentView: quitView, showType: .slideInFromRight, dismissType: .slideOutToRight, maskType: FFPopup.MaskType.dimmed, dismissOnBackgroundTouch: true, dismissOnContentTouch: false)
pop.show(layout: FFPopupLayout(horizontal: FFPopup.HorizontalLayout.right, vertical: FFPopup.VerticalLayout.center), duration:0)
let params = ["uid":"\(AuthManager.userUid)"] as [String : Any]
RequestGet(path: "home/hotRoom", parma: params) { data in
if let list = Deserialized<RoomQuitModel>.toArray(with: data) {
var getList:[RoomQuitModel] = []
for item in list {
if !item.tagPict.isEmpty{
getList.append(item)
}
}
self.quitView.roomModelList = getList
}
} fail: { code, message in
print(code)
}
}
//MARK: -
var didClickTypeBlcok:DidClickTypeBlcok?
private lazy var quitView:RoomQuitView = {
let _quitView = RoomQuitView(frame: CGRect(x: ScreenWidth, y: 0, width: UIDevice.scaleWidth(width: 250), height: ScreenHeight))
return _quitView
}()
private lazy var settingBnt:UIButton = {
let _settingBtn = UIButton.getCustomBtn(image: UIImage(named: "yin_room_top_right"))
_settingBtn.setBtnClickRadius = UIEdgeInsets(top: 8, left: 8, bottom: 8, right: 8)
_settingBtn.addTarget(self, action: #selector(settingBntAction), for: .touchUpInside)
return _settingBtn
}()
private lazy var colectRoomBtn:UIButton = {
let image = UIImage.image(color: ThemeColor(hexStr: "#FFDA24"))
let _colectRoomBtn = UIButton.getCustomBtn(text: "收藏",selectedText:"已收藏",font: UIFont.getScaleFont(ofSize: 11, weight: .medium),color: .white,bgImage: image)
_colectRoomBtn.layer.cornerRadius = UIDevice.scaleWidth(width: 10)
_colectRoomBtn.layer.masksToBounds = true
_colectRoomBtn.contentEdgeInsets = UIEdgeInsets(top: 0, left: UIDevice.scaleWidth(width: 7), bottom: 0, right: UIDevice.scaleWidth(width: 7))
_colectRoomBtn.addTarget(self, action: #selector(colectRoomAction), for: .touchUpInside)
_colectRoomBtn.isHidden = true
return _colectRoomBtn
}()
private lazy var nameStackView:UIStackView = {
let _nameStackView = UIStackView()
_nameStackView.axis = .vertical
_nameStackView.distribution = .fill
_nameStackView.alignment = .leading
return _nameStackView
}()
private lazy var textStackView:UIStackView = {
let _textStackView = UIStackView()
_textStackView.axis = .horizontal
_textStackView.distribution = .fill
_textStackView.alignment = .center
_textStackView.spacing = UIDevice.scaleWidth(width: 5)
return _textStackView
}()
private lazy var textView:MarqueeLabel = {
let _textView = MarqueeLabel()
_textView.text = ""
_textView.speed = .duration(8)
_textView.fadeLength = UIDevice.scaleWidth(width: 6)
_textView.font = UIFont.getScaleFont(ofSize: 12, weight: .medium)
_textView.textColor = .white
_textView.isUserInteractionEnabled = true
return _textView
}()
private lazy var giftIconView:UIImageView = {
let _giftIconView = UIImageView()
_giftIconView.image = UIImage(named: "yin_room_top_gift_icon")
_giftIconView.isUserInteractionEnabled = true
return _giftIconView
}()
private lazy var lockIconView:UIImageView = {
let _lockIconView = UIImageView()
_lockIconView.image = UIImage(named: "yin_room_top_lock_icon")
_lockIconView.isUserInteractionEnabled = true
_lockIconView.isHidden = true
return _lockIconView
}()
private lazy var onlineNumStackView:UIStackView = {
let _onlineNumStackView = UIStackView()
_onlineNumStackView.axis = .horizontal
_onlineNumStackView.distribution = .fill
_onlineNumStackView.alignment = .center
_onlineNumStackView.spacing = UIDevice.scaleWidth(width: 2)
return _onlineNumStackView
}()
private lazy var greenPointView:UIView = {
let _greenPointView = UIView()
_greenPointView.backgroundColor = ThemeColor(hexStr: "#3EFED7")
_greenPointView.layer.cornerRadius = UIDevice.scaleWidth(width: 3)/2
_greenPointView.layer.masksToBounds = true
return _greenPointView
}()
private lazy var userIdView:UILabel = {
let _userIdView = UILabel.getCustomLabel(text:"",font: UIFont.getScaleFont(ofSize: 10, weight: .regular),color: .white)
return _userIdView
}()
private lazy var onlineNumView:UILabel = {
let _onlineNumView = UILabel.getCustomLabel(text:"0",font: UIFont.getScaleFont(ofSize: 10, weight: .regular),color: .white)
return _onlineNumView
}()
private lazy var avatarView:UIImageView = {
let _avatarView = UIImageView()
_avatarView.isUserInteractionEnabled = true
_avatarView.layer.masksToBounds = true
_avatarView.layer.cornerRadius = UIDevice.scaleWidth(width: 17)
_avatarView.contentMode = .scaleAspectFill
return _avatarView
}()
private lazy var superStackView:UIView = {
let _superStackView = UIView()
_superStackView.backgroundColor = UIColor(white: 1, alpha: 0.1)
_superStackView.layer.cornerRadius = UIDevice.scaleWidth(width: 17)
return _superStackView
}()
}
extension RoomTopView:RoomQuitViewProtocol{
func didChooseRoomWithModel(roomModel: RoomQuitModel?) {
guard let uid = roomModel?.uid else { return }
FFPopup.dismiss(contentView: quitView, animated: false)
if let _didClickTypeBlcok = didClickTypeBlcok{
_didClickTypeBlcok(1,"\(uid)")
}
}
func didClickTypeWithModel(clickModel: RoomQuitItemModel) {
FFPopup.dismiss(contentView: quitView, animated: false)
if clickModel.type == .report{
HUDTool.show(with: "我们已经收到举报, 将尽快处理")
}else{
if let _didClickTypeBlcok = didClickTypeBlcok{
_didClickTypeBlcok(0,"")
}
}
}
}