From cf0a0a87c7eb58c558eb51bf5f2cc8dc494599eb Mon Sep 17 00:00:00 2001 From: eggmanQQQ <3671373519@qq.com> Date: Wed, 4 Sep 2024 16:11:11 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=9B=B4=E6=96=B0=20UI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../View/SessionList/SessionListCell.m | 4 +- .../SessionList/SessionListViewController.m | 30 ++++++--- .../Cell/MineInfo/XPMineMedalsTableViewCell.m | 42 +++++++++++- .../View/Cell/XPMineNobleCardTableViewCell.m | 42 ++++++++++++ .../View/IncomeRecord/XPExchangeDiamondsVC.m | 9 +++ .../IncomeRecord/XPExchangeDiamondsView.h | 8 +-- .../IncomeRecord/XPExchangeDiamondsView.m | 66 +++++++++++-------- .../MineInfo/XPMineUserDataViewController.m | 2 +- .../View/Noble/View/VIPCenterViewController.m | 18 ++++- .../MineInfo/XPMineUserInfoHeaderView.m | 4 +- .../YMMine/View/XPMineViewController.m | 7 +- .../View/CustomView/XPNewHomeItemCell.m | 26 ++++---- .../View/XPHomePagingViewController.m | 8 --- .../UserCard/View/XPUserCardViewController.m | 65 +++++++++++++++--- YuMi/Structure/MVP/Model/UserVipInfoVo.h | 2 + YuMi/ar.lproj/Localizable.strings | 1 + YuMi/en.lproj/Localizable.strings | 1 + YuMi/zh-Hans.lproj/Localizable.strings | 1 + YuMi/zh-Hant.lproj/Localizable.strings | 1 + 19 files changed, 253 insertions(+), 84 deletions(-) diff --git a/YuMi/Modules/YMMessage/View/SessionList/SessionListCell.m b/YuMi/Modules/YMMessage/View/SessionList/SessionListCell.m index 12352c90..74bbf44b 100644 --- a/YuMi/Modules/YMMessage/View/SessionList/SessionListCell.m +++ b/YuMi/Modules/YMMessage/View/SessionList/SessionListCell.m @@ -165,8 +165,8 @@ - (void)layoutSubviews { [super layoutSubviews]; - self.badgeView.nim_right = isMSRTL() ? 15 + self.badgeView.mj_w : self.nim_width - 15; - self.badgeView.nim_top = 20; + self.badgeView.nim_right = isMSRTL() ? 35 + self.badgeView.mj_w : self.nim_width - 35; + self.badgeView.nim_top = 4; } - (NetImageView *)avatarImageView { diff --git a/YuMi/Modules/YMMessage/View/SessionList/SessionListViewController.m b/YuMi/Modules/YMMessage/View/SessionList/SessionListViewController.m index 82ce4c72..1ff23bd8 100644 --- a/YuMi/Modules/YMMessage/View/SessionList/SessionListViewController.m +++ b/YuMi/Modules/YMMessage/View/SessionList/SessionListViewController.m @@ -9,6 +9,7 @@ #import "SessionListCell.h" #import "SessionDiscoverNewTableViewCell.h" #import "SessionViewController.h" +#import "XPMineFriendEmptyTableViewCell.h" #import "ClientConfig.h" #import "Api+Mine.h" @@ -151,11 +152,11 @@ NSString * const kMessageShowReadDotKey = @"kMessageShowReadDotKey"; } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ - return 92.f; + return self.recentSessions.count == 0 ? (KScreenHeight - 200 - kNavigationHeight) : 92.f; } - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { - return YES; + return self.recentSessions.count == 0 ? NO : YES; } - (NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath { @@ -174,18 +175,27 @@ NSString * const kMessageShowReadDotKey = @"kMessageShowReadDotKey"; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ - return self.recentSessions.count; + return self.recentSessions.count == 0 ? 1 : self.recentSessions.count; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ - static NSString * cellId = @"cellId"; - SessionListCell * cell = [tableView dequeueReusableCellWithIdentifier:cellId]; - if (!cell) { - cell = [[SessionListCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId]; + if (self.recentSessions.count == 0) { + XPMineFriendEmptyTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPMineFriendEmptyTableViewCell class])]; + if (cell == nil) { + cell = [[XPMineFriendEmptyTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:NSStringFromClass([XPMineFriendEmptyTableViewCell class])]; + } + cell.emptyTitle = YMLocalizedString(@"XPMineAttentionViewController0"); + return cell; + } else { + static NSString * cellId = @"cellId"; + SessionListCell * cell = [tableView dequeueReusableCellWithIdentifier:cellId]; + if (!cell) { + cell = [[SessionListCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId]; + } + NIMRecentSession *recent = [self.recentSessions xpSafeObjectAtIndex:indexPath.row]; + [cell renderWithSession:recent]; + return cell; } - NIMRecentSession *recent = [self.recentSessions xpSafeObjectAtIndex:indexPath.row]; - [cell renderWithSession:recent]; - return cell; } #pragma mark - NIMConversationManagerDelegate - (void)didLoadAllRecentSessionCompletion { diff --git a/YuMi/Modules/YMMine/View/Cell/MineInfo/XPMineMedalsTableViewCell.m b/YuMi/Modules/YMMine/View/Cell/MineInfo/XPMineMedalsTableViewCell.m index e2dcc3e2..73503cb8 100644 --- a/YuMi/Modules/YMMine/View/Cell/MineInfo/XPMineMedalsTableViewCell.m +++ b/YuMi/Modules/YMMine/View/Cell/MineInfo/XPMineMedalsTableViewCell.m @@ -7,10 +7,14 @@ #import "XPMineMedalsTableViewCell.h" #import "MedalModel.h" +#import +#import "XPRoomGiftAnimationParser.h" @interface XPMineMedalCell : UICollectionViewCell @property (nonatomic, strong) NetImageView *imageView; +@property (nonatomic, strong) VAPView *vapView; +@property (nonatomic, strong) XPRoomGiftAnimationParser *vapParser; @end @@ -30,10 +34,30 @@ [_imageView mas_makeConstraints:^(MASConstraintMaker *make) { make.edges.mas_equalTo(self.contentView); }]; + + [self.contentView addSubview:self.vapView]; + [self.vapView mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.mas_equalTo(self.contentView); + }]; } return self; } +- (VAPView *)vapView { + if (!_vapView) { + _vapView = [[VAPView alloc] init]; + _vapView.contentMode = UIViewContentModeScaleAspectFill; + } + return _vapView; +} + +- (XPRoomGiftAnimationParser *)vapParser { + if (!_vapParser) { + _vapParser = [[XPRoomGiftAnimationParser alloc] init]; + } + return _vapParser; +} + @end @interface XPMineMedalsTableViewCell() @@ -84,6 +108,20 @@ UserMedalModel *userMedal = [self.medalsDataSource xpSafeObjectAtIndex:indexPath.row]; if (userMedal) { cell.imageView.imageUrl = userMedal.picUrl; + + NSString *resourcePath = [userMedal.picUrl stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; + if (resourcePath.length > 0) { + NSString *encodingUrl = [resourcePath stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet characterSetWithCharactersInString:@"`#%^{}\"[]|\\<> "].invertedSet]; + @kWeakify(cell); + [cell.vapParser parseWithURL:encodingUrl completionBlock:^(NSString * _Nullable videoUrl) { + @kStrongify(cell); + if (videoUrl.length) { + [cell.vapView setMute:YES]; + [cell.vapView playHWDMP4:videoUrl repeatCount:-1 delegate:nil]; + } + } failureBlock:^(NSError * _Nullable error) { + }]; + } } return cell; } @@ -91,7 +129,7 @@ #pragma mark - UICollectionViewDelegateFlowLayout - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { - return CGSizeMake(80, 80); + return CGSizeMake(140, 140); } #pragma mark - @@ -102,7 +140,7 @@ layout.minimumInteritemSpacing = 10; layout.minimumLineSpacing = 10; _medalsCollectionView = [[UICollectionView alloc] initWithFrame:CGRectZero - collectionViewLayout:layout]; + collectionViewLayout:layout]; _medalsCollectionView.backgroundColor = [UIColor clearColor]; _medalsCollectionView.delegate = self; _medalsCollectionView.dataSource = self; diff --git a/YuMi/Modules/YMMine/View/DressUp/View/Cell/XPMineNobleCardTableViewCell.m b/YuMi/Modules/YMMine/View/DressUp/View/Cell/XPMineNobleCardTableViewCell.m index 64b2d57d..d3b1137a 100644 --- a/YuMi/Modules/YMMine/View/DressUp/View/Cell/XPMineNobleCardTableViewCell.m +++ b/YuMi/Modules/YMMine/View/DressUp/View/Cell/XPMineNobleCardTableViewCell.m @@ -8,10 +8,12 @@ #import "XPMineNobleCardTableViewCell.h" ///Third #import +#import ///Tool #import "DJDKMIMOMColor.h" #import "NetImageView.h" #import "UIImage+Utils.h" +#import "XPRoomGiftAnimationParser.h" ///Model #import "NobleCardModel.h" @@ -25,6 +27,8 @@ @property (nonatomic, strong) UIImageView *userCardBackImageView; ///卡片外边框 @property (nonatomic, strong) NetImageView *nobleImageView; +@property (nonatomic, strong) VAPView *vapView; +@property (nonatomic, strong) XPRoomGiftAnimationParser *vapParser; ///名字 @property (nonatomic, strong) UILabel *titleLabel; ///剩余天数 @@ -55,6 +59,8 @@ [self.mainView addSubview:self.useButton]; [self.mainView addSubview:self.userCardBackImageView]; [self.mainView addSubview:self.nobleImageView]; + [self.contentView addSubview:self.vapView]; + } - (void)initSubViewConstraints { @@ -98,6 +104,10 @@ make.bottom.mas_equalTo(self.userCardBackImageView); make.centerX.mas_equalTo(self.mainView); }]; + + [self.vapView mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.mas_equalTo(self.nobleImageView); + }]; } #pragma mark - private @@ -122,6 +132,22 @@ [_useButton setTitleColor:[DJDKMIMOMColor confirmButtonTextColor] forState:UIControlStateNormal]; [_useButton setBackgroundImage:[UIImage gradientColorImageFromColors:@[[DJDKMIMOMColor confirmButtonGradientStartColor], [DJDKMIMOMColor confirmButtonGradientEndColor]] gradientType:GradientTypeLeftToRight imgSize:CGSizeMake(10, 10)] forState:UIControlStateNormal]; } + + NSString *resourcePath = [nobleCardModel.pic stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; + if (resourcePath.length == 0) { + return; + } + + NSString *encodingUrl = [resourcePath stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet characterSetWithCharactersInString:@"`#%^{}\"[]|\\<> "].invertedSet]; + @kWeakify(self); + [self.vapParser parseWithURL:encodingUrl completionBlock:^(NSString * _Nullable videoUrl) { + @kStrongify(self); + if (videoUrl.length) { + [self.vapView setMute:YES]; + [self.vapView playHWDMP4:videoUrl repeatCount:-1 delegate:nil]; + } + } failureBlock:^(NSError * _Nullable error) { + }]; } } @@ -202,4 +228,20 @@ } return _userCardBackImageView;; } + +- (VAPView *)vapView { + if (!_vapView) { + _vapView = [[VAPView alloc] init]; + _vapView.contentMode = UIViewContentModeScaleAspectFill; + } + return _vapView; +} + +- (XPRoomGiftAnimationParser *)vapParser { + if (!_vapParser) { + _vapParser = [[XPRoomGiftAnimationParser alloc] init]; + } + return _vapParser; +} + @end diff --git a/YuMi/Modules/YMMine/View/IncomeRecord/XPExchangeDiamondsVC.m b/YuMi/Modules/YMMine/View/IncomeRecord/XPExchangeDiamondsVC.m index c9dc1352..3ec5d7c9 100644 --- a/YuMi/Modules/YMMine/View/IncomeRecord/XPExchangeDiamondsVC.m +++ b/YuMi/Modules/YMMine/View/IncomeRecord/XPExchangeDiamondsVC.m @@ -45,11 +45,20 @@ [self showLoading]; [self.presenter getExchangeDiamondInformation]; } + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + + +} + #pragma mark - XPIncomeRecordProtocol -(void)getExchangeDiamondInformation:(XPExchangeDiamondsModel *)model{ [self hideHUD]; self.model = model; self.exchangeView.model = self.model; + + [self.exchangeView showKeyboard]; } - (void)confirmExchangeDiamondSuccessWithDiamondNum:(NSString *)diamondNum goldNum:(NSString *)goldNum{ [self hideHUD]; diff --git a/YuMi/Modules/YMMine/View/IncomeRecord/XPExchangeDiamondsView.h b/YuMi/Modules/YMMine/View/IncomeRecord/XPExchangeDiamondsView.h index 13a642cc..4d066881 100644 --- a/YuMi/Modules/YMMine/View/IncomeRecord/XPExchangeDiamondsView.h +++ b/YuMi/Modules/YMMine/View/IncomeRecord/XPExchangeDiamondsView.h @@ -23,15 +23,10 @@ typedef void(^ExchangeDiamondsItemViewHandle)(NSString *goldNum,NSString *diamon @interface XPExchangeDiamondsView : UIView @property (nonatomic,weak) id delegate; @property (nonatomic,strong) XPExchangeDiamondsModel *model; - +- (void)showKeyboard; @end - - - - - /*******************************************************华丽分割线***************************************************************/ @interface XPExchangeDiamondsItemView : UIView @@ -42,6 +37,7 @@ typedef void(^ExchangeDiamondsItemViewHandle)(NSString *goldNum,NSString *diamon @property (nonatomic,strong) XPExchangeDiamondsModel *model; @property (nonatomic,copy) NSString *count; -(instancetype)initWithFrame:(CGRect)frame type:(IncomeRecordViewType)type; +-(void)becomeResponder; -(void)resignResponder; @end diff --git a/YuMi/Modules/YMMine/View/IncomeRecord/XPExchangeDiamondsView.m b/YuMi/Modules/YMMine/View/IncomeRecord/XPExchangeDiamondsView.m index bad73e9c..9dd52c59 100644 --- a/YuMi/Modules/YMMine/View/IncomeRecord/XPExchangeDiamondsView.m +++ b/YuMi/Modules/YMMine/View/IncomeRecord/XPExchangeDiamondsView.m @@ -33,30 +33,35 @@ return self; } +- (void)showKeyboard { + [self.myDiamondsView becomeResponder]; +} + #pragma mark - Private Method - (void)initSubViews { self.backgroundColor = [UIColor clearColor]; - [self addSubview:self.myGoldView]; [self addSubview:self.myDiamondsView]; + [self addSubview:self.myGoldView]; + [self addSubview:self.confirmBtn]; @kWeakify(self) - self.myGoldView.inputCounthandle = ^(NSString *_Nonnull goldNum,NSString *_Nonnull diamondNum) { - @kStrongify(self) - if(goldNum.integerValue == 0 && diamondNum.integerValue == 0){ - self.confirmBtn.enabled = NO; - self.myGoldView.text = @""; - self.myDiamondsView.text = @""; - return; - } - self.chooseType = IncomeRecord_Gold; - self.confirmBtn.enabled = YES; - self.goldNum = goldNum; - self.diamondNum = diamondNum; - self.myDiamondsView.count = diamondNum; - - }; +// self.myGoldView.inputCounthandle = ^(NSString *_Nonnull goldNum,NSString *_Nonnull diamondNum) { +// @kStrongify(self) +// if(goldNum.integerValue == 0 && diamondNum.integerValue == 0){ +// self.confirmBtn.enabled = NO; +// self.myGoldView.text = @""; +// self.myDiamondsView.text = @""; +// return; +// } +// self.chooseType = IncomeRecord_Gold; +// self.confirmBtn.enabled = YES; +// self.goldNum = goldNum; +// self.diamondNum = diamondNum; +// self.myDiamondsView.count = diamondNum; +// +// }; self.myDiamondsView.inputCounthandle = ^(NSString *_Nonnull goldNum,NSString *_Nonnull diamondNum) { @kStrongify(self) if(goldNum.integerValue == 0 && diamondNum.integerValue == 0){ @@ -69,7 +74,7 @@ self.confirmBtn.enabled = YES; self.goldNum = goldNum; self.diamondNum = diamondNum; - self.myGoldView.count = goldNum; + self.myGoldView.count = diamondNum; self.chooseType = IncomeRecord_Diamond; }; @@ -240,6 +245,11 @@ -(void)resignResponder{ [_numberView resignFirstResponder]; } + +-(void)becomeResponder { + [_numberView becomeFirstResponder]; +} + -(void)setText:(NSString *)text{ _text = text; _numberView.text = _text; @@ -258,13 +268,13 @@ } NSInteger count = textField.text.integerValue; - if(self.type == IncomeRecord_Gold){ - NSString *goldNum = [NSString stringWithFormat:@"%.0f",ceilf(count / _model.rate)]; - if(self.inputCounthandle){ - self.inputCounthandle(goldNum, textField.text); - } - return; - } +// if(self.type == IncomeRecord_Gold){ +// NSString *goldNum = [NSString stringWithFormat:@"%.0f",ceilf(count / _model.rate)]; +// if(self.inputCounthandle){ +// self.inputCounthandle(goldNum, textField.text); +// } +// return; +// } NSString *diamondNum = [NSString stringWithFormat:@"%.0f",floorf(count * _model.rate)]; if(self.inputCounthandle){ self.inputCounthandle(textField.text,diamondNum); @@ -311,12 +321,16 @@ _numberView = [[XPTextField alloc]initWithFrame:CGRectZero]; _numberView.keyboardType = UIKeyboardTypeNumberPad; _numberView.isValidation = YES; - NSMutableAttributedString *attStr = [[NSMutableAttributedString alloc]initWithString:YMLocalizedString(@"XPExchangeDiamondsView6") attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:16 weight:UIFontWeightMedium],NSForegroundColorAttributeName:[UIColor colorWithWhite:1 alpha:0.6]}]; + NSMutableAttributedString *attStr = [[NSMutableAttributedString alloc] initWithString:(self.type == IncomeRecord_Diamond) ? YMLocalizedString(@"XPExchangeDiamondsView6") : YMLocalizedString(@"XPExchangeDiamondsView7") + attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:16 weight:UIFontWeightMedium], + NSForegroundColorAttributeName:[UIColor colorWithWhite:1 alpha:0.6]}]; _numberView.attributedPlaceholder = attStr; _numberView.font = kFontMedium(15); _numberView.textColor = [UIColor whiteColor]; -// _numberView.textAlignment = NSTextAlignmentRight; [_numberView addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged]; + if (self.type == IncomeRecord_Gold) { + _numberView.userInteractionEnabled = NO; + } } return _numberView; } diff --git a/YuMi/Modules/YMMine/View/MineInfo/XPMineUserDataViewController.m b/YuMi/Modules/YMMine/View/MineInfo/XPMineUserDataViewController.m index 2b4bc3fe..6a6d79b2 100644 --- a/YuMi/Modules/YMMine/View/MineInfo/XPMineUserDataViewController.m +++ b/YuMi/Modules/YMMine/View/MineInfo/XPMineUserDataViewController.m @@ -259,7 +259,7 @@ typedef enum : NSUInteger { return 90; break; case Medal: - return 70; + return 140; break; case Gifts: return [XPMineGiftsTableViewCell cellHeight:self.isGiftsSectionExpand diff --git a/YuMi/Modules/YMMine/View/Noble/View/VIPCenterViewController.m b/YuMi/Modules/YMMine/View/Noble/View/VIPCenterViewController.m index 42a2a500..fab86ae7 100644 --- a/YuMi/Modules/YMMine/View/Noble/View/VIPCenterViewController.m +++ b/YuMi/Modules/YMMine/View/Noble/View/VIPCenterViewController.m @@ -797,6 +797,7 @@ #pragma mark - Load Data from API - (void)setupData { + [self showLoading]; [self loadUserInfo]; [self loadWalletInfo]; } @@ -815,6 +816,12 @@ [self loadVIPCenterInfo]; [self updatePurchaseArea]; + } else { + if (msg.length > 0) { + [self showErrorToast:msg]; + } else { + [self hideHUD]; + } } } uid:uid]; } @@ -862,6 +869,14 @@ [self configIdentificationCards]; [self configExclusivePrivilegesArea]; [self updatePurchaseArea]; + + [self hideHUD]; + } else { + if (msg.length > 0) { + [self showErrorToast:msg]; + } else { + [self hideHUD]; + } } }]; } @@ -915,7 +930,7 @@ #pragma mark - TYCyclePagerView Delegate & DataSource - (NSInteger)numberOfItemsInPagerView:(TYCyclePagerView *)pageView { - return 9; + return self.vipModel.vipInfos.count;//9; } - (TYCyclePagerViewLayout *)layoutForPagerView:(TYCyclePagerView *)pageView { @@ -1046,7 +1061,6 @@ _vipCardCyclePager.collectionView.semanticContentAttribute = UISemanticContentAttributeForceLeftToRight; _vipCardCyclePager.backgroundColor = [UIColor clearColor]; _vipCardCyclePager.backgroundView = nil; - _vipCardCyclePager.layer.borderWidth = 1; _vipCardCyclePager.isInfiniteLoop = NO; _vipCardCyclePager.autoScrollInterval = -1; _vipCardCyclePager.dataSource = self; diff --git a/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoHeaderView.m b/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoHeaderView.m index a9bff782..efff7785 100644 --- a/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoHeaderView.m +++ b/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoHeaderView.m @@ -355,7 +355,7 @@ return view;\ [self.namePlateView addSubview:self.nameplateImageView]; [self.namePlateView addSubview:self.nameplateLabel]; [self.nameplateImageView mas_makeConstraints:^(MASConstraintMaker *make) { - make.height.mas_equalTo(30); + make.height.mas_equalTo(20); make.top.mas_equalTo(0); make.width.mas_equalTo(80); }]; @@ -389,7 +389,7 @@ return view;\ make.width.mas_equalTo(54); }]; [self.namePlateView mas_makeConstraints:^(MASConstraintMaker *make) { - make.height.mas_equalTo(30); + make.height.mas_equalTo(20); make.width.mas_equalTo(80); }]; } diff --git a/YuMi/Modules/YMMine/View/XPMineViewController.m b/YuMi/Modules/YMMine/View/XPMineViewController.m index 54849b02..0e4a890d 100644 --- a/YuMi/Modules/YMMine/View/XPMineViewController.m +++ b/YuMi/Modules/YMMine/View/XPMineViewController.m @@ -67,6 +67,7 @@ #import "XPLittleGameRoomOpenView.h" #import "PISwitchingEnvironmentVC.h" #import "XPGameOrdersListViewController.h" +#import "VIPCenterViewController.h" UIKIT_EXTERN NSString *kRequestTicket; @@ -297,8 +298,10 @@ UIKIT_EXTERN NSString *kRequestTicket; break; case XPMineItemType_Noble_Center: { - XPNobleCenterViewController *nobleCenterVC = [[XPNobleCenterViewController alloc] init]; - [self.navigationController pushViewController:nobleCenterVC animated:YES]; + VIPCenterViewController *vc = [[VIPCenterViewController alloc] init]; + [self.navigationController pushViewController:vc animated:YES]; +// XPNobleCenterViewController *nobleCenterVC = [[XPNobleCenterViewController alloc] init]; +// [self.navigationController pushViewController:nobleCenterVC animated:YES]; } break; case XPMineItemType_FansTeam: { diff --git a/YuMi/Modules/YMNewHome/View/CustomView/XPNewHomeItemCell.m b/YuMi/Modules/YMNewHome/View/CustomView/XPNewHomeItemCell.m index 5061bd3d..3449e464 100644 --- a/YuMi/Modules/YMNewHome/View/CustomView/XPNewHomeItemCell.m +++ b/YuMi/Modules/YMNewHome/View/CustomView/XPNewHomeItemCell.m @@ -47,9 +47,9 @@ UIImageView *headDress_1 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"home_rank_Headdress_first"]]; UIImageView *headDress_2 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"home_rank_Headdress_second"]]; UIImageView *headDress_3 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"home_rank_Headdress_second"]]; - headDress_1.contentMode = UIViewContentModeScaleAspectFit; - headDress_2.contentMode = UIViewContentModeScaleAspectFit; - headDress_3.contentMode = UIViewContentModeScaleAspectFit; + headDress_1.contentMode = UIViewContentModeScaleAspectFill; + headDress_2.contentMode = UIViewContentModeScaleAspectFill; + headDress_3.contentMode = UIViewContentModeScaleAspectFill; [self.contentView addSubview:headDress_3]; [self.contentView addSubview:headDress_2]; @@ -58,22 +58,22 @@ [headDress_1 mas_makeConstraints:^(MASConstraintMaker *make) { make.centerX.mas_equalTo(self.contentView).offset(2); make.top.mas_equalTo(self.contentView).offset(3); - make.width.mas_equalTo(62); - make.height.mas_equalTo(62); + make.width.mas_equalTo(kGetScaleWidth(62)); + make.height.mas_equalTo(kGetScaleWidth(62)); }]; [headDress_2 mas_makeConstraints:^(MASConstraintMaker *make) { make.bottom.mas_equalTo(self.contentView).offset(-5); make.leading.mas_equalTo(self.contentView).offset(3); - make.width.mas_equalTo(55); - make.height.mas_equalTo(55); + make.width.mas_equalTo(kGetScaleWidth(55)); + make.height.mas_equalTo(kGetScaleWidth(55)); }]; [headDress_3 mas_makeConstraints:^(MASConstraintMaker *make) { make.bottom.mas_equalTo(self.contentView).offset(-5); make.trailing.mas_equalTo(self.contentView).offset(-3); - make.width.mas_equalTo(55); - make.height.mas_equalTo(55); + make.width.mas_equalTo(kGetScaleWidth(55)); + make.height.mas_equalTo(kGetScaleWidth(55)); }]; [self.contentView insertSubview:self.avatar_1 belowSubview:headDress_1]; @@ -83,19 +83,19 @@ [self.avatar_1 mas_makeConstraints:^(MASConstraintMaker *make) { make.top.mas_equalTo(self.contentView).offset(13); make.centerX.mas_equalTo(headDress_1); - make.width.height.mas_equalTo(38); + make.width.height.mas_equalTo(kGetScaleWidth(38)); }]; [self.avatar_2 mas_makeConstraints:^(MASConstraintMaker *make) { make.bottom.mas_equalTo(headDress_2).offset(-9); make.centerX.mas_equalTo(headDress_2); - make.width.height.mas_equalTo(38); + make.width.height.mas_equalTo(kGetScaleWidth(38)); }]; [self.avatar_3 mas_makeConstraints:^(MASConstraintMaker *make) { make.bottom.mas_equalTo(headDress_3).offset(-9); make.centerX.mas_equalTo(headDress_3); - make.width.height.mas_equalTo(38); + make.width.height.mas_equalTo(kGetScaleWidth(38)); }]; } @@ -168,7 +168,7 @@ } else { _bgImageView.layer.cornerRadius = kGetScaleWidth(12); @kWeakify(self); - [_bgImageView loadImageWithUrl: _itemModel.icon completion:^(UIImage * _Nonnull image, NSURL * _Nonnull url) { + [_bgImageView loadImageWithUrl:_itemModel.icon completion:^(UIImage * _Nonnull image, NSURL * _Nonnull url) { @kStrongify(self); self.bgImageView.layer.cornerRadius = kGetScaleWidth(0); }]; diff --git a/YuMi/Modules/YMNewHome/View/XPHomePagingViewController.m b/YuMi/Modules/YMNewHome/View/XPHomePagingViewController.m index c130c0e6..af934853 100644 --- a/YuMi/Modules/YMNewHome/View/XPHomePagingViewController.m +++ b/YuMi/Modules/YMNewHome/View/XPHomePagingViewController.m @@ -14,8 +14,6 @@ #import "Api+Gift.h" #import "XPGiftStorage.h" -#import "VIPCenterViewController.h" - @interface XPHomePagingViewController () @property (nonatomic, strong) UIView *topControlView; @@ -173,12 +171,6 @@ } - (void)didTapSearchButton { -#if DEBUG - VIPCenterViewController *vc = [[VIPCenterViewController alloc] init]; - [self.navigationController pushViewController:vc animated:YES]; - return; -#endif - XPRoomSearchContainerViewController * searchVC = [[XPRoomSearchContainerViewController alloc] init]; searchVC.modalPresentationStyle = UIModalPresentationFullScreen; [self.navigationController presentViewController:searchVC diff --git a/YuMi/Modules/YMRoom/View/UserCard/View/XPUserCardViewController.m b/YuMi/Modules/YMRoom/View/UserCard/View/XPUserCardViewController.m index 62e70c7b..67b045b5 100644 --- a/YuMi/Modules/YMRoom/View/UserCard/View/XPUserCardViewController.m +++ b/YuMi/Modules/YMRoom/View/UserCard/View/XPUserCardViewController.m @@ -43,7 +43,8 @@ #import "XPMineUserInfoViewController.h" #import "SessionViewController.h" - +#import +#import "XPRoomGiftAnimationParser.h" @interface XPUserCardViewController () ///上面点击的view @@ -58,6 +59,8 @@ @property (nonatomic,strong) UIView * userInfoView; ///VIP资料卡头饰 @property (nonatomic, strong) NetImageView *nobleImageView; +@property (nonatomic, strong) VAPView *vapView; +@property (nonatomic, strong) XPRoomGiftAnimationParser *vapParser; ///模糊效果 @property (strong, nonatomic) UIVisualEffectView *effectView; ///头像背景 @@ -153,7 +156,8 @@ [self.backView addSubview:self.stackView]; [self.view addSubview:self.nobleImageView]; - + [self.view addSubview:self.vapView]; + [self.stackView addArrangedSubview:self.userInfoView]; [self.stackView addArrangedSubview:self.skillCardView]; [self.stackView addArrangedSubview:self.collectionView]; @@ -220,6 +224,9 @@ make.trailing.mas_equalTo(self.backView).offset(nobleMargin*0.5); make.leading.mas_equalTo(self.backView).mas_offset(-nobleMargin*0.5); }]; + [self.vapView mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.mas_equalTo(self.nobleImageView); + }]; [self.skillCardView mas_makeConstraints:^(MASConstraintMaker *make) { make.width.mas_equalTo(self.userInfoView); make.height.mas_equalTo(0); @@ -239,7 +246,8 @@ }]; ///用户信息的子view [self.backImageView mas_makeConstraints:^(MASConstraintMaker *make) { - make.edges.mas_equalTo(self.userInfoView); + make.top.leading.right.mas_equalTo(self.userInfoView); + make.height.mas_equalTo(110); }]; [self.effectView mas_makeConstraints:^(MASConstraintMaker *make) { @@ -520,16 +528,40 @@ - (void)onGetUserInfoSuccess:(UserInfoModel *)userInfo { self.targetUserInfo = userInfo; self.avatarImageView.imageUrl = userInfo.avatar; - self.backImageView.imageUrl = userInfo.avatar; self.nobleImageView.imageUrl = userInfo.userInfoCardPic; + + if (userInfo.userVipInfoVO.vipLevel>0 && userInfo.userVipInfoVO.userCardBG.length > 0) { + self.backImageView.imageUrl = [userInfo.userVipInfoVO.userCardBG stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; + self.effectView.hidden = YES; + self.backImageView.clipsToBounds = NO; + [self.backImageView mas_updateConstraints:^(MASConstraintMaker *make) { + make.height.mas_equalTo(180); + }]; + } else { + self.backImageView.layer.masksToBounds = YES; + self.backImageView.layer.cornerRadius = 25; + self.backImageView.imageUrl = userInfo.avatar; + } + + NSString *resourcePath = [userInfo.userInfoCardPic stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; + if (resourcePath.length > 0) { + NSString *encodingUrl = [resourcePath stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet characterSetWithCharactersInString:@"`#%^{}\"[]|\\<> "].invertedSet]; + @kWeakify(self); + [self.vapParser parseWithURL:encodingUrl completionBlock:^(NSString * _Nullable videoUrl) { + @kStrongify(self); + if (videoUrl.length) { + [self.vapView setMute:YES]; + [self.vapView playHWDMP4:videoUrl repeatCount:-1 delegate:nil]; + } + } failureBlock:^(NSError * _Nullable error) { + }]; + } + self.nobleIconImageView.imageUrl = userInfo.userVipInfoVO.vipIcon; if (userInfo.userVipInfoVO && userInfo.userVipInfoVO.vipIcon) {//VIPicon [self.nobleIconImageView mas_updateConstraints:^(MASConstraintMaker *make) { make.width.mas_equalTo(30); }]; -// [self.nickLabel mas_updateConstraints:^(MASConstraintMaker *make) { -// make.leading.mas_equalTo(self.nobleIconImageView.mas_trailing).mas_offset(2); -// }]; } NSString * nick = userInfo.nick; // if (nick.length > 20) { @@ -598,7 +630,6 @@ make.height.mas_equalTo(30); }]; } - self.skillCardView.dataArray = userInfo.absCardPics; } @@ -1222,8 +1253,6 @@ if (!_backImageView) { _backImageView = [[NetImageView alloc] init]; _backImageView.userInteractionEnabled = YES; - _backImageView.layer.masksToBounds = YES; - _backImageView.layer.cornerRadius = 25; _backImageView.contentMode = UIViewContentModeScaleAspectFill; _backImageView.image = [UIImageConstant defaultAvatarPlaceholder]; } @@ -1500,4 +1529,20 @@ return _pickHeartButton; } +- (VAPView *)vapView { + if (!_vapView) { + _vapView = [[VAPView alloc] init]; + _vapView.contentMode = UIViewContentModeScaleAspectFill; + } + return _vapView; +} + +- (XPRoomGiftAnimationParser *)vapParser { + if (!_vapParser) { + _vapParser = [[XPRoomGiftAnimationParser alloc] init]; + _vapView.userInteractionEnabled = NO; + } + return _vapParser; +} + @end diff --git a/YuMi/Structure/MVP/Model/UserVipInfoVo.h b/YuMi/Structure/MVP/Model/UserVipInfoVo.h index 55635db4..1b336db8 100644 --- a/YuMi/Structure/MVP/Model/UserVipInfoVo.h +++ b/YuMi/Structure/MVP/Model/UserVipInfoVo.h @@ -28,6 +28,8 @@ NS_ASSUME_NONNULL_BEGIN ///隐身访问主页 @property (nonatomic,assign) BOOL lookHomepageHide; +@property (nonatomic, copy) NSString *userCardBG; + @end NS_ASSUME_NONNULL_END diff --git a/YuMi/ar.lproj/Localizable.strings b/YuMi/ar.lproj/Localizable.strings index d86527a0..758035ae 100644 --- a/YuMi/ar.lproj/Localizable.strings +++ b/YuMi/ar.lproj/Localizable.strings @@ -3200,6 +3200,7 @@ ineHeadView12" = "الحمل"; "XPExchangeDiamondsView2" = "عدد الألماس غير كافٍ"; "XPIncomeRecordGoldDetailsVC0" = "تفاصيل الألماس"; "XPExchangeDiamondsView6"="يرجى إدخال …"; +"XPExchangeDiamondsView7"="الرجاء إدخال عدد الماسات..."; ///XPNobleCenterMyNobleView.m "XPNobleCenterMyNobleView0" = "المستوى الحالي"; "XPNobleCenterMyNobleView1" = "لقد تم الوصول إلى أعلى مستوى VIP قابل للإستخدام"; diff --git a/YuMi/en.lproj/Localizable.strings b/YuMi/en.lproj/Localizable.strings index 5d329612..d206c979 100644 --- a/YuMi/en.lproj/Localizable.strings +++ b/YuMi/en.lproj/Localizable.strings @@ -2992,6 +2992,7 @@ "XPExchangeDiamondsView4"="The number of Coins for exchange cannot exceed %ld"; "XPExchangeDiamondsView5"="Exchange successful"; "XPExchangeDiamondsView6"="Please enter..."; +"XPExchangeDiamondsView7"="Please enter the number of diamonds..."; "XPIncomeRecordCoinsDetailsView0"="No data available"; "XPIncomeRecordCoinsDetailsView1"="Total Coins flow in the current room: %@ diamonds"; diff --git a/YuMi/zh-Hans.lproj/Localizable.strings b/YuMi/zh-Hans.lproj/Localizable.strings index 2a8ae486..4c7b73a9 100644 --- a/YuMi/zh-Hans.lproj/Localizable.strings +++ b/YuMi/zh-Hans.lproj/Localizable.strings @@ -2634,6 +2634,7 @@ "XPExchangeDiamondsView4"="兑换金币数不能超过%ld钻"; "XPExchangeDiamondsView5"="兑换成功"; "XPExchangeDiamondsView6"="請輸入..."; +"XPExchangeDiamondsView7"="請輸入鑽石數量..."; "XPIncomeRecordGoldDetailsView0"="暂没有数据"; "XPIncomeRecordGoldDetailsView1"="当前房间总计金币流水:%@金币"; diff --git a/YuMi/zh-Hant.lproj/Localizable.strings b/YuMi/zh-Hant.lproj/Localizable.strings index 342f1022..72b1deb6 100644 --- a/YuMi/zh-Hant.lproj/Localizable.strings +++ b/YuMi/zh-Hant.lproj/Localizable.strings @@ -2627,6 +2627,7 @@ "XPExchangeDiamondsView4"="兌換金幣數不能超過%ld鉆"; "XPExchangeDiamondsView5"="兌換成功"; "XPExchangeDiamondsView6"="請輸入..."; +"XPExchangeDiamondsView7"="請輸入鑽石數量..."; "XPIncomeRecordGoldDetailsView0"="暫沒有數據"; "XPIncomeRecordGoldDetailsView1"="當前房間總計金幣流水:%@金幣";