From 4463b2f5514eb3b109bbdd2bc32555c80b49c582 Mon Sep 17 00:00:00 2001 From: chenshuanglin <1273934588@qq.com> Date: Mon, 13 Mar 2023 19:50:02 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A6=96=E9=A1=B5=E7=9B=B4=E6=92=AD=E4=B8=AD?= =?UTF-8?q?=E5=8A=A8=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- xplan-ios.xcodeproj/project.pbxproj | 4 + .../Home/home_chat.imageset/Contents.json | 22 +++++ .../Home/home_chat.imageset/home_chat@2x.png | Bin 0 -> 1243 bytes .../Home/home_chat.imageset/home_chat@3x.png | Bin 0 -> 1503 bytes .../Home/View/XPFindNewFriendTableViewCell.h | 7 ++ .../Home/View/XPFindNewFriendTableViewCell.m | 85 ++++++++++++++---- .../Home/View/XPFindNewFriendViewController.m | 19 ++-- .../Home/View/XPPartyListViewController.m | 16 ++-- xplan-ios/Sources/home_living.svga | Bin 0 -> 5592 bytes 9 files changed, 128 insertions(+), 25 deletions(-) create mode 100644 xplan-ios/Assets.xcassets/Home/home_chat.imageset/Contents.json create mode 100644 xplan-ios/Assets.xcassets/Home/home_chat.imageset/home_chat@2x.png create mode 100644 xplan-ios/Assets.xcassets/Home/home_chat.imageset/home_chat@3x.png create mode 100644 xplan-ios/Sources/home_living.svga diff --git a/xplan-ios.xcodeproj/project.pbxproj b/xplan-ios.xcodeproj/project.pbxproj index e0d2c1ee..c446af68 100644 --- a/xplan-ios.xcodeproj/project.pbxproj +++ b/xplan-ios.xcodeproj/project.pbxproj @@ -13,6 +13,7 @@ 146567E229B1E1CF00A1F5B9 /* XPNewHomeHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 146567E129B1E1CF00A1F5B9 /* XPNewHomeHeaderView.m */; }; 146567E529B1F55200A1F5B9 /* XPFindNewFriendTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 146567E429B1F55200A1F5B9 /* XPFindNewFriendTableViewCell.m */; }; 14B65C6529BECD8A00EC02EF /* XPMineMomentTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 14B65C6429BECD8A00EC02EF /* XPMineMomentTableViewCell.m */; }; + 14B65C6B29BF439E00EC02EF /* home_living.svga in Resources */ = {isa = PBXBuildFile; fileRef = 14B65C6A29BF439E00EC02EF /* home_living.svga */; }; 14C1F15429B86DF0000A960F /* XPMineMoreTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 14C1F15329B86DF0000A960F /* XPMineMoreTableViewCell.m */; }; 14C1F15729B874FB000A960F /* XPMineMoreItemTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 14C1F15629B874FB000A960F /* XPMineMoreItemTableViewCell.m */; }; 14C1F15A29B876EC000A960F /* XPMineMoreItemModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 14C1F15929B876EC000A960F /* XPMineMoreItemModel.m */; }; @@ -1313,6 +1314,7 @@ 146567E429B1F55200A1F5B9 /* XPFindNewFriendTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPFindNewFriendTableViewCell.m; sourceTree = ""; }; 14B65C6329BECD8A00EC02EF /* XPMineMomentTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPMineMomentTableViewCell.h; sourceTree = ""; }; 14B65C6429BECD8A00EC02EF /* XPMineMomentTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPMineMomentTableViewCell.m; sourceTree = ""; }; + 14B65C6A29BF439E00EC02EF /* home_living.svga */ = {isa = PBXFileReference; lastKnownFileType = file; path = home_living.svga; sourceTree = ""; }; 14C1F15229B86DF0000A960F /* XPMineMoreTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPMineMoreTableViewCell.h; sourceTree = ""; }; 14C1F15329B86DF0000A960F /* XPMineMoreTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPMineMoreTableViewCell.m; sourceTree = ""; }; 14C1F15529B874FB000A960F /* XPMineMoreItemTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPMineMoreItemTableViewCell.h; sourceTree = ""; }; @@ -7556,6 +7558,7 @@ E8A1E45C276220B100B294CA /* Sources */ = { isa = PBXGroup; children = ( + 14B65C6A29BF439E00EC02EF /* home_living.svga */, E887531529BB1B4F0017A41A /* candy_tree.mp4 */, E839806729027D4A0084BFC8 /* room_wish_gift_sendCelebrate.svga */, E897AC0228AF9DDE003B3587 /* sailing_prize_cowry.svga */, @@ -9349,6 +9352,7 @@ E8A1E461276220DA00B294CA /* candyTree.svga in Resources */, E80EC82528ACD84000D133C5 /* emoji_61@2x.png in Resources */, E80EC81528ACD84000D133C5 /* emoji_145@2x.png in Resources */, + 14B65C6B29BF439E00EC02EF /* home_living.svga in Resources */, E80EC85428ACD84000D133C5 /* emoji_165@2x.png in Resources */, E80EC88728ACD84000D133C5 /* emoji_29@2x.png in Resources */, E80EC83728ACD84000D133C5 /* emoji_112@2x.png in Resources */, diff --git a/xplan-ios/Assets.xcassets/Home/home_chat.imageset/Contents.json b/xplan-ios/Assets.xcassets/Home/home_chat.imageset/Contents.json new file mode 100644 index 00000000..95d852fd --- /dev/null +++ b/xplan-ios/Assets.xcassets/Home/home_chat.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "home_chat@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "home_chat@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/xplan-ios/Assets.xcassets/Home/home_chat.imageset/home_chat@2x.png b/xplan-ios/Assets.xcassets/Home/home_chat.imageset/home_chat@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..64151ad17946645c236d1841d878474b360e65dd GIT binary patch literal 1243 zcmYLJ3s6*L6u!%%EW6;|%MuW?HIT|84_zo^Gbr5QArreTk5HOr0?9=lN)yt6*<=)$ zJS=evBQh$%2gZ!V*bp@8VjItWun$4Ul83vntV$~JFz0mcUA39>pZ`1OeBbx~ckZ2g zSRqgH;*cC_S91_LV=Y6EeSgEF?p5`!z5_YnGbpl#sR@B zV`!sjrjAcLU|1Oy0vn$;L9#O=2Z4dfGt7uqQGgf2L+M~fc9OQm!1D107!_jFI!&BR z`iLh&C)1hn0tjqR_y}g0(%DCorycZhVr=5$81ZpPFfvW26;2VL95asa{<925AxfNN z6A2~?%p{m8u#jM(;3^4MDHx;R8U=GCI7qln!W|OsQZP@!-z3~4;Q<8;)Q)UL9lrP@ z`_km;1dHY3!d|u7jl*&0@jN{Fl#j2Uzwm{%>qWsELPA2r!onjWUy9lsEs?wu6B8Tz zTHID?ydpg#GdoXJSXBIOS;hVXl{GbWb@fNSIC}KhH{br)+IH&nPn}&Ce)+YhxA(V; zmoBUOe%EOF2L=aqI-P#hG=AgHiOE~`xjD!D{e^!P7nhcnmY0`TRvte5_tBM!gF*Od zo=uM5njsm=%kdkC`y)C$+KoNkwrp<+o_bJxBC0IXM_iWqvzw?vx;QQnEiUG=9vu^D z-%mJgENqel_Q(12#GEGa`BZj?{sYT&PLN}7KKJXGA)fa26I%>qxkxUG)q?{_wAE-d%%w1v07_tnjvQ*V~FE8hyKdt;)Z zn^(vit-bE6%~nxH<3TJZaU2XkI8O?z<8v%=Fo7tZ{!a zY=XONRLLC!HHYi#>uWPt*Ur0Y*cIm^vSJ1KZTHp=H-`Qlb^HqtewO g5bWvpOJs2f;!tQ;Ufj?|e7uZJs1N zgl_9(i(wdDED}oL89*Fs8qwi+@Zdo?C=C%{P1-e+a1kcNh!exYunkaKW0c%|m<0iW z;{*r8XbK8Oa4AGjL0y^#C}{uI1hBv``2~hiw@N}IgW!q~hO)@4A~Rg|WN{fo!x*{_ z^;)EMLQ@W?3rBZx^aw}8Y@}wP9wzEzpa%@}n>{kpk(!Q%=xB_Nw03CR4)rfb_i?1f zk!}U*Wg{aSJ!T;-6OA#^I1^1UP&WfjGLVMk0&9YWG%RFf60&1B>R}NpdPxef`k6?_ zM7<1xsAUjE4;%Hf(WE`0pkX5|3yqUtpzGL#+Cy;2B3KaSr8)pWhwN*}Mc@Qt3_1*? zg8%?1lK|+$UNaXmK{NwMpCAZ}00S9zfh)+s1rO$p#9NS4C_o1?#5idl)&UZx5CA6n z|H(^WGZ99FVIY#uK_9|QnRqJ;A^?~67zp?bH_|Hv;Nus_Lbqf)HfSg%H|Q| zw{9*Ch)5(Bhf6+-iH%D+kaqA$dU{4yR+jukPHyhW zyn@1_qSGbi<>hB9s}$9>we|H4s>X9oP3N0iS}tB{ZM|}>t^NA-j$7SoZI79?HnW9_5GmzPzS2w3l<6 zGk(~3tx7XK>*l2P=O4N%^SwDz`p~yCogeyoNAbNN4!2Und-LU#>#zCSC9y%@mB~#h zg`7&O3xlW5iVjeRzAxmwZ^M;(2?`TS(iDBp_&SLxxP@6$;ctZ-xB>;w&fUw`^4OhI zNzQt8b@loj*KW@FpVYxWCmJfcKWTh$TfZ1LaHP$Lt*qFq`6V;Macot#U&GGPGhw_` zM;DvQ>|H(6D*628g|*2)`uoj!j^tXoGiQ>mymD`GkI8@ z!F{6@5gNaM)+VL9w>q$Z7ch(23Tw(;8|8f$*m8A)d{Zy4Zj0pjd^V@9t8{lAuWpem zQ1VLLQoCe_Kc_}k=EtReZDH%Ve=n!D^j0QC@*vm`=RbWGqk{c2s{K%$2#-%=}Ctyjv9mdEXOd@^6OG2%{S zH~-t!r&Wg%YPMbOD1NbHpKKO87R!qoj_<6v9q(V<-msiAGEzM1mbZS>)dU>x>~J>b z(z81{qLVC7q%wsu5&WF0{d>}alPOcNGaBzwd)1AP9mGlZxO%y%mD9H0uQ={eX#B89 zxzbtKW~vaU#O`aIIX-c(%p>&ZMYWI1nLU3sg-JQ}QSXk%TuqKW;W;Z?IE+g$>^Q@L UR=sM2iTHCB2Zalp1iR#a1O937rT_o{ literal 0 HcmV?d00001 diff --git a/xplan-ios/Main/Home/View/XPFindNewFriendTableViewCell.h b/xplan-ios/Main/Home/View/XPFindNewFriendTableViewCell.h index f0e0dbc9..6471cec1 100644 --- a/xplan-ios/Main/Home/View/XPFindNewFriendTableViewCell.h +++ b/xplan-ios/Main/Home/View/XPFindNewFriendTableViewCell.h @@ -10,10 +10,17 @@ @class HomeRecommendRoomModel; NS_ASSUME_NONNULL_BEGIN +@protocol XPFindNewFriendTableViewCellDelegate + + +@end + @interface XPFindNewFriendTableViewCell : UITableViewCell @property (nonatomic, strong) HomeRecommendRoomModel *roomInfo; +@property (nonatomic, weak) id delegate; + @end NS_ASSUME_NONNULL_END diff --git a/xplan-ios/Main/Home/View/XPFindNewFriendTableViewCell.m b/xplan-ios/Main/Home/View/XPFindNewFriendTableViewCell.m index 874ca24b..d42dd416 100644 --- a/xplan-ios/Main/Home/View/XPFindNewFriendTableViewCell.m +++ b/xplan-ios/Main/Home/View/XPFindNewFriendTableViewCell.m @@ -8,6 +8,8 @@ #import "XPFindNewFriendTableViewCell.h" /// Third #import +#import +#import /// Tool #import "NetImageView.h" #import "ThemeColor.h" @@ -33,7 +35,12 @@ /// 签名 @property (nonatomic, strong) UILabel *signLabel; /// 直播中/和Ta聊 -@property (nonatomic, strong) XPButton *livingBtn; +@property (nonatomic, strong) SVGAPlayer *livingView; +@property (nonatomic, strong) UIImageView *chatImageView; + +@property (nonatomic, strong) UILabel *statusLabel; + +@property (nonatomic, strong) UIStackView *statusStackView; @end @@ -59,6 +66,14 @@ [self initSubViews]; [self initSubViewConstraints]; + + SVGAParser *parser = [[SVGAParser alloc] init]; + [parser parseWithNamed:@"home_living" inBundle:nil completionBlock:^(SVGAVideoEntity * _Nonnull videoItem) { + if (videoItem != nil) { + self.livingView.videoItem = videoItem; + [self.livingView startAnimation]; + } + } failureBlock:nil]; } return self; } @@ -71,14 +86,16 @@ [self.bgView addSubview:self.nameStackView]; [self.bgView addSubview:self.constellationStackView]; [self.bgView addSubview:self.signLabel]; - [self.bgView addSubview:self.livingBtn]; + [self.bgView addSubview:self.livingView]; + [self.bgView addSubview:self.chatImageView]; + [self.bgView addSubview:self.statusLabel]; [self.nameStackView addArrangedSubview:self.nobleImageView]; [self.nameStackView addArrangedSubview:self.nickLabel]; [self.constellationStackView addArrangedSubview:self.sexBtn]; [self.constellationStackView addArrangedSubview:self.constellationLabel]; - + } - (void)initSubViewConstraints { @@ -125,9 +142,19 @@ make.bottom.mas_equalTo(self.avatarImageView.mas_bottom).offset(-4); }]; - [self.livingBtn mas_makeConstraints:^(MASConstraintMaker *make) { + [self.livingView mas_makeConstraints:^(MASConstraintMaker *make) { make.right.mas_equalTo(-15); - make.centerY.mas_equalTo(self.bgView); + make.centerY.mas_equalTo(self.bgView).mas_offset(-8); + make.size.mas_equalTo(CGSizeMake(20, 20)); + }]; + + [self.chatImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.mas_equalTo(self.livingView); + }]; + + [self.statusLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.mas_equalTo(self.livingView.mas_bottom).offset(2); + make.centerX.mas_equalTo(self.livingView); }]; } @@ -141,8 +168,9 @@ [self.sexBtn setTitle:@"22" forState:UIControlStateNormal]; self.constellationLabel.text = @"巨蟹座"; self.signLabel.text = @"我是个默认的个性签名"; - [self.livingBtn setTitle:@"直播中" forState:UIControlStateNormal]; - [self.livingBtn setImage:[UIImage imageNamed:@"home_living"] forState:UIControlStateNormal]; + self.livingView.hidden = NO; + self.statusLabel.text = @"直播中"; +// self.statusLabel.text = @"和TA聊"; } - (UIView *)bgView { @@ -252,15 +280,42 @@ return _signLabel; } -- (XPButton *)livingBtn { - if (!_livingBtn) { - _livingBtn = [XPButton buttonWithType:UIButtonTypeCustom]; - _livingBtn.titleLabel.font = [UIFont systemFontOfSize:10 weight:UIFontWeightRegular]; - [_livingBtn setTitleColor:[ThemeColor textThirdColor] forState:UIControlStateNormal]; - _livingBtn.imagePosition = XPButtonImagePositionTop; - _livingBtn.imageTitleSpace = 5; +- (SVGAPlayer *)livingView { + if (!_livingView) { + _livingView = [[SVGAPlayer alloc] init]; + _livingView.hidden = YES; } - return _livingBtn; + return _livingView; +} + +- (UIImageView *)chatImageView { + if (!_chatImageView) { + _chatImageView = [[UIImageView alloc] init]; + _chatImageView.contentMode = UIViewContentModeScaleAspectFit; + _chatImageView.image = [UIImage imageNamed:@"home_chat"]; + _chatImageView.hidden = YES; + } + return _chatImageView; +} + +- (UILabel *)statusLabel { + if (!_statusLabel) { + _statusLabel = [[UILabel alloc] init]; + _statusLabel.textColor = [ThemeColor textThirdColor]; + _statusLabel.font = [UIFont systemFontOfSize:10 weight:UIFontWeightRegular]; + } + return _statusLabel; +} + +- (UIStackView *)statusStackView { + if (!_statusStackView) { + _statusStackView = [[UIStackView alloc] init]; + _statusStackView.axis = UILayoutConstraintAxisVertical; + _statusStackView.distribution = UIStackViewDistributionFill; + _statusStackView.alignment = UIStackViewAlignmentFill; + _statusStackView.spacing = 5; + } + return _statusStackView; } @end diff --git a/xplan-ios/Main/Home/View/XPFindNewFriendViewController.m b/xplan-ios/Main/Home/View/XPFindNewFriendViewController.m index d6eabd5a..d55634e6 100644 --- a/xplan-ios/Main/Home/View/XPFindNewFriendViewController.m +++ b/xplan-ios/Main/Home/View/XPFindNewFriendViewController.m @@ -19,13 +19,14 @@ ///VC #import "XPWebViewController.h" #import "XPRoomViewController.h" +#import "SessionViewController.h" ///Model #import "HomeRecommendRoomModel.h" ///P #import "XPHomePresenter.h" #import "XPHomeProtocol.h" -@interface XPFindNewFriendViewController () +@interface XPFindNewFriendViewController () ///列表 @property (nonatomic,strong) UITableView *tableView; @property (nonatomic, copy) void(^scrollCallback)(UIScrollView *scrollView); @@ -110,6 +111,10 @@ }]; } +#pragma mark - XPFindNewFriendTableViewCellDelegate + + + #pragma mark - XPHomeProtocol - (void)getHomeRecommendRoomListSuccess:(NSArray *)list state:(BOOL)state { if (state == 0) { @@ -153,10 +158,8 @@ if (self.dataSource.count > 0) { HomeRecommendRoomModel * model = [self.dataSource safeObjectAtIndex1:indexPath.row]; XPFindNewFriendTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPFindNewFriendTableViewCell class])]; - if (cell == nil) { - cell = [[XPFindNewFriendTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:NSStringFromClass([XPFindNewFriendTableViewCell class])]; - } cell.roomInfo = model; + cell.delegate = self; return cell; } XPHomeListEmptyTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPHomeListEmptyTableViewCell class])]; @@ -170,9 +173,15 @@ [tableView deselectRowAtIndexPath:indexPath animated:YES]; if (self.dataSource.count > 0) { HomeRecommendRoomModel * model = [self.dataSource safeObjectAtIndex1:indexPath.row]; - if (model.uid.integerValue > 0) { + if (model.roomUid.integerValue > 0) { [XPRoomViewController openRoom:model.uid fromNick:model.title fromType:UserEnterRoomFromType_Home_Recommend fromUid:nil viewController:self]; } + /// 跳聊天 +// NSString * sessionId = [NSString stringWithFormat:@"%@",model.uid]; +// NIMSession * session = [NIMSession session:sessionId type:NIMSessionTypeP2P]; +// SessionViewController * sessionVC = [[SessionViewController alloc] initWithSession:session]; +// [self.navigationController pushViewController:sessionVC animated:YES]; + } } diff --git a/xplan-ios/Main/Home/View/XPPartyListViewController.m b/xplan-ios/Main/Home/View/XPPartyListViewController.m index 312b533e..8cc50ca6 100644 --- a/xplan-ios/Main/Home/View/XPPartyListViewController.m +++ b/xplan-ios/Main/Home/View/XPPartyListViewController.m @@ -16,6 +16,7 @@ #import "ThemeColor.h" ///View #import "XPPartyListCollectionViewCell.h" +#import "XPHomeListEmptyCollectionViewCell.h" ///P #import "XPHomePresenter.h" #import "XPHomeProtocol.h" @@ -164,14 +165,18 @@ #pragma mark - UICollectionViewDelegate - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { - return self.dataSource.count; + return self.dataSource.count > 0 ? self.dataSource.count : 1; } - (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { - XPPartyListCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([XPPartyListCollectionViewCell class]) forIndexPath:indexPath]; - HomeRecommendRoomModel *model = [self.dataSource safeObjectAtIndex1:indexPath.row]; - cell.roomModel = model; - return cell; + if (self.dataSource.count > 0) { + XPPartyListCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([XPPartyListCollectionViewCell class]) forIndexPath:indexPath]; + HomeRecommendRoomModel *model = [self.dataSource safeObjectAtIndex1:indexPath.row]; + cell.roomModel = model; + return cell; + } + XPHomeListEmptyCollectionViewCell * emptyCell = [collectionView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([XPHomeListEmptyCollectionViewCell class]) forIndexPath:indexPath]; + return emptyCell; } - (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { @@ -217,6 +222,7 @@ _collectionView.delegate = self; _collectionView.dataSource = self; [_collectionView registerClass:[XPPartyListCollectionViewCell class] forCellWithReuseIdentifier:NSStringFromClass([XPPartyListCollectionViewCell class])]; + [_collectionView registerClass:[XPHomeListEmptyCollectionViewCell class] forCellWithReuseIdentifier:NSStringFromClass([XPHomeListEmptyCollectionViewCell class])]; } return _collectionView; } diff --git a/xplan-ios/Sources/home_living.svga b/xplan-ios/Sources/home_living.svga new file mode 100644 index 0000000000000000000000000000000000000000..b02c6d92e980a808028eec5b0072bca7645f31fd GIT binary patch literal 5592 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 literal 0 HcmV?d00001