13 Commits

Author SHA1 Message Date
liyuhua
b87bc8a068 商店包版本修改 此commit置顶 1.0.4 2024-03-28 19:57:15 +08:00
liyuhua
b53b5c8a6a 新增实名及修复bug 2024-03-28 19:56:25 +08:00
liyuhua
f776893134 商店包版本修改 此commit置顶 1.0.3 2024-03-25 12:12:03 +08:00
liyuhua
60dcf38ea2 商店包版本修改 此commit置顶 1.0.3 2024-03-25 11:47:10 +08:00
liyuhua
7e299b9212 商店包版本修改 此commit置顶 1.0.3 2024-03-23 21:08:26 +08:00
liyuhua
cf2eeb9a00 商店包版本修改 此commit置顶 1.0.3 2024-03-23 20:47:19 +08:00
liyuhua
c971ac589e 商店包版本修改 此commit置顶 1.0.3 2024-03-23 18:37:20 +08:00
liyuhua
a65270f974 修复优化bug 2024-03-23 18:21:47 +08:00
liyuhua
43e5f14a83 修复优化bug 2024-03-23 18:21:29 +08:00
liyuhua
2b5a1eb2a5 礼物 2024-03-23 16:28:10 +08:00
liyuhua
aeb26daad6 接入声网 2024-03-22 15:46:25 +08:00
liyuhua
88512c6a48 房间排名和首页搜索房间 2024-03-22 11:54:36 +08:00
liyuhua
6c2c5d586a 房间排名和首页搜索房间 2024-03-22 11:54:23 +08:00
151 changed files with 4819 additions and 392 deletions

View File

@@ -10,6 +10,10 @@ target 'yinmeng-ios' do
pod 'Moya'
pod 'MBProgressHUD'
pod 'SVGAPlayer'
pod 'YYText'
# 滑动标签栏
pod 'JXCategoryView'
pod 'JXPagingView/Pager'
#加载图片
pod 'Kingfisher'
#cell
@@ -32,6 +36,9 @@ target 'yinmeng-ios' do
pod 'FFPopup'
pod 'TXLiteAVSDK_TRTC', '~> 11.4.14530'
pod 'MJExtension'
pod 'QGVAPlayer'
#声网
pod 'AgoraRtcEngine_iOS', '~> 4.2.2'
# Pods for yinmeng-ios
end

View File

@@ -37,7 +37,6 @@
233E515B2B8C849600582F9C /* PlanetStarClickItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 233E515A2B8C849600582F9C /* PlanetStarClickItemView.swift */; };
234E2DF02B98425800433CF7 /* RoomVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 234E2DEF2B98425800433CF7 /* RoomVC.swift */; };
234E2DF42B9847A700433CF7 /* RoomBackgroundView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 234E2DF32B9847A700433CF7 /* RoomBackgroundView.swift */; };
234E2DF72B984FB200433CF7 /* RoomTopView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 234E2DF62B984FB200433CF7 /* RoomTopView.swift */; };
234E2DFA2B9851F000433CF7 /* UIButton+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 234E2DF92B9851F000433CF7 /* UIButton+.swift */; };
234E2DFD2B985A7300433CF7 /* UILabel+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 234E2DFC2B985A7300433CF7 /* UILabel+.swift */; };
234E2E022B986D7600433CF7 /* RoomQuitView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 234E2E012B986D7600433CF7 /* RoomQuitView.swift */; };
@@ -57,6 +56,39 @@
234E2E312B9B001A00433CF7 /* RoomChatScreenView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 234E2E302B9B001A00433CF7 /* RoomChatScreenView.swift */; };
234E2E332B9B019B00433CF7 /* RoomChatScreenHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 234E2E322B9B019B00433CF7 /* RoomChatScreenHeaderView.swift */; };
234E2E352B9B06E800433CF7 /* RoomChatScreenUserChatCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 234E2E342B9B06E800433CF7 /* RoomChatScreenUserChatCell.swift */; };
23630B992BABCE52003AD25D /* HomeSearchVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23630B982BABCE52003AD25D /* HomeSearchVC.swift */; };
23630B9B2BABCEA5003AD25D /* HomeSearchNavView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23630B9A2BABCEA5003AD25D /* HomeSearchNavView.swift */; };
23630B9D2BAC0DEA003AD25D /* HomeSearchRoomVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23630B9C2BAC0DEA003AD25D /* HomeSearchRoomVC.swift */; };
23630BA12BAC12F9003AD25D /* HomeSearchRoomCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23630BA02BAC12F9003AD25D /* HomeSearchRoomCell.swift */; };
23630BA32BAC23BA003AD25D /* HomeSearchRoomModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23630BA22BAC23BA003AD25D /* HomeSearchRoomModel.swift */; };
23630BB02BAD2708003AD25D /* YinRoomRankModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23630BAF2BAD2708003AD25D /* YinRoomRankModel.swift */; };
23630BB52BAD2725003AD25D /* YinRoomRankView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23630BB22BAD2725003AD25D /* YinRoomRankView.swift */; };
23630BB62BAD2725003AD25D /* RoomTopView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23630BB32BAD2725003AD25D /* RoomTopView.swift */; };
23630BB72BAD2725003AD25D /* YinRoomRankItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23630BB42BAD2725003AD25D /* YinRoomRankItemView.swift */; };
23630BB92BAD2CB8003AD25D /* YinRankH5UrlModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23630BB82BAD2CB8003AD25D /* YinRankH5UrlModel.swift */; };
23630BBB2BAD2EBB003AD25D /* YinClientInfoModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23630BBA2BAD2EBB003AD25D /* YinClientInfoModel.swift */; };
23630BBD2BAD379C003AD25D /* YinRoomAudioManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23630BBC2BAD379C003AD25D /* YinRoomAudioManager.swift */; };
23630BBF2BAD37B7003AD25D /* YinRoomTRTCManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23630BBE2BAD37B7003AD25D /* YinRoomTRTCManager.swift */; };
23630BC12BAD5537003AD25D /* YinRoomAgoraManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23630BC02BAD5537003AD25D /* YinRoomAgoraManager.swift */; };
23630BC32BAD7868003AD25D /* SendGiftVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23630BC22BAD7868003AD25D /* SendGiftVC.swift */; };
23630BC72BAD7A94003AD25D /* SendGiftView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23630BC62BAD7A94003AD25D /* SendGiftView.swift */; };
23630BC92BAD7BCB003AD25D /* SendGiftCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23630BC82BAD7BCB003AD25D /* SendGiftCell.swift */; };
23630BCB2BAD84B0003AD25D /* SendGiftModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23630BCA2BAD84B0003AD25D /* SendGiftModel.swift */; };
23630BCD2BAD908D003AD25D /* SendGiftSendView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23630BCC2BAD908D003AD25D /* SendGiftSendView.swift */; };
23630BCF2BADA7D9003AD25D /* SendGiftSendNumView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23630BCE2BADA7D9003AD25D /* SendGiftSendNumView.swift */; };
23630BD12BADA900003AD25D /* SendGiftSendNumCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23630BD02BADA900003AD25D /* SendGiftSendNumCell.swift */; };
23630BD32BADA9FF003AD25D /* SendGiftSendNumModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23630BD22BADA9FF003AD25D /* SendGiftSendNumModel.swift */; };
238A900C2BAAC6C600828123 /* HomeVoiceSearchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 238A900B2BAAC6C600828123 /* HomeVoiceSearchView.swift */; };
239EA6442BAE898300570127 /* RectiveGiftModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 239EA6432BAE898300570127 /* RectiveGiftModel.swift */; };
239EA6462BAE8A6600570127 /* RectiveGiftUserModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 239EA6452BAE8A6600570127 /* RectiveGiftUserModel.swift */; };
239EA6482BAE8D5E00570127 /* ChatCustomMsgModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 239EA6472BAE8D5E00570127 /* ChatCustomMsgModel.swift */; };
239EA64C2BAE90B700570127 /* ChatMsgRemoteModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 239EA64B2BAE90B700570127 /* ChatMsgRemoteModel.swift */; };
239EA64E2BAE949200570127 /* RoomChatScreenManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 239EA64D2BAE949200570127 /* RoomChatScreenManager.swift */; };
239EA6512BAE998E00570127 /* YYTextAsyncLayer+YinTextAsyncLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 239EA6502BAE998E00570127 /* YYTextAsyncLayer+YinTextAsyncLayer.m */; };
239EA6532BAEA73100570127 /* RoomChatScreenContentCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 239EA6522BAEA73100570127 /* RoomChatScreenContentCell.swift */; };
239EA65A2BAEB48A00570127 /* RoomDynamicEffectView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 239EA6592BAEB48A00570127 /* RoomDynamicEffectView.swift */; };
239EA65F2BAED9B900570127 /* YinCustomAttachmentCoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 239EA65E2BAED9B900570127 /* YinCustomAttachmentCoding.swift */; };
239EA6642BAF03B400570127 /* YinGetPointGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 239EA6632BAF03B400570127 /* YinGetPointGroup.m */; };
23EE96E02B9EB22100475D69 /* RoomMenuView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23EE96DF2B9EB22100475D69 /* RoomMenuView.swift */; };
23EE96E22B9EB22F00475D69 /* RoomSendTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23EE96E12B9EB22F00475D69 /* RoomSendTextView.swift */; };
23EE96E62B9EE79A00475D69 /* RoomVCViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23EE96E52B9EE79A00475D69 /* RoomVCViewModel.swift */; };
@@ -67,6 +99,10 @@
23EE96F42BA048F100475D69 /* MicSeatGiftValueModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23EE96F32BA048F100475D69 /* MicSeatGiftValueModel.swift */; };
23EE96F62BA061DE00475D69 /* RoomMsgListModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23EE96F52BA061DE00475D69 /* RoomMsgListModel.swift */; };
23EE96FA2BA1A3A300475D69 /* YinSpeak.svga in Resources */ = {isa = PBXBuildFile; fileRef = 23EE96F92BA1A3A200475D69 /* YinSpeak.svga */; };
23EE97032BA29F1E00475D69 /* SendGiftTopView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23EE97022BA29F1E00475D69 /* SendGiftTopView.swift */; };
23EE97052BA2A67300475D69 /* SendGiftUserView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23EE97042BA2A67300475D69 /* SendGiftUserView.swift */; };
23EE97072BA2AC8300475D69 /* SendGiftUserCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23EE97062BA2AC8300475D69 /* SendGiftUserCell.swift */; };
23EE970F2BA3006800475D69 /* SendGiftUserModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23EE970E2BA3006800475D69 /* SendGiftUserModel.swift */; };
25C63BC8F805551E8754E409 /* Pods_yinmeng_ios.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B2F175918AD0811681497739 /* Pods_yinmeng_ios.framework */; };
E81A7BAE2B885B20009E736E /* Base64.m in Sources */ = {isa = PBXBuildFile; fileRef = E81A7BAA2B885B20009E736E /* Base64.m */; };
E81A7BAF2B885B20009E736E /* MAIDESEncryptTool.m in Sources */ = {isa = PBXBuildFile; fileRef = E81A7BAB2B885B20009E736E /* MAIDESEncryptTool.m */; };
@@ -169,7 +205,6 @@
233E515A2B8C849600582F9C /* PlanetStarClickItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlanetStarClickItemView.swift; sourceTree = "<group>"; };
234E2DEF2B98425800433CF7 /* RoomVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomVC.swift; sourceTree = "<group>"; };
234E2DF32B9847A700433CF7 /* RoomBackgroundView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomBackgroundView.swift; sourceTree = "<group>"; };
234E2DF62B984FB200433CF7 /* RoomTopView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomTopView.swift; sourceTree = "<group>"; };
234E2DF92B9851F000433CF7 /* UIButton+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIButton+.swift"; sourceTree = "<group>"; };
234E2DFC2B985A7300433CF7 /* UILabel+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UILabel+.swift"; sourceTree = "<group>"; };
234E2E012B986D7600433CF7 /* RoomQuitView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomQuitView.swift; sourceTree = "<group>"; };
@@ -189,6 +224,41 @@
234E2E302B9B001A00433CF7 /* RoomChatScreenView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomChatScreenView.swift; sourceTree = "<group>"; };
234E2E322B9B019B00433CF7 /* RoomChatScreenHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomChatScreenHeaderView.swift; sourceTree = "<group>"; };
234E2E342B9B06E800433CF7 /* RoomChatScreenUserChatCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomChatScreenUserChatCell.swift; sourceTree = "<group>"; };
23630B982BABCE52003AD25D /* HomeSearchVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeSearchVC.swift; sourceTree = "<group>"; };
23630B9A2BABCEA5003AD25D /* HomeSearchNavView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeSearchNavView.swift; sourceTree = "<group>"; };
23630B9C2BAC0DEA003AD25D /* HomeSearchRoomVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeSearchRoomVC.swift; sourceTree = "<group>"; };
23630BA02BAC12F9003AD25D /* HomeSearchRoomCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeSearchRoomCell.swift; sourceTree = "<group>"; };
23630BA22BAC23BA003AD25D /* HomeSearchRoomModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeSearchRoomModel.swift; sourceTree = "<group>"; };
23630BAF2BAD2708003AD25D /* YinRoomRankModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YinRoomRankModel.swift; sourceTree = "<group>"; };
23630BB22BAD2725003AD25D /* YinRoomRankView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = YinRoomRankView.swift; sourceTree = "<group>"; };
23630BB32BAD2725003AD25D /* RoomTopView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RoomTopView.swift; sourceTree = "<group>"; };
23630BB42BAD2725003AD25D /* YinRoomRankItemView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = YinRoomRankItemView.swift; sourceTree = "<group>"; };
23630BB82BAD2CB8003AD25D /* YinRankH5UrlModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YinRankH5UrlModel.swift; sourceTree = "<group>"; };
23630BBA2BAD2EBB003AD25D /* YinClientInfoModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YinClientInfoModel.swift; sourceTree = "<group>"; };
23630BBC2BAD379C003AD25D /* YinRoomAudioManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YinRoomAudioManager.swift; sourceTree = "<group>"; };
23630BBE2BAD37B7003AD25D /* YinRoomTRTCManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YinRoomTRTCManager.swift; sourceTree = "<group>"; };
23630BC02BAD5537003AD25D /* YinRoomAgoraManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YinRoomAgoraManager.swift; sourceTree = "<group>"; };
23630BC22BAD7868003AD25D /* SendGiftVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SendGiftVC.swift; sourceTree = "<group>"; };
23630BC62BAD7A94003AD25D /* SendGiftView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SendGiftView.swift; sourceTree = "<group>"; };
23630BC82BAD7BCB003AD25D /* SendGiftCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SendGiftCell.swift; sourceTree = "<group>"; };
23630BCA2BAD84B0003AD25D /* SendGiftModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SendGiftModel.swift; sourceTree = "<group>"; };
23630BCC2BAD908D003AD25D /* SendGiftSendView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SendGiftSendView.swift; sourceTree = "<group>"; };
23630BCE2BADA7D9003AD25D /* SendGiftSendNumView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SendGiftSendNumView.swift; sourceTree = "<group>"; };
23630BD02BADA900003AD25D /* SendGiftSendNumCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SendGiftSendNumCell.swift; sourceTree = "<group>"; };
23630BD22BADA9FF003AD25D /* SendGiftSendNumModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SendGiftSendNumModel.swift; sourceTree = "<group>"; };
238A900B2BAAC6C600828123 /* HomeVoiceSearchView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeVoiceSearchView.swift; sourceTree = "<group>"; };
239EA6432BAE898300570127 /* RectiveGiftModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RectiveGiftModel.swift; sourceTree = "<group>"; };
239EA6452BAE8A6600570127 /* RectiveGiftUserModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RectiveGiftUserModel.swift; sourceTree = "<group>"; };
239EA6472BAE8D5E00570127 /* ChatCustomMsgModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatCustomMsgModel.swift; sourceTree = "<group>"; };
239EA64B2BAE90B700570127 /* ChatMsgRemoteModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatMsgRemoteModel.swift; sourceTree = "<group>"; };
239EA64D2BAE949200570127 /* RoomChatScreenManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomChatScreenManager.swift; sourceTree = "<group>"; };
239EA64F2BAE998E00570127 /* YYTextAsyncLayer+YinTextAsyncLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "YYTextAsyncLayer+YinTextAsyncLayer.h"; sourceTree = "<group>"; };
239EA6502BAE998E00570127 /* YYTextAsyncLayer+YinTextAsyncLayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "YYTextAsyncLayer+YinTextAsyncLayer.m"; sourceTree = "<group>"; };
239EA6522BAEA73100570127 /* RoomChatScreenContentCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomChatScreenContentCell.swift; sourceTree = "<group>"; };
239EA6592BAEB48A00570127 /* RoomDynamicEffectView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomDynamicEffectView.swift; sourceTree = "<group>"; };
239EA65E2BAED9B900570127 /* YinCustomAttachmentCoding.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YinCustomAttachmentCoding.swift; sourceTree = "<group>"; };
239EA6622BAF03B400570127 /* YinGetPointGroup.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = YinGetPointGroup.h; sourceTree = "<group>"; };
239EA6632BAF03B400570127 /* YinGetPointGroup.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = YinGetPointGroup.m; sourceTree = "<group>"; };
23EE96DF2B9EB22100475D69 /* RoomMenuView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomMenuView.swift; sourceTree = "<group>"; };
23EE96E12B9EB22F00475D69 /* RoomSendTextView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomSendTextView.swift; sourceTree = "<group>"; };
23EE96E52B9EE79A00475D69 /* RoomVCViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RoomVCViewModel.swift; sourceTree = "<group>"; };
@@ -199,6 +269,10 @@
23EE96F32BA048F100475D69 /* MicSeatGiftValueModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MicSeatGiftValueModel.swift; sourceTree = "<group>"; };
23EE96F52BA061DE00475D69 /* RoomMsgListModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomMsgListModel.swift; sourceTree = "<group>"; };
23EE96F92BA1A3A200475D69 /* YinSpeak.svga */ = {isa = PBXFileReference; lastKnownFileType = file; path = YinSpeak.svga; sourceTree = "<group>"; };
23EE97022BA29F1E00475D69 /* SendGiftTopView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SendGiftTopView.swift; sourceTree = "<group>"; };
23EE97042BA2A67300475D69 /* SendGiftUserView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SendGiftUserView.swift; sourceTree = "<group>"; };
23EE97062BA2AC8300475D69 /* SendGiftUserCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SendGiftUserCell.swift; sourceTree = "<group>"; };
23EE970E2BA3006800475D69 /* SendGiftUserModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SendGiftUserModel.swift; sourceTree = "<group>"; };
A9FB906EB4D17C552C15A2B3 /* Pods-yinmeng-ios.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-yinmeng-ios.debug.xcconfig"; path = "Target Support Files/Pods-yinmeng-ios/Pods-yinmeng-ios.debug.xcconfig"; sourceTree = "<group>"; };
B2F175918AD0811681497739 /* Pods_yinmeng_ios.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_yinmeng_ios.framework; sourceTree = BUILT_PRODUCTS_DIR; };
CB0AC98C54C1D41FA4CA102B /* Pods-yinmeng-ios.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-yinmeng-ios.release.xcconfig"; path = "Target Support Files/Pods-yinmeng-ios/Pods-yinmeng-ios.release.xcconfig"; sourceTree = "<group>"; };
@@ -341,6 +415,8 @@
234E2DED2B98411800433CF7 /* View */ = {
isa = PBXGroup;
children = (
239EA6542BAEB47900570127 /* RoomDynamicEffectView */,
23EE96FB2BA29AFF00475D69 /* SendGift */,
23EE96DA2B9EB17D00475D69 /* RoomMenuView */,
234E2E2B2B9AFCDB00433CF7 /* RoomChatScreenView */,
234E2E122B99F21600433CF7 /* MicSeatView */,
@@ -355,6 +431,9 @@
234E2DEE2B98411800433CF7 /* Tool */ = {
isa = PBXGroup;
children = (
23630BBC2BAD379C003AD25D /* YinRoomAudioManager.swift */,
23630BBE2BAD37B7003AD25D /* YinRoomTRTCManager.swift */,
23630BC02BAD5537003AD25D /* YinRoomAgoraManager.swift */,
);
path = Tool;
sourceTree = "<group>";
@@ -377,7 +456,8 @@
234E2DF52B984FA800433CF7 /* RoomTopView */ = {
isa = PBXGroup;
children = (
234E2DF62B984FB200433CF7 /* RoomTopView.swift */,
23630BB12BAD2725003AD25D /* View */,
23630BAE2BAD26F7003AD25D /* Model */,
);
path = RoomTopView;
sourceTree = "<group>";
@@ -530,6 +610,7 @@
234E2E2C2B9AFCDB00433CF7 /* ViewModel */ = {
isa = PBXGroup;
children = (
239EA64D2BAE949200570127 /* RoomChatScreenManager.swift */,
);
path = ViewModel;
sourceTree = "<group>";
@@ -548,6 +629,7 @@
234E2E302B9B001A00433CF7 /* RoomChatScreenView.swift */,
234E2E322B9B019B00433CF7 /* RoomChatScreenHeaderView.swift */,
234E2E342B9B06E800433CF7 /* RoomChatScreenUserChatCell.swift */,
239EA6522BAEA73100570127 /* RoomChatScreenContentCell.swift */,
);
path = View;
sourceTree = "<group>";
@@ -559,6 +641,64 @@
path = Tool;
sourceTree = "<group>";
};
23630BAE2BAD26F7003AD25D /* Model */ = {
isa = PBXGroup;
children = (
23630BAF2BAD2708003AD25D /* YinRoomRankModel.swift */,
);
path = Model;
sourceTree = "<group>";
};
23630BB12BAD2725003AD25D /* View */ = {
isa = PBXGroup;
children = (
23630BB32BAD2725003AD25D /* RoomTopView.swift */,
23630BB42BAD2725003AD25D /* YinRoomRankItemView.swift */,
23630BB22BAD2725003AD25D /* YinRoomRankView.swift */,
);
path = View;
sourceTree = "<group>";
};
239EA6542BAEB47900570127 /* RoomDynamicEffectView */ = {
isa = PBXGroup;
children = (
239EA6552BAEB47900570127 /* ViewModel */,
239EA6562BAEB47900570127 /* Model */,
239EA6572BAEB47900570127 /* View */,
239EA6582BAEB47900570127 /* Tool */,
);
path = RoomDynamicEffectView;
sourceTree = "<group>";
};
239EA6552BAEB47900570127 /* ViewModel */ = {
isa = PBXGroup;
children = (
);
path = ViewModel;
sourceTree = "<group>";
};
239EA6562BAEB47900570127 /* Model */ = {
isa = PBXGroup;
children = (
);
path = Model;
sourceTree = "<group>";
};
239EA6572BAEB47900570127 /* View */ = {
isa = PBXGroup;
children = (
239EA6592BAEB48A00570127 /* RoomDynamicEffectView.swift */,
);
path = View;
sourceTree = "<group>";
};
239EA6582BAEB47900570127 /* Tool */ = {
isa = PBXGroup;
children = (
);
path = Tool;
sourceTree = "<group>";
};
23EE96DA2B9EB17D00475D69 /* RoomMenuView */ = {
isa = PBXGroup;
children = (
@@ -600,6 +740,59 @@
path = Tool;
sourceTree = "<group>";
};
23EE96FB2BA29AFF00475D69 /* SendGift */ = {
isa = PBXGroup;
children = (
23EE96FC2BA29AFF00475D69 /* ViewModel */,
23EE96FD2BA29AFF00475D69 /* Model */,
23EE96FE2BA29AFF00475D69 /* View */,
23EE96FF2BA29AFF00475D69 /* Tool */,
);
path = SendGift;
sourceTree = "<group>";
};
23EE96FC2BA29AFF00475D69 /* ViewModel */ = {
isa = PBXGroup;
children = (
);
path = ViewModel;
sourceTree = "<group>";
};
23EE96FD2BA29AFF00475D69 /* Model */ = {
isa = PBXGroup;
children = (
23EE970E2BA3006800475D69 /* SendGiftUserModel.swift */,
23630BCA2BAD84B0003AD25D /* SendGiftModel.swift */,
23630BD22BADA9FF003AD25D /* SendGiftSendNumModel.swift */,
239EA6432BAE898300570127 /* RectiveGiftModel.swift */,
239EA6452BAE8A6600570127 /* RectiveGiftUserModel.swift */,
);
path = Model;
sourceTree = "<group>";
};
23EE96FE2BA29AFF00475D69 /* View */ = {
isa = PBXGroup;
children = (
23630BC22BAD7868003AD25D /* SendGiftVC.swift */,
23EE97022BA29F1E00475D69 /* SendGiftTopView.swift */,
23EE97042BA2A67300475D69 /* SendGiftUserView.swift */,
23EE97062BA2AC8300475D69 /* SendGiftUserCell.swift */,
23630BC62BAD7A94003AD25D /* SendGiftView.swift */,
23630BC82BAD7BCB003AD25D /* SendGiftCell.swift */,
23630BCC2BAD908D003AD25D /* SendGiftSendView.swift */,
23630BCE2BADA7D9003AD25D /* SendGiftSendNumView.swift */,
23630BD02BADA900003AD25D /* SendGiftSendNumCell.swift */,
);
path = View;
sourceTree = "<group>";
};
23EE96FF2BA29AFF00475D69 /* Tool */ = {
isa = PBXGroup;
children = (
);
path = Tool;
sourceTree = "<group>";
};
4B36689ACEFDA475774E1FD5 /* Pods */ = {
isa = PBXGroup;
children = (
@@ -653,6 +846,8 @@
children = (
E8479E402B8DC6BC009AF878 /* ChatBaseObject.swift */,
E8479E422B8DD077009AF878 /* ChatUIConfig.swift */,
239EA6472BAE8D5E00570127 /* ChatCustomMsgModel.swift */,
239EA64B2BAE90B700570127 /* ChatMsgRemoteModel.swift */,
);
path = Model;
sourceTree = "<group>";
@@ -669,6 +864,7 @@
isa = PBXGroup;
children = (
E8479E4C2B8DDBC5009AF878 /* ChatAttributeTool.swift */,
239EA65E2BAED9B900570127 /* YinCustomAttachmentCoding.swift */,
);
path = Tool;
sourceTree = "<group>";
@@ -760,6 +956,8 @@
isa = PBXGroup;
children = (
E86A43D42B8774B70084C04D /* AuthViewModel.swift */,
23630BB82BAD2CB8003AD25D /* YinRankH5UrlModel.swift */,
23630BBA2BAD2EBB003AD25D /* YinClientInfoModel.swift */,
E8D15A9E2B89AED500369467 /* AuthManager.swift */,
E8D15AA02B89AF4F00369467 /* UserTokenObject.swift */,
E8E4AAB62B8F95CA0096D77C /* AuthAppleManager.swift */,
@@ -877,6 +1075,12 @@
isa = PBXGroup;
children = (
E8D15AAF2B8AFFCE00369467 /* HomeVoiceVC.swift */,
238A900B2BAAC6C600828123 /* HomeVoiceSearchView.swift */,
23630B982BABCE52003AD25D /* HomeSearchVC.swift */,
23630B9C2BAC0DEA003AD25D /* HomeSearchRoomVC.swift */,
23630BA02BAC12F9003AD25D /* HomeSearchRoomCell.swift */,
23630BA22BAC23BA003AD25D /* HomeSearchRoomModel.swift */,
23630B9A2BABCEA5003AD25D /* HomeSearchNavView.swift */,
2311D6AC2B9058AA001C70AB /* HomeVoiceModel.swift */,
2311D6A62B8F2CFA001C70AB /* HomeVoiceChooseItemVeiw.swift */,
2311D6A82B8F405F001C70AB /* HomeVoiceChooseTypeView.swift */,
@@ -1005,6 +1209,10 @@
E81A7BA92B885B1F009E736E /* yinmeng-ios-Bridging-Header.h */,
2311D6C92B91BBF2001C70AB /* RecordVoiceManager.h */,
2311D6CA2B91BBF2001C70AB /* RecordVoiceManager.m */,
239EA6622BAF03B400570127 /* YinGetPointGroup.h */,
239EA6632BAF03B400570127 /* YinGetPointGroup.m */,
239EA64F2BAE998E00570127 /* YYTextAsyncLayer+YinTextAsyncLayer.h */,
239EA6502BAE998E00570127 /* YYTextAsyncLayer+YinTextAsyncLayer.m */,
);
path = Security;
sourceTree = "<group>";
@@ -1137,12 +1345,17 @@
E86A43AE2B85DFEA0084C04D /* Color+.swift in Sources */,
E8479E482B8DD6E1009AF878 /* ChatTextCell.swift in Sources */,
E8D15A9F2B89AED600369467 /* AuthManager.swift in Sources */,
23630BB02BAD2708003AD25D /* YinRoomRankModel.swift in Sources */,
E8479E382B8DC5CD009AF878 /* ChatListVC.swift in Sources */,
239EA6482BAE8D5E00570127 /* ChatCustomMsgModel.swift in Sources */,
E89F19AF2B91C00F0098E797 /* BindMobileVC.swift in Sources */,
23EE970F2BA3006800475D69 /* SendGiftUserModel.swift in Sources */,
234E2DFA2B9851F000433CF7 /* UIButton+.swift in Sources */,
E86A43B02B85E11B0084C04D /* BaseNavigationViewController.swift in Sources */,
E86A43E82B884C5E0084C04D /* String+.swift in Sources */,
23630BBD2BAD379C003AD25D /* YinRoomAudioManager.swift in Sources */,
2311D6D12B91DDDF001C70AB /* UserPayViewModel.swift in Sources */,
239EA6532BAEA73100570127 /* RoomChatScreenContentCell.swift in Sources */,
2311D6B12B9062A3001C70AB /* HomeVoiceFollowCell.swift in Sources */,
234E2E312B9B001A00433CF7 /* RoomChatScreenView.swift in Sources */,
E8D15AA32B89B03D00369467 /* Deserialized.swift in Sources */,
@@ -1150,31 +1363,41 @@
E8E4AAB72B8F95CA0096D77C /* AuthAppleManager.swift in Sources */,
E89F19452B917DBA0098E797 /* ChatSendVoiceView.swift in Sources */,
23EE96EE2B9F27E200475D69 /* MicSequenceModel.swift in Sources */,
23630BBB2BAD2EBB003AD25D /* YinClientInfoModel.swift in Sources */,
E8D15AC22B8C703C00369467 /* UserFunctionView.swift in Sources */,
234E2E1E2B9AB43700433CF7 /* RoomNormalMicSeatView.swift in Sources */,
2311D6AF2B906148001C70AB /* HomeVoiceFollowView.swift in Sources */,
23630B9D2BAC0DEA003AD25D /* HomeSearchRoomVC.swift in Sources */,
239EA64E2BAE949200570127 /* RoomChatScreenManager.swift in Sources */,
E86A43DA2B877A840084C04D /* AppConfigObject.swift in Sources */,
2311D6BC2B909A4F001C70AB /* HomeVoicePublishView.swift in Sources */,
23630BB52BAD2725003AD25D /* YinRoomRankView.swift in Sources */,
2311D6AD2B9058AA001C70AB /* HomeVoiceModel.swift in Sources */,
2311D6AB2B9024A9001C70AB /* HomeVoicePlayMusicItemView.swift in Sources */,
239EA6442BAE898300570127 /* RectiveGiftModel.swift in Sources */,
E8D15AA62B89B0C600369467 /* List+.swift in Sources */,
234E2E042B986D8400433CF7 /* RoomQuitModel.swift in Sources */,
234E2E0A2B98779900433CF7 /* RoomQuitUserInfoEmptyCell.swift in Sources */,
238A900C2BAAC6C600828123 /* HomeVoiceSearchView.swift in Sources */,
E81A7BAE2B885B20009E736E /* Base64.m in Sources */,
2311D6D72B91EF62001C70AB /* PlanetStarPopUpView.swift in Sources */,
23630BB92BAD2CB8003AD25D /* YinRankH5UrlModel.swift in Sources */,
234E2E352B9B06E800433CF7 /* RoomChatScreenUserChatCell.swift in Sources */,
E8479E462B8DD5BF009AF878 /* Date+.swift in Sources */,
E81A7BB22B886299009E736E /* HUDTool.swift in Sources */,
234E2E082B98738D00433CF7 /* RoomQuitUserInfoCell.swift in Sources */,
E8E4AAB52B8F8E3A0096D77C /* AuthItmeButton.swift in Sources */,
234E2E112B99B50400433CF7 /* RoomQuitViewModel.swift in Sources */,
239EA65A2BAEB48A00570127 /* RoomDynamicEffectView.swift in Sources */,
E86A43BC2B85FA640084C04D /* AuthForgetVC.swift in Sources */,
E86A43C32B8628AF0084C04D /* BaseTabBarViewController.swift in Sources */,
234E2E022B986D7600433CF7 /* RoomQuitView.swift in Sources */,
E8479E3B2B8DC5FA009AF878 /* ChatViewModel.swift in Sources */,
E8479E412B8DC6BC009AF878 /* ChatBaseObject.swift in Sources */,
239EA64C2BAE90B700570127 /* ChatMsgRemoteModel.swift in Sources */,
E86A43AA2B85DFA90084C04D /* BaseViewController.swift in Sources */,
23EE96E22B9EB22F00475D69 /* RoomSendTextView.swift in Sources */,
23630BCD2BAD908D003AD25D /* SendGiftSendView.swift in Sources */,
23EE96F62BA061DE00475D69 /* RoomMsgListModel.swift in Sources */,
E8E4AB1F2B901BFC0096D77C /* ChatGrowingTextView.swift in Sources */,
E884E85F2B6900C500ADE6EE /* AppDelegate.swift in Sources */,
@@ -1183,36 +1406,46 @@
E8D15AEA2B8CD77800369467 /* H5Utils.swift in Sources */,
E8D15AAA2B8ACC6B00369467 /* YMNetworkFun.swift in Sources */,
234E2E202B9AB44800433CF7 /* MicSeatSuperView.swift in Sources */,
23630BCF2BADA7D9003AD25D /* SendGiftSendNumView.swift in Sources */,
E8D15AB82B8B003C00369467 /* UserInfoVC.swift in Sources */,
234E2DF72B984FB200433CF7 /* RoomTopView.swift in Sources */,
E86A43B82B85F0B80084C04D /* AuthLaunchVC.swift in Sources */,
E8E4AB252B901E400096D77C /* ChatMoreMenuCell.swift in Sources */,
2311D6BA2B908D01001C70AB /* UserPayViewController.swift in Sources */,
E86A43C82B8743EA0084C04D /* AuthFillDataVC.swift in Sources */,
23EE96F42BA048F100475D69 /* MicSeatGiftValueModel.swift in Sources */,
E86A43CD2B874C8E0084C04D /* BaseView.swift in Sources */,
23630BCB2BAD84B0003AD25D /* SendGiftModel.swift in Sources */,
E8D15AE82B8CD47100369467 /* WebViewController.swift in Sources */,
E89F194B2B919ECB0098E797 /* ChatImageCell.swift in Sources */,
234E2E2A2B9AC07B00433CF7 /* MicSeatGiftValueView.swift in Sources */,
239EA6642BAF03B400570127 /* YinGetPointGroup.m in Sources */,
23EE96EA2B9F01F900475D69 /* RoomChatData.swift in Sources */,
E8D15AA12B89AF4F00369467 /* UserTokenObject.swift in Sources */,
234E2E0E2B99A24F00433CF7 /* RoomQuitItemModel.swift in Sources */,
233E515B2B8C849600582F9C /* PlanetStarClickItemView.swift in Sources */,
E8FF28B42B90ADBE005D2BE7 /* AppKeys.swift in Sources */,
2311D6A92B8F405F001C70AB /* HomeVoiceChooseTypeView.swift in Sources */,
239EA6462BAE8A6600570127 /* RectiveGiftUserModel.swift in Sources */,
234E2DF42B9847A700433CF7 /* RoomBackgroundView.swift in Sources */,
E89F19B52B91E3A50098E797 /* PasswordSetView.swift in Sources */,
23630BC32BAD7868003AD25D /* SendGiftVC.swift in Sources */,
E89F19492B919EB80098E797 /* ChatVoiceCell.swift in Sources */,
234E2E062B986E2100433CF7 /* Enum.swift in Sources */,
23EE96EC2B9F273A00475D69 /* MicSeatModel.swift in Sources */,
23630BB72BAD2725003AD25D /* YinRoomRankItemView.swift in Sources */,
23630BA12BAC12F9003AD25D /* HomeSearchRoomCell.swift in Sources */,
E8D15AB62B8B002700369467 /* ChatVC.swift in Sources */,
E8E4AB182B9019E50096D77C /* ChatKeyboardView.swift in Sources */,
23630BBF2BAD37B7003AD25D /* YinRoomTRTCManager.swift in Sources */,
23630BA32BAC23BA003AD25D /* HomeSearchRoomModel.swift in Sources */,
E8E4AB232B901E0C0096D77C /* ChatMoreMnueConfig.swift in Sources */,
E86A43C62B862CC70084C04D /* UIImage+.swift in Sources */,
E8E4AB212B901CD50096D77C /* ChatMoreMenuView.swift in Sources */,
E86A43D32B8773C90084C04D /* APPUtils.swift in Sources */,
23EE96E62B9EE79A00475D69 /* RoomVCViewModel.swift in Sources */,
239EA65F2BAED9B900570127 /* YinCustomAttachmentCoding.swift in Sources */,
E86A43CB2B874C6F0084C04D /* AuthPrivacyView.swift in Sources */,
23630BB62BAD2725003AD25D /* RoomTopView.swift in Sources */,
234E2E0C2B9879D400433CF7 /* RoomQuitClickCell.swift in Sources */,
234E2DFD2B985A7300433CF7 /* UILabel+.swift in Sources */,
E8D15AC52B8C90D400369467 /* AboutUsVC.swift in Sources */,
@@ -1220,16 +1453,23 @@
2311D6B32B906EDA001C70AB /* HomeVoiceGuideView.swift in Sources */,
E8D15ABF2B8B885700369467 /* UserObject.swift in Sources */,
2311D6B52B907053001C70AB /* HomeVoiceUserInfoView.swift in Sources */,
23630BC12BAD5537003AD25D /* YinRoomAgoraManager.swift in Sources */,
E86A43BF2B8620C40084C04D /* Utils.swift in Sources */,
E86A43BA2B85F1360084C04D /* AuthLoginVC.swift in Sources */,
E8D15ABC2B8B87BA00369467 /* UserViewModel.swift in Sources */,
239EA6512BAE998E00570127 /* YYTextAsyncLayer+YinTextAsyncLayer.m in Sources */,
E8479E432B8DD077009AF878 /* ChatUIConfig.swift in Sources */,
23630BC92BAD7BCB003AD25D /* SendGiftCell.swift in Sources */,
23EE97032BA29F1E00475D69 /* SendGiftTopView.swift in Sources */,
234E2E252B9AB64700433CF7 /* NormalMicSeatCell.swift in Sources */,
E8479E4D2B8DDBC5009AF878 /* ChatAttributeTool.swift in Sources */,
E81A7BAF2B885B20009E736E /* MAIDESEncryptTool.m in Sources */,
23630B9B2BABCEA5003AD25D /* HomeSearchNavView.swift in Sources */,
E8D15AA82B89B74700369467 /* YMRequestX.swift in Sources */,
23630BD32BADA9FF003AD25D /* SendGiftSendNumModel.swift in Sources */,
E8E4AB1D2B901B9D0096D77C /* ChatKeyboard+.swift in Sources */,
2311D6C62B917949001C70AB /* HomeVoiceRecordBtnView.swift in Sources */,
23EE97072BA2AC8300475D69 /* SendGiftUserCell.swift in Sources */,
234E2DF02B98425800433CF7 /* RoomVC.swift in Sources */,
2311D6A72B8F2CFA001C70AB /* HomeVoiceChooseItemVeiw.swift in Sources */,
E8D15AB02B8AFFCE00369467 /* HomeVoiceVC.swift in Sources */,
@@ -1242,12 +1482,16 @@
E8D15AB32B8B000400369467 /* PlanetStarVC.swift in Sources */,
E8FF28B62B90ED6C005D2BE7 /* ChatNavView.swift in Sources */,
234E2E332B9B019B00433CF7 /* RoomChatScreenHeaderView.swift in Sources */,
23630BD12BADA900003AD25D /* SendGiftSendNumCell.swift in Sources */,
E8D15A9D2B899E1500369467 /* YMNetworkHelper.swift in Sources */,
E8E4AB1B2B901AF50096D77C /* UIView+.swift in Sources */,
2311D69D2B8DC311001C70AB /* PlanetStarModel.swift in Sources */,
E89F19B32B91E2C00098E797 /* PasswordSetVC.swift in Sources */,
2311D6CB2B91BBF2001C70AB /* RecordVoiceManager.m in Sources */,
23630B992BABCE52003AD25D /* HomeSearchVC.swift in Sources */,
2311D6C42B917619001C70AB /* HomeVoiceRecordView.swift in Sources */,
23630BC72BAD7A94003AD25D /* SendGiftView.swift in Sources */,
23EE97052BA2A67300475D69 /* SendGiftUserView.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -1401,7 +1645,7 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = "yinmeng-ios/yinmeng-ios.entitlements";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
CURRENT_PROJECT_VERSION = 2;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 48UCG35Q9W;
ENABLE_USER_SCRIPT_SANDBOXING = NO;
@@ -1423,7 +1667,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0.2;
MARKETING_VERSION = 1.0.4;
PRODUCT_BUNDLE_IDENTIFIER = "linyudan.yinmeng-ios";
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
@@ -1445,7 +1689,7 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = "yinmeng-ios/yinmeng-ios.entitlements";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
CURRENT_PROJECT_VERSION = 2;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 48UCG35Q9W;
ENABLE_USER_SCRIPT_SANDBOXING = NO;
@@ -1467,7 +1711,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0.2;
MARKETING_VERSION = 1.0.4;
PRODUCT_BUNDLE_IDENTIFIER = "linyudan.yinmeng-ios";
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";

View File

@@ -68,6 +68,7 @@ var window: UIWindow?
let opt = NIMSDKOption(appKey: AppKeys.nimAppid)
opt.apnsCername = "yinmeng_anps"
NIMSDK.shared().register(with: opt)
NIMCustomObject.registerCustomDecoder(YinCustomAttachmentCoding())
}
}

View File

@@ -0,0 +1,22 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "home_search_online_icon@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "home_search_online_icon@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 187 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 222 B

View File

@@ -0,0 +1,22 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "yin_home_voice_search_bg@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "yin_home_voice_search_bg@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 515 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 881 B

View File

@@ -0,0 +1,22 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "yin_home_voice_search_icon@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "yin_home_voice_search_icon@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 830 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 5.0 KiB

View File

@@ -0,0 +1,22 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "yin_left_black_arrow@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "yin_left_black_arrow@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 363 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 468 B

View File

@@ -0,0 +1,22 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "yin_plane_star_send_gift_icon@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "yin_plane_star_send_gift_icon@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

@@ -0,0 +1,22 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "yin_search_vc_iocn@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "yin_search_vc_iocn@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 570 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 703 B

View File

@@ -0,0 +1,6 @@
{
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@@ -0,0 +1,22 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "room_gift_slect_bg@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "room_gift_slect_bg@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 643 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 997 B

View File

@@ -0,0 +1,22 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "yin_room_gift_arrow@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "yin_room_gift_arrow@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 181 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 254 B

View File

@@ -0,0 +1,22 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "yin_room_gift_diamond@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "yin_room_gift_diamond@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@@ -0,0 +1,22 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "yin_room_gift_select@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "yin_room_gift_select@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 643 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 997 B

View File

@@ -0,0 +1,22 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "yin_room_gift_tag_dedicated@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "yin_room_gift_tag_dedicated@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 666 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -0,0 +1,22 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "yin_room_gift_tag_effect@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "yin_room_gift_tag_effect@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 748 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -0,0 +1,22 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "yin_room_gift_tag_latest@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "yin_room_gift_tag_latest@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@@ -0,0 +1,22 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "yin_room_gift_tag_limit@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "yin_room_gift_tag_limit@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@@ -0,0 +1,22 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "yin_room_gift_up_arrow@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "yin_room_gift_up_arrow@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 222 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 292 B

View File

@@ -0,0 +1,22 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "room_send_gift_icon@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "room_send_gift_icon@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

View File

@@ -0,0 +1,6 @@
{
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@@ -0,0 +1,22 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "yin_room_rank_first@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "yin_room_rank_first@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -0,0 +1,22 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "yin_room_rank_second@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "yin_room_rank_second@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@@ -0,0 +1,22 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "yin_room_rank_third@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "yin_room_rank_third@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -22,7 +22,7 @@ class YMNetworkHelper: NSObject {
parameters["ispType"] = "1"
parameters["channel"] = APPUtils.currentChannle
parameters["netType"] = "2"
parameters["app"] = "yinmeng"
parameters["app"] = "mew"
parameters["appVersion"] = APPUtils.appVersion
parameters["deviceId"] = APPUtils.currentDeveiceId
return parameters

View File

@@ -23,6 +23,7 @@ NS_ASSUME_NONNULL_BEGIN
- (void)initWithRecord;
-(void)stopRecord;
- (void)playFilePathVoice;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,16 @@
//
// YYTextAsyncLayer+XPTextAsyncLayer.h
// xplan-ios
//
// Created by yinmeng on 2023/10/28.
//
#import <YYText/YYTextAsyncLayer.h>
NS_ASSUME_NONNULL_BEGIN
@interface YYTextAsyncLayer (YinTextAsyncLayer)
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,27 @@
//
// YYTextAsyncLayer+XPTextAsyncLayer.m
// xplan-ios
//
// Created by yinmeng on 2023/10/28.
//
#import "YYTextAsyncLayer+YinTextAsyncLayer.h"
#import <objc/runtime.h>
@implementation YYTextAsyncLayer (YinTextAsyncLayer)
+(void)load {
Method yin_displayMethod = class_getInstanceMethod(self, @selector(display));
Method yin_swizzingMethod = class_getInstanceMethod(self, @selector(yin_swizzing_display));
method_exchangeImplementations(yin_displayMethod, yin_swizzingMethod);
}
-(void)yin_swizzing_display{
if (self.bounds.size.width <= 0 || self.bounds.size.height <= 0) {
self.contents = nil;
return;
} else {
[self yin_swizzing_display];
}
}
@end

View File

@@ -0,0 +1,16 @@
//
// YinGetPointGroup.h
// yinmeng-ios
//
// Created by yinmeng on 2024/3/23.
//
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface YinGetPointGroup : NSObject
+ (CAAnimationGroup *)getGroupPoint:(CGPoint)startPoint endPoint:(CGPoint)endPoint centerPoint:(CGPoint)centerPoint;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,68 @@
//
// YinGetPointGroup.m
// yinmeng-ios
//
// Created by yinmeng on 2024/3/23.
//
#import "YinGetPointGroup.h"
@implementation YinGetPointGroup
+ (CAAnimationGroup *)getGroupPoint:(CGPoint)startPoint endPoint:(CGPoint)endPoint centerPoint:(CGPoint)centerPoint{
CAKeyframeAnimation *animation0 = [CAKeyframeAnimation animation];
animation0.duration = 0.8;
animation0.keyPath = @"transform.scale";
animation0.values = @[@1.0,@1.5,@2.0,@1.5];
animation0.repeatCount = 1;
animation0.calculationMode = kCAAnimationCubic;
animation0.removedOnCompletion = NO;
animation0.fillMode = kCAFillModeForwards;
CAKeyframeAnimation *animation1 = [CAKeyframeAnimation animation];
animation1.duration = 0.8;
animation1.beginTime = 0.8;
animation1.keyPath = @"transform.scale";
animation1.values = @[@1.5,@2.0,@2.5,@3.0];
animation1.repeatCount = 1;
animation1.calculationMode = kCAAnimationCubic;
animation1.removedOnCompletion = NO;
animation1.fillMode = kCAFillModeForwards;
CAKeyframeAnimation *animation2 = [CAKeyframeAnimation animation];
animation2.duration = 0.8;
animation2.beginTime = 0.8;
animation2.keyPath = @"position";
animation2.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];;
animation2.values = @[[NSValue valueWithCGPoint:startPoint],[NSValue valueWithCGPoint:CGPointMake(centerPoint.x ,centerPoint.y)]];
animation2.repeatCount = 1;
animation2.removedOnCompletion = NO;
animation2.fillMode = kCAFillModeForwards;
CAKeyframeAnimation *animation3 = [CAKeyframeAnimation animation];
animation3.duration = 0.8;
animation3.beginTime = 2.6;
animation3.keyPath = @"transform.scale";
animation3.values = @[@3,@2.5,@2,@1.5,@1];
animation3.repeatCount = 1;
CAKeyframeAnimation *animation4 = [CAKeyframeAnimation animation];
animation4.duration = 0.8;
animation4.beginTime = 2.6;
animation4.keyPath = @"position";
animation4.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
animation4.values = @[[NSValue valueWithCGPoint:CGPointMake(centerPoint.x ,centerPoint.y)],[NSValue valueWithCGPoint:endPoint]];
animation4.repeatCount = 1;
CAAnimationGroup *group = [CAAnimationGroup animation];
group.duration = 3.2;
group.animations = @[animation0,animation1,animation2, animation3,animation4];
group.repeatCount = 1;
group.removedOnCompletion = NO;
group.fillMode = kCAFillModeForwards;
return group;
}
@end

View File

@@ -10,3 +10,10 @@
#import <FFPopup/FFPopup.h>
#import <MJExtension/MJExtension.h>
#import <TXLiteAVSDK_TRTC/TRTCCloud.h>
#import <JXCategoryView/JXCategoryView.h>
#import <JXCategoryView/JXCategoryListContainerView.h>
#import <AgoraRtcKit/AgoraRtcEngineKit.h>
#import <NIMSDK/NIMSDK.h>
#import <YYText/YYText.h>
#import "UIView+VAP.h"
#import "YinGetPointGroup.h"

View File

@@ -10,8 +10,12 @@ enum AppKeys {
#if DEBUG
static let nimAppid = "5d5a833a2d0ff1304a5d8bed53d2af5b"
static let api = "http://beta.api.ymlive.fun/"
static let agoraKey = "5b4d929b6c4e4af190550c4a2ec5cd4c"
static let H5_URL = "http://beta.api.ymlive.fun"
#else
static let nimAppid = "5e76ec47632d86c30ce18eabfa332b6a"
static let api = "https://api.ymlive.fun/"
static let agoraKey = "5b4d929b6c4e4af190550c4a2ec5cd4c"
static let H5_URL = "https://h5.ymlive.fun"
#endif
}

View File

@@ -2,7 +2,7 @@
// Enum.swift
// yinmeng-ios
//
// Created by duoban on 2024/3/6.
// Created by yinmeng on 2024/3/6.
//
import Foundation

View File

@@ -12,4 +12,6 @@ enum H5Utils:String {
case user = "modules/rule/protocol.html"
case logoff = "modules/logout/index.html"
case pay = "mew/modules/rule/rechargeAgreement.html"
case rank = "modules/roomRank/index.html"
case autonym = "modules/identity/new.html"
}

View File

@@ -21,7 +21,8 @@ let keyWindow = UIApplication.shared.windows.first!
let DesKey = "1ea53d260ecf11e7b56e00163e046a26"
let H5_URL = "http://beta.h5.ymlive.fun"

View File

@@ -7,12 +7,14 @@
import UIKit
import WebKit
import MJExtension
class WebViewWeakScriptMessage: NSObject, WKScriptMessageHandler {
private(set) weak var target: WKScriptMessageHandler?
required init(target: WKScriptMessageHandler?) {
self.target = target
}
@@ -30,23 +32,36 @@ class WebViewController: BaseViewController {
private(set) var progressView = UIProgressView()
private lazy var userContentController = WKUserContentController()
private lazy var userContentController:WKUserContentController = {
let scriptMessage = WebViewWeakScriptMessage(target: self);
let _userContentController = WKUserContentController()
_userContentController.add(self, name: "getUid")
_userContentController.add(self, name: "getDeviceId")
_userContentController.add(self, name: "getTicket")
_userContentController.add(self, name: "getDeviceInfo")
_userContentController.add(self, name: "initShowNav")
_userContentController.add(self, name: "closeWebView")
_userContentController.add(self, name: "cancelAccount")
return _userContentController
}()
private var callbacks: [String: [OnReceiveMessage]] = [:]
private(set) weak var navigationDelegate: WKNavigationDelegate?
private(set) var url: String?
var isHalf:Bool = false
convenience init(
url: String?,
navigationDelegate: WKNavigationDelegate? = nil
navigationDelegate: WKNavigationDelegate? = nil,isHalf:Bool = false
) {
self.init(nibName: nil, bundle: nil)
self.url = url
self.isHalf = isHalf
if var url = url {
if !url.hasPrefix("http") {
url = "\(H5_URL)/\(url)"
url = "\(AppKeys.H5_URL)/\(url)"
}
self.url = url
}
@@ -58,7 +73,9 @@ class WebViewController: BaseViewController {
loadSubViews()
loadWebView()
}
deinit{
print("1111")
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
addObserve()
@@ -76,23 +93,51 @@ class WebViewController: BaseViewController {
}
private func loadSubViews() {
view.addSubview(webview)
view.addSubview(progressView)
progressView.snp.makeConstraints { make in
make.top.equalTo(view).offset(0)
make.left.right.equalTo(view).offset(0)
make.height.equalTo(1)
}
webview.snp.makeConstraints { make in
make.top.equalTo(view).offset(1)
make.left.right.bottom.equalTo(view)
}
if self.isHalf{
let bakcBtn = UIButton()
bakcBtn.addTarget(self, action: #selector(dissViewAction), for: .touchUpInside)
view.addSubview(bakcBtn)
bakcBtn.snp.makeConstraints { make in
make.edges.equalTo(view)
}
view.addSubview(webview)
view.addSubview(progressView)
progressView.snp.makeConstraints { make in
make.top.equalTo(view).offset(0)
make.left.right.equalTo(view).offset(0)
make.height.equalTo(1)
}
view.backgroundColor = .clear
webview.snp.makeConstraints { make in
make.left.bottom.right.equalTo(view)
make.height.equalTo(ScreenHeight * 0.65)
}
}else{
view.addSubview(webview)
view.addSubview(progressView)
progressView.snp.makeConstraints { make in
make.top.equalTo(view).offset(0)
make.left.right.equalTo(view).offset(0)
make.height.equalTo(1)
}
webview.snp.makeConstraints { make in
make.top.equalTo(view).offset(1)
make.left.right.bottom.equalTo(view)
}
}
progressView.trackTintColor = .clear
progressView.transform = .init(scaleX: 1, y: 1.5)
progressView.alpha = 0
}
@objc func dissViewAction(){
self.dismiss(animated: true)
}
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if let object = object as? WKWebView, object == webview {
if keyPath == "estimatedProgress" {
@@ -128,8 +173,11 @@ class WebViewController: BaseViewController {
}
webview.load(URLRequest(url: theUrl))
}
func reloadWebViewWithUrl(_ url: String) {
self.url = url
loadWebView()
@@ -141,8 +189,18 @@ class WebViewController: BaseViewController {
configuration.allowsInlineMediaPlayback = true
configuration.allowsPictureInPictureMediaPlayback = true
configuration.selectionGranularity = .character
configuration.userContentController = userContentController
let cookie = "uid=\(AuthManager.userUid)"
let cookieScript = WKUserScript.init(source: "document.cookie = '\(cookie)';", injectionTime: .atDocumentStart, forMainFrameOnly: false)
self.userContentController.addUserScript(cookieScript)
let scale = "$('meta[name=description]').remove(); $('head').append( '<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,user-scalable=no\">' );"
let scaleScript = WKUserScript.init(source: scale, injectionTime: .atDocumentEnd, forMainFrameOnly: false)
self.userContentController.addUserScript(scaleScript)
configuration.userContentController = self.userContentController
let preferences = WKPreferences()
if #available(iOS 14, *) {
let webpagePreferences = WKWebpagePreferences()
@@ -156,6 +214,18 @@ class WebViewController: BaseViewController {
configuration.preferences = preferences
let webview = WKWebView(frame: UIScreen.main.bounds, configuration: configuration)
webview.navigationDelegate = self
webview.evaluateJavaScript("navigator.userAgent") {[weak self] res, error in
guard let self = self else{return}
if let text = res as? NSString{
if !text.contains("tutuAppIos erbanAppIos"){
let newText = (text as String) + "tutuAppIos erbanAppIos"
let dic = ["UserAgent":newText]
UserDefaults.standard.register(defaults: dic)
UserDefaults.standard.synchronize()
self.webview.customUserAgent = newText
}
}
}
return webview
}
@@ -164,17 +234,61 @@ class WebViewController: BaseViewController {
let str = String(data: data!,encoding:String.Encoding.utf8)
return str
}
}
extension WebViewController: WKScriptMessageHandler {
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
//TODO: h5
webview.evaluateJavaScript("document.location.href") {[weak self] res, error in
guard let self = self else{return}
if let curUrl = res{
if message.name == "getUid"{
let uid = "getMessage(\"uid\",\(AuthManager.userUid))"
self.webview.evaluateJavaScript(uid) { other, error in
}
}else if message.name == "getTicket"{
let ticket = "getMessage(\"ticket\",\"\(AuthManager.ticket)\")"
self.webview.evaluateJavaScript(ticket) { other, error in
}
}else if message.name == "getDeviceId"{
let deviceId = "getMessage(\"deviceId\",\"\(APPUtils.currentDeveiceId)\")"
self.webview.evaluateJavaScript(deviceId) { other, error in
}
}else if message.name == "getDeviceInfo"{
let info = NSDictionary(dictionary: YMNetworkHelper.share.baseParameters)
if let infoText = info.mj_JSONString() {
let text = "getMessage(\"deviceInfo\",\(infoText))"
self.webview.evaluateJavaScript(text) { other, error in
}
}
}else if message.name == "initShowNav"{
if let body = message.body as? Int,body == 0{
if self.navigationController != nil{
self.navigationController?.setNavigationBarHidden(true, animated: false)
}
}
}else if message.name == "closeWebView"{
if let body = message.body as? Int,body == 0{
if self.navigationController != nil{
self.navigationController?.popViewController(animated: true)
}
}
}else if message.name == "cancelAccount"{
AuthViewModel.authVM.logout()
}
}
}
}
}
extension WebViewController: WKNavigationDelegate {
extension WebViewController: WKNavigationDelegate{
func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
progressView.alpha = 1
@@ -195,4 +309,5 @@ extension WebViewController: WKNavigationDelegate {
}
navigationDelegate?.webView?(webView, didFailProvisionalNavigation: navigation, withError: error)
}
}

View File

@@ -106,5 +106,76 @@ extension Date {
dateformatter.dateFormat = dateFormat
return dateformatter.string(from: self)
}
private enum ConstellationType:String {
case , , , , , ,
, , , , ,
}
private static let constellationDict:[ConstellationType :String] = [.: "3.21-4.19",
.: "4.20-5.20",
.: "5.21-6.21",
.: "6.22-7.22",
.: "7.23-8.22",
.: "8.23-9.22",
.: "9.23-10.23",
.: "10.24-11.22",
.: "11.23-12.21",
.: "12.22-1.19",
.: "1.20-2.18",
.: "2.19-3.20"]
/// ->
/// - parameter date:
/// - returns:
public static func getCalculateWithDate(date: Date) -> String? {
let timeInterval = date.timeIntervalSince1970
let OneDay:Double = 86400
let currConstellation = constellationDict.filter {
let timeRange = getTimeRange(date: date, timeRange: $1)
let startTime = timeRange.0
let endTime = timeRange.1 + OneDay
return timeInterval > startTime && timeInterval < endTime
} //
return currConstellation.first?.key.rawValue ?? "摩羯座"
}
/// f.
private static func getTimeRange(date:Date, timeRange: String) -> (TimeInterval, TimeInterval) {
/// f.1
func getCurrYear(date:Date) -> String {
let dm = DateFormatter()
dm.dateFormat = "yyyy."
let currYear = dm.string(from: date)
return currYear
}
/// f.2
func toTimeInterval(dateStr: String) -> TimeInterval? {
let dm = DateFormatter()
dm.dateFormat = "yyyy.MM.dd"
let date = dm.date(from: dateStr)
let interval = date?.timeIntervalSince1970
return interval
}
let timeStrArr = timeRange.components(separatedBy: "-")
let dateYear = getCurrYear(date: date)
let startTimeStr = dateYear + timeStrArr.first!
let endTimeStr = dateYear + timeStrArr.last!
let startTime = toTimeInterval(dateStr: startTimeStr)!
let endTime = toTimeInterval(dateStr: endTimeStr)!
return (startTime, endTime)
}
}

View File

@@ -2,7 +2,7 @@
// UIButtom+.swift
// yinmeng-ios
//
// Created by duoban on 2024/3/6.
// Created by yinmeng on 2024/3/6.
//
import UIKit
@@ -35,22 +35,34 @@ extension UIButton {
return bounds.contains(point)
}
static func getCustomBtn(text:String? = nil,selectedText:String? = nil,font:UIFont? = nil,color:UIColor? = nil,selectedColor:UIColor? = nil,image:UIImage? = nil,selectedImage:UIImage? = nil,bgImage:UIImage? = nil) -> UIButton{
let customBtn = UIButton()
static func getCustomBtn(type:UIButton.ButtonType = .custom, text:String? = nil,selectedText:String? = nil,disabledText:String? = nil,font:UIFont? = nil,color:UIColor? = nil,selectedColor:UIColor? = nil,disabledColor:UIColor? = nil,image:UIImage? = nil,selectedImage:UIImage? = nil,bgImage:UIImage? = nil,selectedBgImage:UIImage? = nil,disabledBgImage:UIImage? = nil,masksToBounds:Bool = false,cornerRadius:CGFloat = 0,borderWidth:CGFloat = 0,borderColor:UIColor? = nil) -> UIButton{
let customBtn = UIButton(type: type)
customBtn.layer.masksToBounds = masksToBounds
customBtn.layer.cornerRadius = cornerRadius
customBtn.layer.borderWidth = borderWidth
if let _borderColor = borderColor{
customBtn.layer.borderColor = _borderColor.cgColor
}
if let _text = text{
customBtn.setTitle(text, for: .normal)
customBtn.setTitle(_text, for: .normal)
}
if let _selectedText = selectedText{
customBtn.setTitle(selectedText, for: .selected)
customBtn.setTitle(_selectedText, for: .selected)
}
if let _disabledText = disabledText{
customBtn.setTitle(_disabledText, for: .disabled)
}
if let _font = font{
customBtn.titleLabel?.font = font
customBtn.titleLabel?.font = _font
}
if let _color = color{
customBtn.setTitleColor(color, for: .normal)
customBtn.setTitleColor(_color, for: .normal)
}
if let _selectedColor = selectedColor{
customBtn.setTitleColor(selectedColor, for: .selected)
customBtn.setTitleColor(_selectedColor, for: .selected)
}
if let _disabledColor = disabledColor{
customBtn.setTitleColor(_disabledColor, for: .disabled)
}
if let _image = image{
customBtn.setImage(_image, for: .normal)
@@ -61,6 +73,12 @@ extension UIButton {
if let _bgImage = bgImage{
customBtn.setBackgroundImage(_bgImage, for: .normal)
}
if let _selectedBgImage = selectedBgImage{
customBtn.setBackgroundImage(_selectedBgImage, for: .selected)
}
if let _disabledBgImage = disabledBgImage{
customBtn.setBackgroundImage(_disabledBgImage, for: .disabled)
}
return customBtn
}

View File

@@ -2,15 +2,22 @@
// UILabel+.swift
// yinmeng-ios
//
// Created by duoban on 2024/3/6.
// Created by yinmeng on 2024/3/6.
//
import Foundation
extension UILabel{
static func getCustomLabel(text:String? = "",font:UIFont? = nil,color:UIColor? = nil,textAlignment:NSTextAlignment? = .left,numberOfLines:Int? = 1)->UILabel{
static func getCustomLabel(text:String? = "",font:UIFont? = nil,color:UIColor? = nil,textAlignment:NSTextAlignment? = .left,numberOfLines:Int? = 1,backgroundColor:UIColor? = nil,masksToBounds:Bool = false,cornerRadius:CGFloat = 0,borderWidth:CGFloat = 0,borderColor:UIColor? = nil)->UILabel{
let customView = UILabel()
customView.layer.masksToBounds = masksToBounds
customView.layer.cornerRadius = cornerRadius
customView.layer.borderWidth = borderWidth
if let _borderColor = borderColor{
customView.layer.borderColor = _borderColor.cgColor
}
if let _text = text {
customView.text = text
customView.text = _text
}
if let _font = font {
customView.font = _font
@@ -24,6 +31,9 @@ extension UILabel{
if let _numberOfLines = numberOfLines{
customView.numberOfLines = _numberOfLines
}
if let _backgroundColor = backgroundColor{
customView.backgroundColor = _backgroundColor
}
return customView
}
static func getLabelHeigth(text:String,width:CGFloat,font:UIFont)-> CGFloat{

View File

@@ -16,10 +16,13 @@ class AuthViewModel: NSObject {
var appId = ""
let loginSuccess = BehaviorSubject(value: false)
let resetPwd = PublishSubject<Bool>()
var clientInfoModel:YinClientInfoModel?
func appClientConfig() {
RequestGet(path: "client/init", parma: [:]) { data in
if let account = Deserialized<YinClientInfoModel>.toModel(with: data) {
self.clientInfoModel = account
}
if let _data = data as? [String:Any],let appId = _data["trtcAppId"] {
AuthViewModel.authVM.appId = "\(appId)"
}
@@ -38,9 +41,9 @@ class AuthViewModel: NSObject {
if let token = token {
let params = ["auaccess_token": token]
RequestPost(path: "acc/logout", parma: params) { data in
print("你好")
} fail: { code, msg in
print("de")
}
}
self.loginSuccess.onNext(false)

View File

@@ -0,0 +1,12 @@
//
// YinClientInfoModel.swift
// yinmeng-ios
//
// Created by yinmeng on 2024/3/22.
//
import UIKit
import HandyJSON
struct YinClientInfoModel: HandyJSON {
var h5Uris:[YinRankH5UrlModel] = []
}

View File

@@ -0,0 +1,13 @@
//
// YinRankH5UrlModel.swift
// yinmeng-ios
//
// Created by yinmeng on 2024/3/22.
//
import UIKit
import HandyJSON
struct YinRankH5UrlModel: HandyJSON {
var code = ""
var uri = ""
}

View File

@@ -0,0 +1,26 @@
//
// ChatCustomMsgModel.swift
// yinmeng-ios
//
// Created by yinmeng on 2024/3/23.
//
import UIKit
import HandyJSON
class ChatCustomMsgModel: NSObject, HandyJSON,NIMCustomAttachment {
required override init(){
}
var first = 0
var second = 0
var data:[String:Any] = [:]
// encodeAttachment
func encode() -> String {
if let text = self.toJSONString(){
return text
}
return ""
}
}

View File

@@ -0,0 +1,16 @@
//
// ChatMsgRemoteModel.swift
// yinmeng-ios
//
// Created by yinmeng on 2024/3/23.
//
import UIKit
import HandyJSON
class ChatMsgRemoteModel: HandyJSON {
required init() {
}
}

View File

@@ -0,0 +1,40 @@
//
// YinCustomAttachmentCoding.swift
// yinmeng-ios
//
// Created by yinmeng on 2024/3/23.
//
import UIKit
import MJExtension
class YinCustomAttachmentCoding: NSObject,NIMCustomAttachmentCoding {
func decodeAttachment(_ content: String?) -> NIMCustomAttachment? {
if let text = content as? NSString{
if let data = text.mj_JSONObject() as? [String : Any],let first = data["first"] as? Int,let second = data["second"] as? Int,let dic = data["data"]{
if let _dic = dic as? [String : Any]{
let model = ChatCustomMsgModel()
model.first = first
model.second = second
model.data = _dic
return model
}
if let _dic = dic as? NSString,let getDic = _dic.mj_JSONObject(),let getData = getDic as? [String:Any]{
let model = ChatCustomMsgModel()
model.first = first
model.second = second
model.data = getData
return model
}
}
}
return nil
}
}

View File

@@ -0,0 +1,115 @@
//
// HomeSearchNavView.swift
// yinmeng-ios
//
// Created by yinmeng on 2024/3/21.
//
import UIKit
typealias ClickSearchBlcok = (_ type:Int)->Void
class HomeSearchNavView: 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(leftArrowBtn)
addSubview(bgSearchView)
addSubview(searchBtn)
bgSearchView.addSubview(searchIconView)
bgSearchView.addSubview(textField)
leftArrowBtn.snp.makeConstraints { make in
make.width.height.equalTo(UIDevice.scaleWidth(width: 22))
make.leading.equalTo(UIDevice.scaleWidth(width: 8))
make.centerY.equalTo(bgSearchView)
}
bgSearchView.snp.makeConstraints { make in
make.height.equalTo(UIDevice.scaleWidth(width: 30))
make.leading.equalTo(leftArrowBtn.snp.trailing).offset((UIDevice.scaleWidth(width: 5)))
make.trailing.equalTo(searchBtn.snp.leading).offset(-UIDevice.scaleWidth(width: 13))
make.top.equalTo(UIDevice.scaleWidth(width: StatusBarHeight + 10))
}
searchBtn.snp.makeConstraints { make in
make.trailing.equalTo(-UIDevice.scaleWidth(width: 15))
make.centerY.equalTo(bgSearchView)
make.height.equalTo(UIDevice.scaleWidth(width: 30))
}
searchIconView.snp.makeConstraints { make in
make.width.height.equalTo(UIDevice.scaleWidth(width: 28))
make.centerY.equalTo(bgSearchView)
make.leading.equalTo(UIDevice.scaleWidth(width: 9))
}
textField.snp.makeConstraints { make in
make.leading.equalTo(searchIconView.snp.trailing).offset((UIDevice.scaleWidth(width: 0)))
make.trailing.top.bottom.equalTo(bgSearchView)
}
leftArrowBtn.addTarget(self, action: #selector(leftArroAction), for: .touchUpInside)
searchBtn.addTarget(self, action: #selector(searchBtnAction), for: .touchUpInside)
}
@objc func leftArroAction(){
if let clickSearchBlcok = self.clickSearchBlcok{
clickSearchBlcok(0)
}
}
@objc func searchBtnAction(){
textField.resignFirstResponder()
if let clickSearchBlcok = self.clickSearchBlcok{
clickSearchBlcok(1)
}
}
//MARK: -
var clickSearchBlcok:ClickSearchBlcok?
private lazy var leftArrowBtn:UIButton = {
let _leftArrowBtn = UIButton.getCustomBtn(image: UIImage(named: "yin_left_black_arrow"))
_leftArrowBtn.setBtnClickRadius = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
return _leftArrowBtn
}()
private lazy var bgSearchView:UIView = {
let _bgSearchView = UIView()
_bgSearchView.backgroundColor = .white
_bgSearchView.layer.cornerRadius = UIDevice.scaleWidth(width: 30)/2
_bgSearchView.layer.masksToBounds = true
return _bgSearchView
}()
private lazy var searchIconView:UIImageView = {
let _searchIconView = UIImageView()
_searchIconView.isUserInteractionEnabled = true
_searchIconView.image = UIImage(named: "yin_search_vc_iocn")
return _searchIconView
}()
lazy var textField:UITextField = {
let _textField = UITextField()
_textField.layer.cornerRadius = UIDevice.scaleWidth(width: 30)/2
_textField.layer.masksToBounds = true
_textField.tintColor = ThemeColor(hexStr: "#878B9C")
_textField.textColor = ThemeColor(hexStr: "#282828")
_textField.backgroundColor = .clear
_textField.font = UIFont.getScaleFont(ofSize: 13, weight: .regular)
let att = NSAttributedString(string: "搜索昵称/ID/房间名",attributes: [.font:UIFont.getScaleFont(ofSize: 13, weight: .regular),.foregroundColor:ThemeColor(hexStr: "#878B9C")])
_textField.attributedPlaceholder = att
_textField.clearButtonMode = .whileEditing
_textField.returnKeyType = .search
_textField.enablesReturnKeyAutomatically = true
return _textField
}()
private lazy var searchBtn:UIButton = {
let _searchBtn = UIButton.getCustomBtn(text: "搜索",font: UIFont.getScaleFont(ofSize: 16, weight: .medium),color: ThemeColor(hexStr: "#878B9C"))
_searchBtn.setBtnClickRadius = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
return _searchBtn
}()
}

View File

@@ -0,0 +1,166 @@
//
// HomeSearchRoomCell.swift
// yinmeng-ios
//
// Created by yinmeng on 2024/3/21.
//
import UIKit
import Nuke
class HomeSearchRoomCell: UITableViewCell {
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
setUILayout()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
private func setUILayout(){
selectionStyle = .none
backgroundColor = .clear
contentView.addSubview(avatarView)
contentView.addSubview(nickStackView)
contentView.addSubview(idView)
contentView.addSubview(numView)
contentView.addSubview(dividerView)
numView.addSubview(onlienTextView)
numView.addSubview(bgOnlineView)
nickStackView.addArrangedSubview(textVeiw)
nickStackView.addArrangedSubview(genderView)
avatarView.snp.makeConstraints { make in
make.width.height.equalTo(UIDevice.scaleWidth(width: 45))
make.leading.equalTo(UIDevice.scaleWidth(width: 15))
make.centerY.equalTo(contentView)
}
nickStackView.snp.makeConstraints { make in
make.leading.equalTo(avatarView.snp.trailing).offset((UIDevice.scaleWidth(width: 13)))
make.height.equalTo(UIDevice.scaleWidth(width: 20))
make.bottom.equalTo(avatarView.snp.centerY).offset(-UIDevice.scaleWidth(width: 1.5))
}
idView.snp.makeConstraints { make in
make.leading.equalTo(nickStackView)
make.top.equalTo(avatarView.snp.centerY).offset(UIDevice.scaleWidth(width: 1.5))
}
dividerView.snp.makeConstraints { make in
make.leading.equalTo(nickStackView)
make.trailing.equalTo(-UIDevice.scaleWidth(width: 15))
make.bottom.equalTo(contentView)
make.height.equalTo(UIDevice.scaleWidth(width: 1))
}
numView.snp.makeConstraints { make in
make.height.equalTo(UIDevice.scaleWidth(width: 18))
make.trailing.equalTo(-UIDevice.scaleWidth(width: 15))
make.centerY.equalTo(contentView)
make.leading.equalTo(bgOnlineView.snp.leading).offset(-UIDevice.scaleWidth(width: 8))
}
onlienTextView.snp.makeConstraints { make in
make.centerY.equalTo(numView)
make.trailing.equalTo(numView.snp.trailing).offset(-UIDevice.scaleWidth(width:5))
}
bgOnlineView.snp.makeConstraints { make in
make.width.equalTo(UIDevice.scaleWidth(width: 10))
make.height.equalTo(UIDevice.scaleWidth(width: 9))
make.centerY.equalTo(numView)
make.trailing.equalTo(onlienTextView.snp.leading).offset(-UIDevice.scaleWidth(width:3))
}
}
func setModel(model:HomeSearchRoomModel,type:Int){
Nuke.loadImage(with: model.avatar, into: avatarView, completion: nil)
textVeiw.text = type == 0 ? model.title : model.nick
idView.text = "ID:" + model.erbanNo
genderView.image = model.gender == .Boy ? UIImage(named: "yin_plane_star_man") : UIImage(named: "yin_plane_star__woman")
if type == 0{
if model.onlineNum > 100{
onlienTextView.text = "\(model.onlineNum)"
}else{
onlienTextView.text = " \(model.onlineNum) "
}
numView.isHidden = !model.valid
return
}
onlienTextView.text = "直播中"
numView.isHidden = model.roomUid.count <= 0
}
//MARK: -
private lazy var avatarView:UIImageView = {
let _avatarView = UIImageView()
_avatarView.layer.cornerRadius = UIDevice.scaleWidth(width: 45)/2
_avatarView.layer.masksToBounds = true
_avatarView.contentMode = .scaleAspectFill
return _avatarView
}()
private lazy var nickStackView:UIStackView = {
let _nickStackView = UIStackView()
_nickStackView.axis = .horizontal
_nickStackView.distribution = .fill
_nickStackView.alignment = .center
_nickStackView.spacing = UIDevice.scaleWidth(width: 2)
return _nickStackView
}()
private lazy var textVeiw:UILabel = {
let _textVeiw = UILabel.getCustomLabel(font: UIFont.getScaleFont(ofSize: 15, weight: .regular),color: ThemeColor(hexStr: "#878B9C"))
return _textVeiw
}()
private lazy var genderView:UIImageView = {
let _genderView = UIImageView()
_genderView.isUserInteractionEnabled = true
return _genderView
}()
private lazy var idView:UILabel = {
let _idView = UILabel.getCustomLabel(font: UIFont.getScaleFont(ofSize: 13, weight: .regular),color: ThemeColor(hexStr: "#BDBFD0"))
return _idView
}()
private lazy var dividerView:UIView = {
let _dividerView = UIView()
_dividerView.backgroundColor = ThemeColor(hexStr: "#E8E8E8")
return _dividerView
}()
private lazy var numView:UIView = {
let _numView = UIView()
_numView.backgroundColor = .clear
_numView.layer.masksToBounds = true
_numView.layer.cornerRadius = UIDevice.scaleWidth(width: 18)/2
_numView.layer.borderColor = ThemeColor(hexStr: "#248CFE").cgColor
_numView.layer.borderWidth = 1
return _numView
}()
private lazy var bgOnlineView:UIImageView = {
let _bgOnlineView = UIImageView()
_bgOnlineView.image = UIImage(named: "home_search_online_icon")
return _bgOnlineView
}()
private lazy var onlienTextView:UILabel = {
let _onlienTextView = UILabel.getCustomLabel(text: "直播中",font: UIFont.getScaleFont(ofSize: 10, weight: .regular),color: ThemeColor(hexStr: "#248CFE"))
return _onlienTextView
}()
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}

View File

@@ -0,0 +1,28 @@
//
// HomeSearchRoomModel.swift
// yinmeng-ios
//
// Created by yinmeng on 2024/3/21.
//
import Foundation
import HandyJSON
struct HomeSearchRoomModel:HandyJSON{
var avatar = ""
var onlineNum:Int = 0
var uid = ""
var title = ""
var nick = ""
var erbanNo = ""
var valid = false
var gender:UserSexType = .Boy
var roomUid = ""
}

View File

@@ -0,0 +1,93 @@
//
// HomeSearchRoomVC.swift
// yinmeng-ios
//
// Created by yinmeng on 2024/3/21.
//
import UIKit
class HomeSearchRoomVC: BaseViewController {
init(type:Int){
super.init(nibName: nil, bundle: nil)
self.type = type
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func viewDidLoad() {
super.viewDidLoad()
setUILayout()
}
private func setUILayout(){
view.addSubview(tableView)
view.backgroundColor = .clear
tableView.snp.makeConstraints { make in
make.edges.equalTo(view)
}
tableView.delegate = self
tableView.dataSource = self
tableView.register(HomeSearchRoomCell.self, forCellReuseIdentifier: "HomeSearchRoomCell")
}
func requestData(text:String){
let params = ["page":"1","pageSize":"50","key":text,"type":"\(type+1)"]
RequestGet(path: "search/room", parma: params) { data in
if let list = Deserialized<HomeSearchRoomModel>.toArray(with: data) {
self.listData = list
self.tableView.reloadData()
}
} fail: { code, message in
HUDTool.show(with: message)
}
}
var listData:[HomeSearchRoomModel] = []
var type:Int = 0
//MARK: -
private lazy var tableView:UITableView = {
let _tableView = UITableView(frame: .zero, style: .plain)
_tableView.tableHeaderView = UIView()
_tableView.tableFooterView = UIView()
_tableView.separatorStyle = .none
_tableView.backgroundColor = .clear
return _tableView
}()
}
extension HomeSearchRoomVC:JXCategoryListContentViewDelegate,UITableViewDelegate,UITableViewDataSource{
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return listData.count
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UIDevice.scaleWidth(width: 74)
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "HomeSearchRoomCell", for: indexPath) as! HomeSearchRoomCell
cell.setModel(model: listData[indexPath.row], type: type)
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if type == 1 {return}
let model = listData[indexPath.row]
if model.valid {
self.dismiss(animated: true) {
let vc = RoomVC(roomUid: model.uid)
vc.roomText = model.title + "的房间"
let nav = BaseNavigationViewController.init(rootViewController: vc)
nav.modalPresentationStyle = .fullScreen
keyWindow.rootViewController?.present(nav, animated: true, completion: nil)
}
return
}
HUDTool.show(with: "该用户的房间已失效")
}
func listView() -> UIView! {
return self.view
}
}

View File

@@ -0,0 +1,121 @@
//
// HomeSearchVC.swift
// yinmeng-ios
//
// Created by yinmeng on 2024/3/21.
//
import UIKit
class HomeSearchVC: BaseViewController,HiddenNavigationBarProtocol {
override func viewDidLoad() {
super.viewDidLoad()
setUILayout()
requestData()
}
private func setUILayout(){
view.addSubview(navView)
view.addSubview(pageTitleView)
view.addSubview(containerView)
view.backgroundColor = ThemeColor(hexStr: "#F8F8FB")
navView.snp.makeConstraints { make in
make.leading.trailing.top.equalTo(view)
make.height.equalTo(NavHeight)
}
pageTitleView.snp.makeConstraints { make in
make.leading.trailing.equalTo(view).inset(UIDevice.scaleWidth(width: 0))
make.top.equalTo(navView.snp.bottom).offset(UIDevice.scaleWidth(width: 10))
make.height.equalTo(UIDevice.scaleWidth(width: 50))
}
containerView.snp.makeConstraints { make in
make.top.equalTo(pageTitleView.snp.bottom).offset(UIDevice.scaleWidth(width: 10))
make.leading.trailing.bottom.equalTo(view)
}
navView.textField.delegate = self
navView.clickSearchBlcok = {[weak self] type in
guard let self = self else { return }
if type == 0{
self.dismiss(animated: true, completion: nil)
return
}
self.roomView.requestData(text:self.navView.textField.text ?? "")
self.userView.requestData(text: self.navView.textField.text ?? "")
}
pageTitleView.listContainer = containerView
}
private func requestData(){
}
//MARK: -
private lazy var navView:HomeSearchNavView = {
let _navView = HomeSearchNavView(frame: .zero)
return _navView
}()
private lazy var pageTitleView:JXCategoryTitleView = {
let _pageTitleView = JXCategoryTitleView()
_pageTitleView.delegate = self
_pageTitleView.titles = ["房间","用户"]
_pageTitleView.titleColor = ThemeColor(hexStr: "#878B9C")
_pageTitleView.titleSelectedColor = ThemeColor(hexStr: "#282828")
_pageTitleView.titleFont = UIFont.getScaleFont(ofSize: 16, weight: .medium)
_pageTitleView.titleSelectedFont = UIFont.getScaleFont(ofSize: 16, weight: .medium)
_pageTitleView.titleLabelAnchorPointStyle = JXCategoryTitleLabelAnchorPointStyle.center
_pageTitleView.isContentScrollViewClickTransitionAnimationEnabled = false
_pageTitleView.defaultSelectedIndex = 0
let lineView = JXCategoryIndicatorLineView()
lineView.indicatorColor = ThemeColor(hexStr: "#FFE710")
lineView.indicatorWidth = UIDevice.scaleWidth(width: 8)
lineView.indicatorHeight = UIDevice.scaleWidth(width: 8) / 2
lineView.indicatorCornerRadius = UIDevice.scaleWidth(width: 8) / 4
_pageTitleView.indicators = [lineView]
return _pageTitleView
}()
private lazy var containerView:JXCategoryListContainerView = {
let _containerView = JXCategoryListContainerView.init(type: .scrollView, delegate: self)!
_containerView.setDefaultSelectedIndex(0)
return _containerView
}()
private lazy var roomView:HomeSearchRoomVC = {
let _roomView = HomeSearchRoomVC(type: 0)
return _roomView
}()
private lazy var userView:HomeSearchRoomVC = {
let _userView = HomeSearchRoomVC(type: 1)
return _userView
}()
}
extension HomeSearchVC:JXCategoryListContainerViewDelegate,JXCategoryViewDelegate,UITextFieldDelegate{
func number(ofListsInlistContainerView listContainerView: JXCategoryListContainerView!) -> Int {
return 2
}
func listContainerView(_ listContainerView: JXCategoryListContainerView!, initListFor index: Int) -> JXCategoryListContentViewDelegate! {
return index == 0 ? roomView : userView
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
guard let text = textField.text else {
HUDTool.show(with: "请输入需要搜索的内容")
return true
}
if text.count > 0{
textField.resignFirstResponder()
roomView.requestData(text: text)
userView.requestData(text: text)
}else{
HUDTool.show(with: "请输入需要搜索的内容")
}
return true
}
}

View File

@@ -21,4 +21,5 @@ struct HomeVoiceModel : HandyJSON, Codable {
var userVoice = ""
var voiceDura = ""
var userDesc = ""
var birth:Int64 = 0
}

View File

@@ -0,0 +1,55 @@
//
// HomeVoiceSearchView.swift
// yinmeng-ios
//
// Created by yinmeng on 2024/3/20.
//
import UIKit
class HomeVoiceSearchView: 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(bgImageView)
addSubview(iconView)
addSubview(textVeiw)
bgImageView.snp.makeConstraints { make in
make.edges.equalTo(self)
}
iconView.snp.makeConstraints { make in
make.width.height.equalTo(UIDevice.scaleWidth(width: 18))
make.leading.equalTo(UIDevice.scaleWidth(width: 9))
make.centerY.equalTo(self)
}
textVeiw.snp.makeConstraints { make in
make.leading.equalTo(UIDevice.scaleWidth(width: 31))
make.centerY.equalTo(self)
}
}
//MARK: -
private lazy var bgImageView:UIImageView = {
let _bgImageView = UIImageView()
_bgImageView.image = UIImage(named: "yin_home_voice_search_bg")
return _bgImageView
}()
private lazy var iconView:UIImageView = {
let _iconView = UIImageView()
_iconView.image = UIImage(named: "yin_home_voice_search_icon")
return _iconView
}()
private lazy var textVeiw:UILabel = {
let _textVeiw = UILabel.getCustomLabel(text: "搜索房间",font: UIFont.getScaleFont(ofSize: 14, weight: .regular),color: ThemeColor(hexStr: "#CCCCCC"))
return _textVeiw
}()
}

View File

@@ -9,7 +9,7 @@ import UIKit
import Nuke
typealias ClickBtnBlock = (_ type: Int ,_ model:HomeVoiceModel)->Void
typealias ClickBtnBlock = (_ type: Int ,_ uid:String)->Void
class HomeVoiceUserInfoView: UIView {
@@ -33,12 +33,16 @@ class HomeVoiceUserInfoView: UIView {
bgVoiceVeiw.addSubview(playBtn)
bgVoiceVeiw.addSubview(waveView)
bgVoiceVeiw.addSubview(playTimeView)
backgroundView.addSubview(lineView)
backgroundView.addSubview(attentionBtn)
backgroundView.addSubview(lineView1)
backgroundView.addSubview(chatBtn)
backgroundView.addSubview(tagStackView)
tagStackView.addArrangedSubview(attentionBtn)
tagStackView.addArrangedSubview(lineView1)
tagStackView.addArrangedSubview(sendGfitBtn)
tagStackView.addArrangedSubview(lineView2)
tagStackView.addArrangedSubview(chatBtn)
dissView.snp.makeConstraints { make in
make.edges.equalTo(self)
}
@@ -79,7 +83,7 @@ class HomeVoiceUserInfoView: UIView {
make.height.equalTo(128)
}
signatureView.snp.makeConstraints { make in
make.left.top.right.equalTo(16)
make.left.top.right.equalTo(self.bgSignatureView).inset(16)
make.height.equalTo(54)
}
@@ -112,21 +116,22 @@ class HomeVoiceUserInfoView: UIView {
make.top.equalTo(self.bgSignatureView.snp.bottom).offset(16)
}
tagStackView.snp.makeConstraints { make in
make.leading.bottom.trailing.equalTo(backgroundView)
make.top.equalTo(230)
}
lineView1.snp.makeConstraints { make in
make.width.equalTo(1)
make.height.equalTo(18)
make.top.equalTo(237)
make.centerX.equalTo(self.backgroundView)
}
attentionBtn.snp.makeConstraints { make in
make.top.equalTo(self.lineView)
make.bottom.left.equalTo(self.backgroundView)
make.right.equalTo(self.lineView1.snp.left)
}
chatBtn.snp.makeConstraints { make in
make.top.height.width.equalTo(self.attentionBtn)
make.left.equalTo(self.lineView1.snp.right)
lineView2.snp.makeConstraints { make in
make.width.equalTo(1)
make.height.equalTo(18)
}
let layer = CAShapeLayer()
let path = UIBezierPath.init(roundedRect: CGRect(x: 0, y: 0, width: 130, height: 28), byRoundingCorners: [.topRight , .bottomRight,.bottomLeft] , cornerRadii: CGSize(width: 14, height: 14))
layer.path = path.cgPath
@@ -135,18 +140,25 @@ class HomeVoiceUserInfoView: UIView {
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
@objc func sendGiftBtnAction(){
if let _clickBtnBlock = clickBtnBlock,let uid = self.user?.uid{
_clickBtnBlock(5,"\(uid)")
self.removeFromSuperview()
}
}
@objc func attentionBtnAction(){
if self.type == 1{
if let _clickBtnBlock = clickBtnBlock,let _model = self.model{
_clickBtnBlock(3,_model)
if let _clickBtnBlock = clickBtnBlock,let uid = self.model?.uid{
_clickBtnBlock(3,"\(uid)")
}
return
}
self.attentionBtn.isSelected = !self.attentionBtn.isSelected
let type = self.attentionBtn.isSelected ? "1" : "2"
guard let uid = self.model?.uid else{return}
let params = ["uid":"\(AuthManager.userUid)","ticket":AuthManager.ticket,"type":type,"likedUid":"\(uid)"] as [String : Any]
let uid = self.model != nil ? self.model?.uid : self.user?.uid
guard let getUid = uid else{return}
let params = ["uid":"\(AuthManager.userUid)","ticket":AuthManager.ticket,"type":type,"likedUid":"\(getUid)"] as [String : Any]
RequestPost(path: "fans/like", parma: params) { data in
if(self.attentionBtn.isSelected){
@@ -160,15 +172,19 @@ class HomeVoiceUserInfoView: UIView {
}
@objc func chatBtnAction(){
if self.type == 1{
if let _clickBtnBlock = clickBtnBlock,let _model = self.model{
_clickBtnBlock(4,_model)
if let _clickBtnBlock = clickBtnBlock,let uid = self.model?.uid{
_clickBtnBlock(4,"\(uid)")
}
return
}
if let _clickBtnBlock = clickBtnBlock,let _model = self.model{
_clickBtnBlock(0,_model)
if let _clickBtnBlock = clickBtnBlock, let uid = self.model?.uid{
_clickBtnBlock(0,"\(uid)")
}
if let _clickBtnBlock = clickBtnBlock, let uid = self.user?.uid{
_clickBtnBlock(0,"\(uid)")
}
}
@objc func playVoiceAction(){
guard let userVoice = self.model?.userVoice else {
@@ -182,6 +198,42 @@ class HomeVoiceUserInfoView: UIView {
}
}
var user:UserObject? = nil{
didSet{
guard let _user = user else { return }
Nuke.loadImage(with: _user.avatar, into: avatarView)
nameTextView.text = _user.nick
sexImageView.image = _user.gender == .Boy ? UIImage(named: "yin_plane_star_man") : UIImage(named: "yin_plane_star__woman")
signatureView.text = _user.userDesc.isEmpty ? "这个人很懒还没有签名" : _user.userDesc
bgVoiceVeiw.isHidden = true
guard let uid = _user.uid else{return}
let params = ["uid":uid]
RequestGet(path: "user/get", parma: params) { data in
if let info = Deserialized<UserObject>.toModel(with: data) {
self.signatureView.text = info.userDesc.isEmpty ? "这个人很懒还没有签名" : info.userDesc
let timeStamp = info.birth / 1000
let timeInterval:TimeInterval = TimeInterval(timeStamp)
let date = NSDate(timeIntervalSince1970: timeInterval) as Date
self.starView.text = Date.getCalculateWithDate(date: date)
self.starView.isHidden = false
}
} fail: { code, message in
}
RequestGet(path: "fans/islike", parma: ["uid":"\(AuthManager.userUid)","isLikeUid":"\(uid)"]) { data in
if let isLike = data as? Bool{
self.attentionBtn.isSelected = isLike
}
} fail: { code, data in
}
}
}
var model:HomeVoiceModel? = nil {
didSet{
guard let _model = model else {
@@ -190,8 +242,16 @@ class HomeVoiceUserInfoView: UIView {
Nuke.loadImage(with: _model.avatar, into: avatarView)
nameTextView.text = _model.nick
sexImageView.image = _model.gender == 1 ? UIImage(named: "yin_plane_star_man") : UIImage(named: "yin_plane_star__woman")
let timeStamp = _model.birth / 1000
let timeInterval:TimeInterval = TimeInterval(timeStamp)
let date = NSDate(timeIntervalSince1970: timeInterval) as Date
starView.text = Date.getCalculateWithDate(date: date)
starView.text = "天蠍座"
starView.isHidden = false
signatureView.text = _model.userDesc.isEmpty ? "这个人很懒还没有签名" : _model.userDesc
bgVoiceVeiw.isHidden = _model.userVoice.isEmpty
playTimeView.text = "\(_model.voiceDura)\""
@@ -255,6 +315,7 @@ class HomeVoiceUserInfoView: UIView {
_starView.backgroundColor = ThemeColor(hexStr: "#E9E1FF")
_starView.layer.cornerRadius = 9
_starView.layer.masksToBounds = true
_starView.isHidden = true
return _starView
}()
var bgSignatureView:UIView = {
@@ -269,6 +330,7 @@ class HomeVoiceUserInfoView: UIView {
_signatureView.font = UIFont.systemFont(ofSize: 13, weight: .regular)
_signatureView.textColor = ThemeColor(hexStr: "#1F1B4F")
_signatureView.text = ""
_signatureView.numberOfLines = 0
return _signatureView
}()
@@ -298,21 +360,39 @@ class HomeVoiceUserInfoView: UIView {
_playTimeView.font = UIFont.systemFont(ofSize: 14, weight: .medium)
return _playTimeView
}()
var type:Int = 0 {
didSet{
lineView2.isHidden = true
sendGfitBtn.isHidden = true
if type == 0{
attentionBtn.setImage(UIImage(named: "yin_plane_star_no_attention_icon"), for: .normal)
attentionBtn.setTitle(" 关注", for: .normal)
chatBtn.setImage(UIImage(named: "yin_home_voice_chat_icon"), for: .normal)
chatBtn.setTitle(" 私聊", for: .normal)
}else{
}else if type == 1{
attentionBtn.setImage(UIImage(named: "yin_plane_star_pay_icon"), for: .normal)
attentionBtn.setTitle(" 充值", for: .normal)
chatBtn.setImage(UIImage(named: "yin_home_voice_collect_icon"), for: .normal)
chatBtn.setTitle(" 收藏", for: .normal)
}else{
attentionBtn.setImage(UIImage(named: "yin_plane_star_no_attention_icon"), for: .normal)
attentionBtn.setTitle(" 关注", for: .normal)
chatBtn.setImage(UIImage(named: "yin_home_voice_chat_icon"), for: .normal)
chatBtn.setTitle(" 私聊", for: .normal)
lineView2.isHidden = false
sendGfitBtn.isHidden = false
}
}
}
private lazy var tagStackView:UIStackView = {
let _tagStackView = UIStackView()
_tagStackView.axis = .horizontal
_tagStackView.distribution = .fillProportionally
_tagStackView.alignment = .center
_tagStackView.spacing = UIDevice.scaleWidth(width: 0)
return _tagStackView
}()
var attentionBtn:UIButton = {
let _attentionBtn = UIButton()
@@ -326,6 +406,20 @@ class HomeVoiceUserInfoView: UIView {
return _attentionBtn
}()
var sendGfitBtn:UIButton = {
let _sendGfitBtn = UIButton()
_sendGfitBtn.setImage(UIImage(named: "yin_plane_star_send_gift_icon"), for: .normal)
_sendGfitBtn.setTitle(" 送礼", for: .normal)
_sendGfitBtn.setTitleColor(.white, for: .normal)
_sendGfitBtn.titleLabel?.font = UIFont.systemFont(ofSize: 15, weight: .medium)
_sendGfitBtn.setImage(UIImage(named: "yin_plane_star_send_gift_icon"), for: .selected)
_sendGfitBtn.addTarget(self, action: #selector(sendGiftBtnAction), for: .touchUpInside)
return _sendGfitBtn
}()
var chatBtn:UIButton = {
let _chatBtn = UIButton()
@@ -350,5 +444,12 @@ class HomeVoiceUserInfoView: UIView {
return _lineView1
}()
var lineView2:UIView = {
let _lineView2 = UIView()
_lineView2.backgroundColor = UIColor.init(white: 1, alpha: 0.2)
return _lineView2
}()
}

View File

@@ -35,13 +35,13 @@ class HomeVoiceVC: BaseViewController,HiddenNavigationBarProtocol {
}
@objc func userInfoBtnAction(){
let userInfoView:HomeVoiceUserInfoView = HomeVoiceUserInfoView.init(frame: .zero)
userInfoView.clickBtnBlock = {[weak self] (type,model) in
userInfoView.clickBtnBlock = {[weak self] (type,uid) in
guard let weakSelf = self else {
return
}
if type == 3{
let vc = UserPayViewController()
self?.navigationController?.pushViewController(vc, animated: true)
weakSelf.navigationController?.pushViewController(vc, animated: true)
return
}
}
@@ -69,6 +69,7 @@ class HomeVoiceVC: BaseViewController,HiddenNavigationBarProtocol {
view.addSubview(backgroundView)
view.addSubview(scrollView)
scrollView.addSubview(topLogoIcon)
scrollView.addSubview(searchView)
scrollView.addSubview(chooseItemVeiw)
scrollView.addSubview(changeItemView)
scrollView.addSubview(userInfoBtn)
@@ -89,9 +90,16 @@ class HomeVoiceVC: BaseViewController,HiddenNavigationBarProtocol {
topLogoIcon.snp.makeConstraints { make in
make.left.equalTo(20)
make.top.equalTo(14 + NavHeight)
make.width.equalTo(260)
make.width.equalTo(76)
make.height.equalTo(23)
}
searchView.snp.makeConstraints { make in
make.leading.equalTo(topLogoIcon.snp.trailing).offset((UIDevice.scaleWidth(width: 18)))
make.height.equalTo(UIDevice.scaleWidth(width: 30))
make.width.equalTo(UIDevice.scaleWidth(width: 240))
make.centerY.equalTo(topLogoIcon)
}
chooseItemVeiw.snp.makeConstraints { make in
make.left.equalTo(20)
make.top.equalTo(self.topLogoIcon.snp.bottom).offset(18)
@@ -172,13 +180,14 @@ class HomeVoiceVC: BaseViewController,HiddenNavigationBarProtocol {
return
}
let userInfoView:HomeVoiceUserInfoView = HomeVoiceUserInfoView.init(frame: .zero)
userInfoView.clickBtnBlock = {[weak self] (type,model) in
userInfoView.clickBtnBlock = {[weak self] (type,uid) in
let session = NIMSession("\(model.uid)", type: .P2P)
let session = NIMSession(uid, type: .P2P)
let chatVC = ChatVC.init(session: session)
self?.navigationController?.pushViewController(chatVC, animated: true)
}
userInfoView.model = model
userInfoView.type = 0
weakSelf.view.addSubview(userInfoView)
userInfoView.snp.makeConstraints { make in
make.edges.equalTo(weakSelf.view)
@@ -192,8 +201,15 @@ class HomeVoiceVC: BaseViewController,HiddenNavigationBarProtocol {
make.edges.equalTo((self?.view)!)
}
}
let searchTap = UITapGestureRecognizer(target: self, action: #selector(clickSearchAction))
searchView.addGestureRecognizer(searchTap)
}
@objc func clickSearchAction(){
let searchVC = HomeSearchVC()
searchVC.modalPresentationStyle = .fullScreen
navigationController?.present(searchVC, animated: true, completion: nil)
}
@objc func clickLongTapAction(sender:UIPanGestureRecognizer){
let i = (sender.view?.tag ?? 100) - 100
if sender.state == .began{
@@ -233,12 +249,13 @@ class HomeVoiceVC: BaseViewController,HiddenNavigationBarProtocol {
}
let userInfoView:HomeVoiceUserInfoView = HomeVoiceUserInfoView.init(frame: .zero)
userInfoView.clickBtnBlock = {[weak self] (type,model) in
userInfoView.clickBtnBlock = {[weak self] (type,uid) in
let session = NIMSession("\(model.uid)", type: .P2P)
let session = NIMSession(uid, type: .P2P)
let chatVC = ChatVC.init(session: session)
self?.navigationController?.pushViewController(chatVC, animated: true)
}
userInfoView.type = 0
userInfoView.model = view.model
self.view.addSubview(userInfoView)
userInfoView.snp.makeConstraints { make in
@@ -321,7 +338,11 @@ class HomeVoiceVC: BaseViewController,HiddenNavigationBarProtocol {
_changeItemView.text = "换一换"
return _changeItemView
}()
private lazy var searchView:HomeVoiceSearchView = {
let _searchView = HomeVoiceSearchView(frame: .zero)
return _searchView
}()
var userInfoBtn:UIButton = {
let _userInfoBtn = UIButton()
_userInfoBtn.setBackgroundImage(UIImage(named: "yin_home_voice_user_info_bg"), for: .normal)

View File

@@ -90,7 +90,52 @@ class PlayVoiceManager: NSObject,AVAudioPlayerDelegate {
downloadTask.resume()
}
static func downloadFile(url:String,complete:@escaping(_ url:String)->Void,fail:@escaping()->Void){
let list = url.components(separatedBy: "/")
var name = "FileList"
if list.isEmpty == false,let getName = list.last{
name = getName
}
let path = NSSearchPathForDirectoriesInDomains(.documentDirectory,.userDomainMask,true)[0] as String
let allPath = path + "/kUserFile/" + name
if FileManager.default.fileExists(atPath: allPath){
complete(allPath)
}else{
do {
try FileManager.default.createDirectory(atPath: allPath, withIntermediateDirectories: true, attributes: nil)
//
let request = URLRequest(url: URL(string: url)!)
let session = URLSession.shared
//
let downloadTask = session.downloadTask(with: request,
completionHandler: { (location:URL?, response:URLResponse?, error:Error?)
-> Void in
guard let locationPath = location?.path else{return}
do {
if FileManager.default.fileExists(atPath: allPath){
try FileManager.default.removeItem(atPath: allPath)
}
// document
try FileManager.default.copyItem(atPath: locationPath, toPath: allPath)
// main
DispatchQueue.main.async {
complete(allPath)
}
} catch let error {
fail()
}
})
//使resume
downloadTask.resume()
}catch let error{
fail()
}
}
}

View File

@@ -219,7 +219,17 @@ public class UserPayViewManager: NSObject {
_ConditionBlock(StoreConditionResult.VerifiedServer,dic)
}
}
// 退
@objc public func refunRequest(view: UIView,transactionId:UInt64) async{
do {
if let scene = await view.window?.windowScene{
try await Transaction.beginRefundRequest(for:transactionId , in: scene)
}
}catch{
print("iap error")
}
}
//
func _listenForTransactions() -> Task<Void, Error> {
return Task.detached {

View File

@@ -2,7 +2,7 @@
// RoomChatData.swift
// yinmeng-ios
//
// Created by duoban on 2024/3/11.
// Created by yinmeng on 2024/3/11.
//
import Foundation

View File

@@ -2,7 +2,7 @@
// RoomDataModel.swift
// yinmeng-ios
//
// Created by duoban on 2024/3/11.
// Created by yinmeng on 2024/3/11.
//
import Foundation
@@ -23,5 +23,9 @@ struct RoomDataModel : HandyJSON {
var onlineNum:Int = 0
var defUser = ""
var type:Int = 3
var audioSdkType = ""
var showGiftValue = false
var leaveMode = false
var gender:UserSexType? = .Boy
var isReselect = false
}

View File

@@ -0,0 +1,59 @@
//
// YinRoomAgoraManager.swift
// yinmeng-ios
//
// Created by yinmeng on 2024/3/22.
//
import UIKit
class YinRoomAgoraManager: NSObject {
func initAgora(){
let manager = AgoraRtcEngineKit.sharedEngine(withAppId: AppKeys.agoraKey, delegate: self)
manager.setChannelProfile(.liveBroadcasting)
manager.startLastmileProbeTest(nil)
manager.setParameters("{\"che.audio.keep.audiosession\":true}")
manager.enableAudio()
manager.disableVideo()
manager.enableAudioVolumeIndication(900, smooth: 3, reportVad: true)
manager.setAudioProfile(.musicStandard)
manager.setAudioScenario(.gameStreaming)
#if DEBUG
manager.setLogFilter(0x000f)
#else
manager.setLogFilter(0)
#endif
self.manager = manager
}
func setAgora(roomUid:String){
manager?.setClientRole(.audience)
manager?.joinChannel(byToken: nil, channelId: roomUid, info: nil, uid: UInt(AuthManager.userUid)) { c, uid, e in
self.manager?.muteAllRemoteAudioStreams(false)
self.muteLocalAudio(mute: false)
}
}
func muteLocalAudio(mute:Bool){
manager?.muteLocalAudioStream(mute)
}
func setBroadcast(isChange:Bool){
manager?.setClientRole(isChange ? .broadcaster : .audience)
}
func exitRoom(){
manager?.leaveChannel { stats in
}
}
func destroySharedIntance(){
AgoraRtcEngineKit.destroy()
}
private var manager:AgoraRtcEngineKit?
}
extension YinRoomAgoraManager:AgoraRtcEngineDelegate{
func rtcEngine(_ engine: AgoraRtcEngineKit, reportAudioVolumeIndicationOfSpeakers speakers: [AgoraRtcAudioVolumeInfo], totalVolume: Int) {
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "kReceiveUserVoiceVolume") , object: nil, userInfo: ["userVolumes":speakers,"totalVolume":totalVolume,"type":"agora"])
}
}

View File

@@ -0,0 +1,82 @@
//
// YinRoomAudioanager.swift
// yinmeng-ios
//
// Created by yinmeng on 2024/3/22.
//
import UIKit
enum YinRoomAudioManagerType {
case trtc,agora
}
class YinRoomAudioManager: NSObject {
static let share = YinRoomAudioManager()
var type:YinRoomAudioManagerType = .trtc
var roomId = ""
func dealWithChatData(roomData:RoomDataModel){
if roomId == roomData.roomId{
return
}
roomId = roomData.roomId
type = roomData.audioSdkType == "trtc" ? .trtc : .agora
if type == .trtc{
roomTRTCManager.initRTRC()
roomTRTCManager.roomData = roomData
roomTRTCManager.setTRTC()
}else{
agoraManager.initAgora()
agoraManager.setAgora(roomUid: roomData.roomId)
}
}
func muteLocalAudio(mute:Bool){
if type == .trtc{
roomTRTCManager.muteLocalAudio(mute: mute)
}else{
agoraManager.muteLocalAudio(mute: mute)
}
}
func setBroadcast(isChange:Bool){
if type == .trtc{
roomTRTCManager.setBroadcast(isChange: isChange)
}else{
agoraManager.setBroadcast(isChange: isChange)
}
}
func exitRoom(){
if type == .trtc{
roomTRTCManager.exitRoom()
}else{
agoraManager.exitRoom()
}
}
func destroySharedIntance(){
if type == .trtc{
roomTRTCManager.destroySharedIntance()
}else{
agoraManager.destroySharedIntance()
}
roomId = ""
}
//MARK: -
private lazy var roomTRTCManager:YinRoomTRTCManager = {
let _roomTRTCManager = YinRoomTRTCManager()
return _roomTRTCManager
}()
private lazy var agoraManager:YinRoomAgoraManager = {
let _agoraManager = YinRoomAgoraManager()
return _agoraManager
}()
}

Some files were not shown because too many files have changed in this diff Show More