Compare commits
13 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
b87bc8a068 | ||
![]() |
b53b5c8a6a | ||
![]() |
f776893134 | ||
![]() |
60dcf38ea2 | ||
![]() |
7e299b9212 | ||
![]() |
cf2eeb9a00 | ||
![]() |
c971ac589e | ||
![]() |
a65270f974 | ||
![]() |
43e5f14a83 | ||
![]() |
2b5a1eb2a5 | ||
![]() |
aeb26daad6 | ||
![]() |
88512c6a48 | ||
![]() |
6c2c5d586a |
7
Podfile
@@ -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
|
||||
|
@@ -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";
|
||||
|
@@ -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())
|
||||
}
|
||||
|
||||
}
|
||||
|
22
yinmeng-ios/Assets.xcassets/Home/home_search_online_icon.imageset/Contents.json
vendored
Normal 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
|
||||
}
|
||||
}
|
BIN
yinmeng-ios/Assets.xcassets/Home/home_search_online_icon.imageset/home_search_online_icon@2x.png
vendored
Normal file
After Width: | Height: | Size: 187 B |
BIN
yinmeng-ios/Assets.xcassets/Home/home_search_online_icon.imageset/home_search_online_icon@3x.png
vendored
Normal file
After Width: | Height: | Size: 222 B |
22
yinmeng-ios/Assets.xcassets/Home/yin_home_voice_search_bg.imageset/Contents.json
vendored
Normal 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
|
||||
}
|
||||
}
|
BIN
yinmeng-ios/Assets.xcassets/Home/yin_home_voice_search_bg.imageset/yin_home_voice_search_bg@2x.png
vendored
Normal file
After Width: | Height: | Size: 515 B |
BIN
yinmeng-ios/Assets.xcassets/Home/yin_home_voice_search_bg.imageset/yin_home_voice_search_bg@3x.png
vendored
Normal file
After Width: | Height: | Size: 881 B |
22
yinmeng-ios/Assets.xcassets/Home/yin_home_voice_search_icon.imageset/Contents.json
vendored
Normal 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
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 830 B |
After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 5.6 KiB After Width: | Height: | Size: 5.0 KiB |
22
yinmeng-ios/Assets.xcassets/Home/yin_left_black_arrow.imageset/Contents.json
vendored
Normal 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
|
||||
}
|
||||
}
|
BIN
yinmeng-ios/Assets.xcassets/Home/yin_left_black_arrow.imageset/yin_left_black_arrow@2x.png
vendored
Normal file
After Width: | Height: | Size: 363 B |
BIN
yinmeng-ios/Assets.xcassets/Home/yin_left_black_arrow.imageset/yin_left_black_arrow@3x.png
vendored
Normal file
After Width: | Height: | Size: 468 B |
22
yinmeng-ios/Assets.xcassets/Home/yin_plane_star_send_gift_icon.imageset/Contents.json
vendored
Normal 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
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 2.9 KiB |
22
yinmeng-ios/Assets.xcassets/Home/yin_search_vc_iocn.imageset/Contents.json
vendored
Normal 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
|
||||
}
|
||||
}
|
BIN
yinmeng-ios/Assets.xcassets/Home/yin_search_vc_iocn.imageset/yin_search_vc_iocn@2x.png
vendored
Normal file
After Width: | Height: | Size: 570 B |
BIN
yinmeng-ios/Assets.xcassets/Home/yin_search_vc_iocn.imageset/yin_search_vc_iocn@3x.png
vendored
Normal file
After Width: | Height: | Size: 703 B |
6
yinmeng-ios/Assets.xcassets/room/Gift/Contents.json
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
22
yinmeng-ios/Assets.xcassets/room/Gift/room_gift_slect_bg.imageset/Contents.json
vendored
Normal 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
|
||||
}
|
||||
}
|
BIN
yinmeng-ios/Assets.xcassets/room/Gift/room_gift_slect_bg.imageset/room_gift_slect_bg@2x.png
vendored
Normal file
After Width: | Height: | Size: 643 B |
BIN
yinmeng-ios/Assets.xcassets/room/Gift/room_gift_slect_bg.imageset/room_gift_slect_bg@3x.png
vendored
Normal file
After Width: | Height: | Size: 997 B |
22
yinmeng-ios/Assets.xcassets/room/Gift/yin_room_gift_arrow.imageset/Contents.json
vendored
Normal 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
|
||||
}
|
||||
}
|
BIN
yinmeng-ios/Assets.xcassets/room/Gift/yin_room_gift_arrow.imageset/yin_room_gift_arrow@2x.png
vendored
Normal file
After Width: | Height: | Size: 181 B |
BIN
yinmeng-ios/Assets.xcassets/room/Gift/yin_room_gift_arrow.imageset/yin_room_gift_arrow@3x.png
vendored
Normal file
After Width: | Height: | Size: 254 B |
22
yinmeng-ios/Assets.xcassets/room/Gift/yin_room_gift_diamond.imageset/Contents.json
vendored
Normal 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
|
||||
}
|
||||
}
|
BIN
yinmeng-ios/Assets.xcassets/room/Gift/yin_room_gift_diamond.imageset/yin_room_gift_diamond@2x.png
vendored
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
yinmeng-ios/Assets.xcassets/room/Gift/yin_room_gift_diamond.imageset/yin_room_gift_diamond@3x.png
vendored
Normal file
After Width: | Height: | Size: 2.5 KiB |
22
yinmeng-ios/Assets.xcassets/room/Gift/yin_room_gift_select.imageset/Contents.json
vendored
Normal 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
|
||||
}
|
||||
}
|
BIN
yinmeng-ios/Assets.xcassets/room/Gift/yin_room_gift_select.imageset/yin_room_gift_select@2x.png
vendored
Normal file
After Width: | Height: | Size: 643 B |
BIN
yinmeng-ios/Assets.xcassets/room/Gift/yin_room_gift_select.imageset/yin_room_gift_select@3x.png
vendored
Normal file
After Width: | Height: | Size: 997 B |
22
yinmeng-ios/Assets.xcassets/room/Gift/yin_room_gift_tag_dedicated.imageset/Contents.json
vendored
Normal 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
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 666 B |
After Width: | Height: | Size: 1.1 KiB |
22
yinmeng-ios/Assets.xcassets/room/Gift/yin_room_gift_tag_effect.imageset/Contents.json
vendored
Normal 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
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 748 B |
After Width: | Height: | Size: 1.1 KiB |
22
yinmeng-ios/Assets.xcassets/room/Gift/yin_room_gift_tag_latest.imageset/Contents.json
vendored
Normal 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
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 1.7 KiB |
22
yinmeng-ios/Assets.xcassets/room/Gift/yin_room_gift_tag_limit.imageset/Contents.json
vendored
Normal 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
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.7 KiB |
22
yinmeng-ios/Assets.xcassets/room/Gift/yin_room_gift_up_arrow.imageset/Contents.json
vendored
Normal 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
|
||||
}
|
||||
}
|
BIN
yinmeng-ios/Assets.xcassets/room/Gift/yin_room_gift_up_arrow.imageset/yin_room_gift_up_arrow@2x.png
vendored
Normal file
After Width: | Height: | Size: 222 B |
BIN
yinmeng-ios/Assets.xcassets/room/Gift/yin_room_gift_up_arrow.imageset/yin_room_gift_up_arrow@3x.png
vendored
Normal file
After Width: | Height: | Size: 292 B |
22
yinmeng-ios/Assets.xcassets/room/MicSeat/room_send_gift_icon.imageset/Contents.json
vendored
Normal 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
|
||||
}
|
||||
}
|
BIN
yinmeng-ios/Assets.xcassets/room/MicSeat/room_send_gift_icon.imageset/room_send_gift_icon@2x.png
vendored
Normal file
After Width: | Height: | Size: 2.9 KiB |
BIN
yinmeng-ios/Assets.xcassets/room/MicSeat/room_send_gift_icon.imageset/room_send_gift_icon@3x.png
vendored
Normal file
After Width: | Height: | Size: 4.3 KiB |
6
yinmeng-ios/Assets.xcassets/room/Rank/Contents.json
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
22
yinmeng-ios/Assets.xcassets/room/Rank/yin_room_rank_first.imageset/Contents.json
vendored
Normal 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
|
||||
}
|
||||
}
|
BIN
yinmeng-ios/Assets.xcassets/room/Rank/yin_room_rank_first.imageset/yin_room_rank_first@2x.png
vendored
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
yinmeng-ios/Assets.xcassets/room/Rank/yin_room_rank_first.imageset/yin_room_rank_first@3x.png
vendored
Normal file
After Width: | Height: | Size: 2.0 KiB |
22
yinmeng-ios/Assets.xcassets/room/Rank/yin_room_rank_second.imageset/Contents.json
vendored
Normal 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
|
||||
}
|
||||
}
|
BIN
yinmeng-ios/Assets.xcassets/room/Rank/yin_room_rank_second.imageset/yin_room_rank_second@2x.png
vendored
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
yinmeng-ios/Assets.xcassets/room/Rank/yin_room_rank_second.imageset/yin_room_rank_second@3x.png
vendored
Normal file
After Width: | Height: | Size: 1.9 KiB |
22
yinmeng-ios/Assets.xcassets/room/Rank/yin_room_rank_third.imageset/Contents.json
vendored
Normal 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
|
||||
}
|
||||
}
|
BIN
yinmeng-ios/Assets.xcassets/room/Rank/yin_room_rank_third.imageset/yin_room_rank_third@2x.png
vendored
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
yinmeng-ios/Assets.xcassets/room/Rank/yin_room_rank_third.imageset/yin_room_rank_third@3x.png
vendored
Normal file
After Width: | Height: | Size: 2.0 KiB |
@@ -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
|
||||
|
@@ -23,6 +23,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
- (void)initWithRecord;
|
||||
-(void)stopRecord;
|
||||
- (void)playFilePathVoice;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
|
@@ -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
|
@@ -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
|
16
yinmeng-ios/Base/Security/YinGetPointGroup.h
Normal 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
|
68
yinmeng-ios/Base/Security/YinGetPointGroup.m
Normal 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
|
@@ -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"
|
||||
|
@@ -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
|
||||
}
|
||||
|
@@ -2,7 +2,7 @@
|
||||
// Enum.swift
|
||||
// yinmeng-ios
|
||||
//
|
||||
// Created by duoban on 2024/3/6.
|
||||
// Created by yinmeng on 2024/3/6.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
@@ -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"
|
||||
}
|
||||
|
@@ -21,7 +21,8 @@ let keyWindow = UIApplication.shared.windows.first!
|
||||
|
||||
let DesKey = "1ea53d260ecf11e7b56e00163e046a26"
|
||||
|
||||
let H5_URL = "http://beta.h5.ymlive.fun"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@@ -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)
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -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)
|
||||
}
|
||||
}
|
||||
|
@@ -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
|
||||
}
|
||||
|
||||
|
@@ -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{
|
||||
|
@@ -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)
|
||||
|
12
yinmeng-ios/Modules/Auth/VM/YinClientInfoModel.swift
Normal 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] = []
|
||||
}
|
13
yinmeng-ios/Modules/Auth/VM/YinRankH5UrlModel.swift
Normal 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 = ""
|
||||
}
|
26
yinmeng-ios/Modules/Chat/Model/ChatCustomMsgModel.swift
Normal 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 ""
|
||||
}
|
||||
|
||||
}
|
16
yinmeng-ios/Modules/Chat/Model/ChatMsgRemoteModel.swift
Normal 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() {
|
||||
|
||||
}
|
||||
|
||||
}
|
@@ -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
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
115
yinmeng-ios/Modules/Home/HomeSearchNavView.swift
Normal 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
|
||||
}()
|
||||
}
|
166
yinmeng-ios/Modules/Home/HomeSearchRoomCell.swift
Normal 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
|
||||
}
|
||||
|
||||
}
|
28
yinmeng-ios/Modules/Home/HomeSearchRoomModel.swift
Normal 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 = ""
|
||||
}
|
93
yinmeng-ios/Modules/Home/HomeSearchRoomVC.swift
Normal 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
|
||||
}
|
||||
|
||||
|
||||
}
|
121
yinmeng-ios/Modules/Home/HomeSearchVC.swift
Normal 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
|
||||
}
|
||||
}
|
@@ -21,4 +21,5 @@ struct HomeVoiceModel : HandyJSON, Codable {
|
||||
var userVoice = ""
|
||||
var voiceDura = ""
|
||||
var userDesc = ""
|
||||
var birth:Int64 = 0
|
||||
}
|
||||
|
55
yinmeng-ios/Modules/Home/HomeVoiceSearchView.swift
Normal 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
|
||||
}()
|
||||
}
|
@@ -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
|
||||
|
||||
|
||||
}()
|
||||
}
|
||||
|
@@ -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)
|
||||
|
@@ -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()
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@@ -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 {
|
||||
|
@@ -2,7 +2,7 @@
|
||||
// RoomChatData.swift
|
||||
// yinmeng-ios
|
||||
//
|
||||
// Created by duoban on 2024/3/11.
|
||||
// Created by yinmeng on 2024/3/11.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
@@ -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
|
||||
}
|
||||
|
59
yinmeng-ios/Modules/Room/Tool/YinRoomAgoraManager.swift
Normal 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"])
|
||||
}
|
||||
}
|
82
yinmeng-ios/Modules/Room/Tool/YinRoomAudioManager.swift
Normal 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
|
||||
}()
|
||||
}
|