From 139590292f3154f44ff3c65ec0cb5f3d64f972e6 Mon Sep 17 00:00:00 2001 From: fengshuo <963787902@qq.com> Date: Fri, 22 Apr 2022 17:56:58 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B6=88=E6=81=AF=E6=A8=A1=E5=9D=97=E2=80=94?= =?UTF-8?q?=E2=80=94=E5=B0=8F=E7=A7=98=E4=B9=A6=E8=B7=B3=E8=BD=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- xplan-ios.xcodeproj/project.pbxproj | 15 +- .../Contents.json | 22 +++ .../message_content_upgrade_charm@2x.png | Bin 0 -> 4732 bytes .../message_content_upgrade_charm@3x.png | Bin 0 -> 8852 bytes .../Contents.json | 22 +++ .../message_content_upgrade_expre@2x.png | Bin 0 -> 5251 bytes .../message_content_upgrade_expre@3x.png | Bin 0 -> 11877 bytes .../SessionContent/ContentSecretaryModel.h | 50 +++++++ .../SessionContent/ContentSecretaryModel.m | 12 ++ xplan-ios/Main/Message/View/NIMMessageUtils.m | 2 +- .../Session/Content/MessageConentAudioView.m | 2 +- .../Content/MessageContentLevelUpgradeView.m | 20 +-- .../Content/MessageContentOpenLiveView.m | 5 +- .../Content/MessageContentTextClickable.m | 137 ++++++++++++++---- .../View/XPMineDressUpViewController.h | 3 + .../View/XPMineDressUpViewController.m | 6 + 16 files changed, 244 insertions(+), 52 deletions(-) create mode 100644 xplan-ios/Assets.xcassets/SessionMessage/message_content_upgrade_charm.imageset/Contents.json create mode 100644 xplan-ios/Assets.xcassets/SessionMessage/message_content_upgrade_charm.imageset/message_content_upgrade_charm@2x.png create mode 100644 xplan-ios/Assets.xcassets/SessionMessage/message_content_upgrade_charm.imageset/message_content_upgrade_charm@3x.png create mode 100644 xplan-ios/Assets.xcassets/SessionMessage/message_content_upgrade_expre.imageset/Contents.json create mode 100644 xplan-ios/Assets.xcassets/SessionMessage/message_content_upgrade_expre.imageset/message_content_upgrade_expre@2x.png create mode 100644 xplan-ios/Assets.xcassets/SessionMessage/message_content_upgrade_expre.imageset/message_content_upgrade_expre@3x.png create mode 100644 xplan-ios/Main/Message/Model/SessionContent/ContentSecretaryModel.h create mode 100644 xplan-ios/Main/Message/Model/SessionContent/ContentSecretaryModel.m diff --git a/xplan-ios.xcodeproj/project.pbxproj b/xplan-ios.xcodeproj/project.pbxproj index 12e54e1b..f71af357 100644 --- a/xplan-ios.xcodeproj/project.pbxproj +++ b/xplan-ios.xcodeproj/project.pbxproj @@ -404,8 +404,6 @@ E84150C227747BF700A7F548 /* FirstRechargeModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E84150C127747BF700A7F548 /* FirstRechargeModel.m */; }; E84150C527747E0900A7F548 /* FirstRechargeRewardModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E84150C427747E0900A7F548 /* FirstRechargeRewardModel.m */; }; E841ED61280FB0BD00904808 /* ContentLevelUpgradeModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E841ED60280FB0BD00904808 /* ContentLevelUpgradeModel.m */; }; - E84843AF27F59E7E0050D365 /* XPRoomPKResultView.m in Sources */ = {isa = PBXBuildFile; fileRef = E84843AE27F59E7E0050D365 /* XPRoomPKResultView.m */; }; - E84843B227F5A0740050D365 /* XPRomPKResultTitleLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = E84843B127F5A0740050D365 /* XPRomPKResultTitleLabel.m */; }; E84B0E3F2727EDF6008818C6 /* XPRoomMessageTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E84B0E3E2727EDF6008818C6 /* XPRoomMessageTableViewCell.m */; }; E84B0E422727EE0A008818C6 /* XPRoomMessageHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = E84B0E412727EE0A008818C6 /* XPRoomMessageHeaderView.m */; }; E84B0E462727EF9D008818C6 /* XPRoomMessageParser.m in Sources */ = {isa = PBXBuildFile; fileRef = E84B0E452727EF9D008818C6 /* XPRoomMessageParser.m */; }; @@ -738,6 +736,7 @@ E8EEB91D26FC9D58007C6EBA /* XPMineUserInfoDateView.m in Sources */ = {isa = PBXBuildFile; fileRef = E8EEB91C26FC9D58007C6EBA /* XPMineUserInfoDateView.m */; }; E8F1558D28124D5200EE8C06 /* MessageConentAudioView.m in Sources */ = {isa = PBXBuildFile; fileRef = E8F1558C28124D5200EE8C06 /* MessageConentAudioView.m */; }; E8F1559028125E2D00EE8C06 /* MessageAudioCenter.m in Sources */ = {isa = PBXBuildFile; fileRef = E8F1558F28125E2D00EE8C06 /* MessageAudioCenter.m */; }; + E8F1559328129EBA00EE8C06 /* ContentSecretaryModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E8F1559228129EBA00EE8C06 /* ContentSecretaryModel.m */; }; E8F9168427EC913C00F10D8F /* XPHomeLittleGameViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E8F9168327EC913C00F10D8F /* XPHomeLittleGameViewController.m */; }; E8F9168727EC927C00F10D8F /* XPHomeLittleGamePesenter.m in Sources */ = {isa = PBXBuildFile; fileRef = E8F9168627EC927C00F10D8F /* XPHomeLittleGamePesenter.m */; }; E8F9168B27EC940E00F10D8F /* XPHomeLittleGameTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E8F9168A27EC940E00F10D8F /* XPHomeLittleGameTableViewCell.m */; }; @@ -1547,10 +1546,6 @@ E84150C427747E0900A7F548 /* FirstRechargeRewardModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FirstRechargeRewardModel.m; sourceTree = ""; }; E841ED5F280FB0BD00904808 /* ContentLevelUpgradeModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ContentLevelUpgradeModel.h; sourceTree = ""; }; E841ED60280FB0BD00904808 /* ContentLevelUpgradeModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ContentLevelUpgradeModel.m; sourceTree = ""; }; - E84843AD27F59E7E0050D365 /* XPRoomPKResultView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPRoomPKResultView.h; sourceTree = ""; }; - E84843AE27F59E7E0050D365 /* XPRoomPKResultView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPRoomPKResultView.m; sourceTree = ""; }; - E84843B027F5A0740050D365 /* XPRomPKResultTitleLabel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPRomPKResultTitleLabel.h; sourceTree = ""; }; - E84843B127F5A0740050D365 /* XPRomPKResultTitleLabel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPRomPKResultTitleLabel.m; sourceTree = ""; }; E84B0E3D2727EDF6008818C6 /* XPRoomMessageTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPRoomMessageTableViewCell.h; sourceTree = ""; }; E84B0E3E2727EDF6008818C6 /* XPRoomMessageTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPRoomMessageTableViewCell.m; sourceTree = ""; }; E84B0E402727EE0A008818C6 /* XPRoomMessageHeaderView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPRoomMessageHeaderView.h; sourceTree = ""; }; @@ -2220,6 +2215,8 @@ E8F1558C28124D5200EE8C06 /* MessageConentAudioView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MessageConentAudioView.m; sourceTree = ""; }; E8F1558E28125E2D00EE8C06 /* MessageAudioCenter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MessageAudioCenter.h; sourceTree = ""; }; E8F1558F28125E2D00EE8C06 /* MessageAudioCenter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MessageAudioCenter.m; sourceTree = ""; }; + E8F1559128129EBA00EE8C06 /* ContentSecretaryModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ContentSecretaryModel.h; sourceTree = ""; }; + E8F1559228129EBA00EE8C06 /* ContentSecretaryModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ContentSecretaryModel.m; sourceTree = ""; }; E8F9168227EC913C00F10D8F /* XPHomeLittleGameViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPHomeLittleGameViewController.h; sourceTree = ""; }; E8F9168327EC913C00F10D8F /* XPHomeLittleGameViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPHomeLittleGameViewController.m; sourceTree = ""; }; E8F9168527EC927C00F10D8F /* XPHomeLittleGamePesenter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPHomeLittleGamePesenter.h; sourceTree = ""; }; @@ -4282,6 +4279,8 @@ E83ABF02280EC90C00322EE4 /* ContentApplicationShareModel.m */, E841ED5F280FB0BD00904808 /* ContentLevelUpgradeModel.h */, E841ED60280FB0BD00904808 /* ContentLevelUpgradeModel.m */, + E8F1559128129EBA00EE8C06 /* ContentSecretaryModel.h */, + E8F1559228129EBA00EE8C06 /* ContentSecretaryModel.m */, ); path = SessionContent; sourceTree = ""; @@ -6402,8 +6401,6 @@ E8E70D7A26F2F16600F03460 /* XPMinePresent.m in Sources */, E855516128059228005F293F /* XPMineGuildIncomeDetailViewController.m in Sources */, E8A1E45B27620F4900B294CA /* XPRoomHalfWebView.m in Sources */, - 9B7D80562753C595003DAC0C /* SendMessageView.m in Sources */, - E8A88D3027E85EEA00CA8837 /* RoomPKInfoModel.m in Sources */, E8A86E0527BA38DB001C21F9 /* NSString+RW.m in Sources */, E800162C2803FE4900D6D17A /* GuildIncomeRecordModel.m in Sources */, E83ABF03280EC90C00322EE4 /* ContentApplicationShareModel.m in Sources */, @@ -6702,7 +6699,6 @@ 18E7B33226F317A20064BC9B /* XPWebViewController.m in Sources */, E8AEAEF927141CA30017FCE0 /* RoomHeaderView.m in Sources */, 9B1B729828002147003FACE9 /* XPMineFansTeamPresenter.m in Sources */, - E8A88D2A27E81C8600CA8837 /* XPRoomPKUserCollectionViewCell.m in Sources */, E8D55CA0281186D6006935A5 /* SessionAudioRecordView.m in Sources */, 9B7B606627BBA0EE0070BB72 /* XPAnchorAttentSendInfo.m in Sources */, E81C1B29277069DD0020D1E4 /* XPArrangeMicEmptyTableViewCell.m in Sources */, @@ -6810,6 +6806,7 @@ 9B0997A327F19DE500EB8F14 /* QGHWDShaders.metal in Sources */, 187EEEE126E89BFB002833B2 /* AccountModel.m in Sources */, E896EFA92771AEEC00AD2CC1 /* XPMineAttentionTableViewCell.m in Sources */, + E8F1559328129EBA00EE8C06 /* ContentSecretaryModel.m in Sources */, 9BBC02912786FC570007C24B /* XPMineNobleCardTableViewCell.m in Sources */, E8F9168727EC927C00F10D8F /* XPHomeLittleGamePesenter.m in Sources */, E8AC722126F47E23007D6E91 /* XPMineAboutUsViewController.m in Sources */, diff --git a/xplan-ios/Assets.xcassets/SessionMessage/message_content_upgrade_charm.imageset/Contents.json b/xplan-ios/Assets.xcassets/SessionMessage/message_content_upgrade_charm.imageset/Contents.json new file mode 100644 index 00000000..7306c502 --- /dev/null +++ b/xplan-ios/Assets.xcassets/SessionMessage/message_content_upgrade_charm.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "message_content_upgrade_charm@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "message_content_upgrade_charm@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/xplan-ios/Assets.xcassets/SessionMessage/message_content_upgrade_charm.imageset/message_content_upgrade_charm@2x.png b/xplan-ios/Assets.xcassets/SessionMessage/message_content_upgrade_charm.imageset/message_content_upgrade_charm@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..1f20a0223b3bebb92d925d1ceb6f5f00ade9c385 GIT binary patch literal 4732 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 uoq-aM|JOO#OfCVw9o#KUHKl*sQ&{82{B6m literal 0 HcmV?d00001 diff --git a/xplan-ios/Assets.xcassets/SessionMessage/message_content_upgrade_charm.imageset/message_content_upgrade_charm@3x.png b/xplan-ios/Assets.xcassets/SessionMessage/message_content_upgrade_charm.imageset/message_content_upgrade_charm@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..f281ebf3c2501a8d0c3367c1180768e9e5cb8db9 GIT binary patch literal 8852 zcmWk!c{~(O6rVk?&UHpAyUvueQjufVnJy&dNJt7%L?PF%qlAjenOLF-Wl6}9btUBJ za)m|C$bIiIKfn3BnRzqw<~yJHzBe=fOtgjBaef|29smIU2~#7>?V9#~#-O&#tH>9J z0YG$EoVGIFZoZ3#xuNh)1k8(o`H?XH9()rHUkAb5;Qu?fm2Jrj{of`p1m=eP-??p8 z5b?i3Q9R6#fYhh|4{cARK7p@;;k&s1m2I@5C$KOEzIz0z39$GXEPDFCY!AJQhsk$f z(ruXJ3zK|c#(kLR17CzeN;FI(!K_CxB>-l|!c;%_JQSt|!sos)Jrbrzz?boGW(vNz z0~hCEYA~eu!R#k+d<5nM!59AU-(NUC3n>9`bp>vx>2bKc2q*u*oM$li8C+k3Spjf( z0A~5atRR>c1fSi4ukOOl4LCXka~?s)7JMBKvjbpi0DSWprjy~@r|``)m>mPN?n4$6 z=10TKNSF}>v!Y>k6fD@@Y$VJKhj~w6ZWzqi=I0@N`vhi(!Q2P%?PHiphOc5_!DE;k z1K&i!*Y{yzEX;obUp@Mt()@=oCj!3OhPnq|hQiEk7i_b-&C)h(2+ZCl`96F_hB=}C zllGbf^CDr}CpgptKV-q?3i$g6tbPNFpTloWu)7`B7sG-?=eM0B`kK z9T~AdTdl!MBUkL$Z%-=jp59ujOxarMY55a5*p+w1F6HmkWR}p}836ESP8jK11@xCD zoH{3|FKUvVXI0p0D57y-g4J)M*ZQbpl#8a&XJZvjyf>UTHH`XpLTgDv6dmgODJXYZ zoB!(1#uw94mok2YL~;4MO!ZBTHEuBa{Jm;Bj3l|pj`h=Z)2qzPy{6CZYKaNdriC2S zJD|1YIaNn;(Lk^EJV90IcbA>1m%pW!NKN@6Je}e0mDTylUiIiwaKTDiSf_e}e>Jv|4Q6B)bIHM6EoQGaJU z6O;>FR__*3R^M|$hdR9-x(vqE2obxBt2fIp&UfpJFvh*7q@vuX{^XYPf48Z3`(= zary6vuH3^jU(2#O*}KYo_J%0C4oY+KcHub!IN~|eEu^PKbPUR==kvt77QCHj=}dz2 ziV!u6tXmba$F;dR!Fu-|98SoNsq-b;;&NWyoxZ`QKj#!hr>+Drv0Kl69MWWz4GvL{ zDlbK8&;A%QyD0p$MJ`=O#qGzA@V{w@{b^$DuVyO6#J59kn1?97uD*JE$t!oVK|Hwf zMhH_gutHmR-9>oUura%q?{R2!Z5BZyULLl!%6q$uUE-8>8@`AkY!zrprrxjl`uI

V#Xe&Kjn_{!o-ASY^7A6s1Y$lR#& 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 uzoD<4e^70!#oKbpNouH1W%->^CWn=h#R`qP#bB literal 0 HcmV?d00001 diff --git a/xplan-ios/Assets.xcassets/SessionMessage/message_content_upgrade_expre.imageset/Contents.json b/xplan-ios/Assets.xcassets/SessionMessage/message_content_upgrade_expre.imageset/Contents.json new file mode 100644 index 00000000..baecfffe --- /dev/null +++ b/xplan-ios/Assets.xcassets/SessionMessage/message_content_upgrade_expre.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "message_content_upgrade_expre@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "message_content_upgrade_expre@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/xplan-ios/Assets.xcassets/SessionMessage/message_content_upgrade_expre.imageset/message_content_upgrade_expre@2x.png b/xplan-ios/Assets.xcassets/SessionMessage/message_content_upgrade_expre.imageset/message_content_upgrade_expre@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..e456a2a5ac99c249b431cfb0f87ead88fc953e5e GIT binary patch literal 5251 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 iYWv#y$B4%k6{|N9Dr + +NS_ASSUME_NONNULL_BEGIN + +typedef NS_ENUM(NSInteger, SecretaryRouterType) { + ///房间 + SecretaryRouterType_Room = 1, + ///跳转网页 + SecretaryRouterType_H5 = 2, + ///钱包页 + SecretaryRouterType_Purse = 3, + ///充值页 + SecretaryRouterType_Recharge = 5, + ///用户信息 + SecretaryRouterType_UserInfo = 6, + ///座驾 + SecretaryRouterType_Car = 7, + ///头饰 + SecretaryRouterType_Headwear = 8, + ///铭牌 + SecretaryRouterType_Nameplate = 9, + ///设置密码 + SecretaryRouterType_Set_Password = 53, + ///贵族中心 + SecretaryRouterType_Nobel_Center = 54, + ///资料卡装扮 + SecretaryRouterType_User_Card = 55, + ///贵族气泡 + SecretaryRouterType_Nobel_Bubble = 56, +}; + +@interface ContentSecretaryModel : NSObject +///最近回话列表需要显示的内容 推送的内容 +@property (nonatomic,copy) NSString *msg; +///私聊消息需要显示的内容 +@property (nonatomic,copy) NSString *title; +///跳转的类型 +@property (nonatomic,assign) SecretaryRouterType routerType; +///(转跳当前界面需要传的参) +@property (nonatomic,strong) NSString *routerValue; +@end + +NS_ASSUME_NONNULL_END diff --git a/xplan-ios/Main/Message/Model/SessionContent/ContentSecretaryModel.m b/xplan-ios/Main/Message/Model/SessionContent/ContentSecretaryModel.m new file mode 100644 index 00000000..8337567e --- /dev/null +++ b/xplan-ios/Main/Message/Model/SessionContent/ContentSecretaryModel.m @@ -0,0 +1,12 @@ +// +// ContentSecretaryModel.m +// xplan-ios +// +// Created by 冯硕 on 2022/4/22. +// + +#import "ContentSecretaryModel.h" + +@implementation ContentSecretaryModel + +@end diff --git a/xplan-ios/Main/Message/View/NIMMessageUtils.m b/xplan-ios/Main/Message/View/NIMMessageUtils.m index 5de3b57e..5e37bb08 100644 --- a/xplan-ios/Main/Message/View/NIMMessageUtils.m +++ b/xplan-ios/Main/Message/View/NIMMessageUtils.m @@ -39,7 +39,7 @@ AttachmentModel *attachment = (AttachmentModel *) obj.attachment; if (attachment.first == CustomMessageType_Secretary) { if (attachment.second == Custom_Message_Sub_Secretary_Router) { - text = attachment.data[@"msg"]; + text = attachment.data[@"title"]; } } else if(attachment.first == CustomMessageType_Gift) { if (attachment.second == Custom_Message_Sub_Gift_Send) { diff --git a/xplan-ios/Main/Message/View/Session/Content/MessageConentAudioView.m b/xplan-ios/Main/Message/View/Session/Content/MessageConentAudioView.m index 76f83339..1e85a4a5 100644 --- a/xplan-ios/Main/Message/View/Session/Content/MessageConentAudioView.m +++ b/xplan-ios/Main/Message/View/Session/Content/MessageConentAudioView.m @@ -113,7 +113,7 @@ - (UILabel *)timeLabel { if (!_timeLabel) { _timeLabel = [[UILabel alloc] init]; - _timeLabel.font = [UIFont systemFontOfSize:16]; + _timeLabel.font = [UIFont systemFontOfSize:14 weight:UIFontWeightMedium]; _timeLabel.textColor = [ThemeColor mainTextColor]; } return _timeLabel; diff --git a/xplan-ios/Main/Message/View/Session/Content/MessageContentLevelUpgradeView.m b/xplan-ios/Main/Message/View/Session/Content/MessageContentLevelUpgradeView.m index d758a4f2..82da57a3 100644 --- a/xplan-ios/Main/Message/View/Session/Content/MessageContentLevelUpgradeView.m +++ b/xplan-ios/Main/Message/View/Session/Content/MessageContentLevelUpgradeView.m @@ -35,7 +35,7 @@ @implementation MessageContentLevelUpgradeView + (CGFloat)measureHeight:(NIMMessage *)message { - return (101 + CONTENT_PADDING_V_TOTAL); + return (116 + CONTENT_PADDING_V_TOTAL + MESSAGE_PADDING); } - (void)render:(NIMMessage *)message { @@ -62,13 +62,14 @@ - (void)initSubViewConstraints { [super initSubViewConstraints]; - [self.backView mas_makeConstraints:^(MASConstraintMaker *make) { - make.size.mas_equalTo(CGSizeMake(220, 101)); + [self.backView mas_remakeConstraints:^(MASConstraintMaker *make) { + make.edges.mas_equalTo(self).insets(UIEdgeInsetsMake(MESSAGE_PADDING, MESSAGE_PADDING, 0, MESSAGE_PADDING)); + make.size.mas_equalTo(CGSizeMake(220, 116)); }]; [self.logoImageView mas_makeConstraints:^(MASConstraintMaker *make) { - make.size.mas_equalTo(CGSizeMake(50, 50)); + make.size.mas_equalTo(CGSizeMake(64,64)); make.left.mas_equalTo(self.backView); make.top.mas_equalTo(self.backView); }]; @@ -76,12 +77,12 @@ [self.levelLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.left.mas_equalTo(self.logoImageView.mas_right).offset(10); make.right.mas_equalTo(self.backView); - make.top.mas_equalTo(self.logoImageView); + make.top.mas_equalTo(self.logoImageView).offset(10); }]; [self.lineView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.right.mas_equalTo(self.backView); - make.height.mas_equalTo(1); + make.height.mas_equalTo(0.5); make.top.mas_equalTo(self.logoImageView.mas_bottom).offset(10); }]; @@ -107,7 +108,6 @@ - (UIImageView *)logoImageView { if (!_logoImageView) { _logoImageView = [[UIImageView alloc] init]; - _logoImageView.backgroundColor = [UIColor redColor]; } return _logoImageView; } @@ -115,7 +115,7 @@ - (UILabel *)levelLabel { if (!_levelLabel) { _levelLabel = [[UILabel alloc] init]; - _levelLabel.font = [UIFont systemFontOfSize:14]; + _levelLabel.font = [UIFont systemFontOfSize:14 weight:UIFontWeightMedium]; _levelLabel.textColor = [ThemeColor mainTextColor]; _levelLabel.numberOfLines = 2; } @@ -126,8 +126,8 @@ if (!_checkButton) { _checkButton = [UIButton buttonWithType:UIButtonTypeCustom]; [_checkButton setTitle:@"立即查看" forState:UIControlStateNormal]; - [_checkButton setTitleColor:[ThemeColor mainTextColor] forState:UIControlStateNormal]; - _checkButton.titleLabel.font = [UIFont systemFontOfSize:12]; + [_checkButton setTitleColor:UIColorFromRGB(0x4C5AF1) forState:UIControlStateNormal]; + _checkButton.titleLabel.font = [UIFont systemFontOfSize:14]; [_checkButton addTarget:self action:@selector(checkButtonAction:) forControlEvents:UIControlEventTouchUpInside]; } return _checkButton; diff --git a/xplan-ios/Main/Message/View/Session/Content/MessageContentOpenLiveView.m b/xplan-ios/Main/Message/View/Session/Content/MessageContentOpenLiveView.m index 9d6d11df..548495f7 100644 --- a/xplan-ios/Main/Message/View/Session/Content/MessageContentOpenLiveView.m +++ b/xplan-ios/Main/Message/View/Session/Content/MessageContentOpenLiveView.m @@ -18,7 +18,6 @@ ///View #import "XPRoomViewController.h" -#define MESSAGE_PADDING 10 @interface MessageContentOpenLiveView () ///头像 @@ -33,7 +32,7 @@ @implementation MessageContentOpenLiveView + (CGFloat)measureHeight:(NIMMessage *)message { - return (50 + CONTENT_PADDING_V_TOTAL); + return (50 + CONTENT_PADDING_V_TOTAL + MESSAGE_PADDING * 2); } - (void)render:(NIMMessage *)message { @@ -73,7 +72,7 @@ [super initSubViewConstraints]; [self.backView mas_makeConstraints:^(MASConstraintMaker *make) { make.edges.mas_equalTo(self).insets(UIEdgeInsetsMake(MESSAGE_PADDING, MESSAGE_PADDING, MESSAGE_PADDING, MESSAGE_PADDING)); - make.size.mas_equalTo(CGSizeMake(180, 50)); + make.size.mas_equalTo(CGSizeMake(200, 50)); }]; [self.avatarImageView mas_makeConstraints:^(MASConstraintMaker *make) { diff --git a/xplan-ios/Main/Message/View/Session/Content/MessageContentTextClickable.m b/xplan-ios/Main/Message/View/Session/Content/MessageContentTextClickable.m index 97efe559..0256556a 100644 --- a/xplan-ios/Main/Message/View/Session/Content/MessageContentTextClickable.m +++ b/xplan-ios/Main/Message/View/Session/Content/MessageContentTextClickable.m @@ -6,30 +6,33 @@ // #import "MessageContentTextClickable.h" -#import "ThemeColor.h" -#import "AttachmentModel.h" - -#import "XPWebViewController.h" - -#import +///Third #import - -#define MESSAGE_TEXT_PADDING 10 - +#import +///Tool +#import "ThemeColor.h" +#import "NSObject+MJExtension.h" +#import "XCCurrentVCStackManager.h" +///Model +#import "AttachmentModel.h" +#import "ContentSecretaryModel.h" +///View +#import "XPRoomViewController.h" +#import "XPWebViewController.h" +#import "XPMineRechargeViewController.h" +#import "XPMineUserInfoViewController.h" +#import "XPMineDressUpViewController.h" +#import "XPNobleCenterViewController.h" +///P +#import "RoomHostDelegate.h" @interface MessageContentTextClickable() /** 消息文本 */ @property (nonatomic, strong) UILabel * messageText; - -/** - 点击事件的参数。 - 目前仅用于点击跳转网页,扩展后再进行整理。 - */ -@property (nonatomic, assign) int type; -@property (nonatomic, strong) NSString * value; - +///获取的模型 +@property (nonatomic,strong) ContentSecretaryModel *contentInfo; @end @implementation MessageContentTextClickable @@ -49,11 +52,11 @@ messageText = @"未知消息类型"; } - CGSize dstRect = CGSizeMake(CONTENT_WIDTH_MAX - MESSAGE_TEXT_PADDING * 2, MAXFLOAT); + CGSize dstRect = CGSizeMake(CONTENT_WIDTH_MAX - MESSAGE_PADDING * 2, MAXFLOAT); CGFloat msgHeight = [messageText boundingRectWithSize:dstRect options:NSStringDrawingUsesLineFragmentOrigin attributes:[MessageContentTextClickable messageTextAttibutes] context:nil].size.height; - return msgHeight + MESSAGE_TEXT_PADDING * 2 + CONTENT_PADDING_V_TOTAL; + return msgHeight + MESSAGE_PADDING * 2 + CONTENT_PADDING_V_TOTAL; } + (NSDictionary *)messageTextAttibutes { @@ -87,9 +90,8 @@ AttachmentModel *attachment = (AttachmentModel *) obj.attachment; if (attachment.first == CustomMessageType_Secretary) { if (attachment.second == Custom_Message_Sub_Secretary_Router) { - messageText = attachment.data[@"msg"]; - self.type = [attachment.data[@"routerType"] intValue]; - self.value = attachment.data[@"routerValue"]; + self.contentInfo = [ContentSecretaryModel modelWithJSON:attachment.data]; + messageText = self.contentInfo.msg; } } } @@ -101,16 +103,95 @@ } - (void)event:(UITapGestureRecognizer *)gesture { - switch (self.type) { - case Custom_Message_Router_H5: { - if (self.value) { + SecretaryRouterType type = self.contentInfo.routerType; + NSString * value = self.contentInfo.routerValue; + switch (type) { + case SecretaryRouterType_H5: { + if (value.length) { XPWebViewController * webVC =[[XPWebViewController alloc] init]; - webVC.url = self.value; + webVC.url = value; [self.nim_viewController.navigationController pushViewController:webVC animated:YES]; } } break; - + case SecretaryRouterType_Room: + { + if (value.length > 0) { + UIViewController * controllerView = [XCCurrentVCStackManager shareManager].getCurrentVC; + //退出原来的房间 如果有的话 TODO 总感觉这种处理不太优雅 进房入口多了 怎么办 进房需要整合 + [controllerView.navigationController.viewControllers enumerateObjectsUsingBlock:^(__kindof UIViewController * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + if ([obj isKindOfClass:[XPRoomViewController class]]) { + [controllerView.navigationController popToRootViewControllerAnimated:NO]; + XPRoomViewController * rooomVC = obj; + [rooomVC exitRoom]; + *stop = YES; + } + }]; + [XPRoomViewController openRoom:value viewController:[XCCurrentVCStackManager shareManager].getCurrentVC]; + } + } + break; + case SecretaryRouterType_Purse: + case SecretaryRouterType_Recharge: + { + XPMineRechargeViewController * rechargeVC = [[XPMineRechargeViewController alloc] init]; + [[XCCurrentVCStackManager shareManager].getCurrentVC.navigationController pushViewController:rechargeVC animated:YES]; + } + break; + case SecretaryRouterType_UserInfo: + { + if (value.length > 0) { + XPMineUserInfoViewController * userInfoVC = [[XPMineUserInfoViewController alloc] init]; + userInfoVC.uid = value.integerValue; + [[XCCurrentVCStackManager shareManager].getCurrentVC.navigationController pushViewController:userInfoVC animated:YES]; + } + } + case SecretaryRouterType_Car: + { + XPMineDressUpViewController * dressUpVC = [[XPMineDressUpViewController alloc] init]; + dressUpVC.currentIndex = 1; + [[XCCurrentVCStackManager shareManager].getCurrentVC.navigationController pushViewController:dressUpVC animated:YES]; + } + break; + case SecretaryRouterType_Headwear: + { + XPMineDressUpViewController * dressUpVC = [[XPMineDressUpViewController alloc] init]; + dressUpVC.currentIndex = 0; + [[XCCurrentVCStackManager shareManager].getCurrentVC.navigationController pushViewController:dressUpVC animated:YES]; + } + break; + case SecretaryRouterType_Nameplate: + { + XPMineDressUpViewController * dressUpVC = [[XPMineDressUpViewController alloc] init]; + dressUpVC.currentIndex = 2; + [[XCCurrentVCStackManager shareManager].getCurrentVC.navigationController pushViewController:dressUpVC animated:YES]; + } + break; + case SecretaryRouterType_Nobel_Bubble: + { + XPMineDressUpViewController * dressUpVC = [[XPMineDressUpViewController alloc] init]; + dressUpVC.currentIndex = 4; + [[XCCurrentVCStackManager shareManager].getCurrentVC.navigationController pushViewController:dressUpVC animated:YES]; + } + break; + case SecretaryRouterType_User_Card: + { + XPMineDressUpViewController * dressUpVC = [[XPMineDressUpViewController alloc] init]; + dressUpVC.currentIndex = 3; + [[XCCurrentVCStackManager shareManager].getCurrentVC.navigationController pushViewController:dressUpVC animated:YES]; + } + break; + case SecretaryRouterType_Nobel_Center: + { + XPNobleCenterViewController * nobelCenterVC = [[XPNobleCenterViewController alloc] init]; + [[XCCurrentVCStackManager shareManager].getCurrentVC.navigationController pushViewController:nobelCenterVC animated:YES]; + } + break; + case SecretaryRouterType_Set_Password: + { + + } + break; default: break; } @@ -119,7 +200,7 @@ - (UILabel *)messageText { if (!_messageText) { _messageText = [[UILabel alloc]initWithFrame:CGRectZero]; - _messageText.preferredMaxLayoutWidth = CONTENT_WIDTH_MAX - MESSAGE_TEXT_PADDING * 2; + _messageText.preferredMaxLayoutWidth = CONTENT_WIDTH_MAX - MESSAGE_PADDING * 2; _messageText.textColor = ThemeColor.mainTextColor; _messageText.numberOfLines = 0; } diff --git a/xplan-ios/Main/Mine/View/DressUp/View/XPMineDressUpViewController.h b/xplan-ios/Main/Mine/View/DressUp/View/XPMineDressUpViewController.h index d80831dc..2ea67398 100644 --- a/xplan-ios/Main/Mine/View/DressUp/View/XPMineDressUpViewController.h +++ b/xplan-ios/Main/Mine/View/DressUp/View/XPMineDressUpViewController.h @@ -10,6 +10,9 @@ NS_ASSUME_NONNULL_BEGIN @interface XPMineDressUpViewController : BaseViewController +///当前的index @[@"头饰", @"座驾", @"铭牌", @"资料卡", @"聊天气泡"] +@property (nonatomic,assign) NSInteger currentIndex; + @end NS_ASSUME_NONNULL_END diff --git a/xplan-ios/Main/Mine/View/DressUp/View/XPMineDressUpViewController.m b/xplan-ios/Main/Mine/View/DressUp/View/XPMineDressUpViewController.m index b9af6b6d..f8fa0f92 100644 --- a/xplan-ios/Main/Mine/View/DressUp/View/XPMineDressUpViewController.m +++ b/xplan-ios/Main/Mine/View/DressUp/View/XPMineDressUpViewController.m @@ -153,6 +153,12 @@ } #pragma mark - Getters And Setters +- (void)setCurrentIndex:(NSInteger)currentIndex { + if (currentIndex < self.titles.count) { + [self.titleView setDefaultSelectedIndex:currentIndex]; + } +} + - (JXCategoryTitleView *)titleView { if (!_titleView) { _titleView = [[JXCategoryTitleView alloc] init];