房间榜单完成

This commit is contained in:
fengshuo
2021-12-15 18:12:55 +08:00
parent 77700bc31f
commit f1ec673b26
51 changed files with 1063 additions and 80 deletions

View File

@@ -178,6 +178,8 @@
E82EE0F8272FDDFA00D15DC1 /* UserPrivacyView.m in Sources */ = {isa = PBXBuildFile; fileRef = E82EE0F7272FDDFA00D15DC1 /* UserPrivacyView.m */; };
E833ED0D274FAD1C00A2463B /* XPKickUserModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E833ED0C274FAD1C00A2463B /* XPKickUserModel.m */; };
E838D9A0275E1BF60079E0B5 /* XPRoomAnimationView.m in Sources */ = {isa = PBXBuildFile; fileRef = E838D99F275E1BF60079E0B5 /* XPRoomAnimationView.m */; };
E839531E2769CCCE00CF2F24 /* RoomRankModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E839531D2769CCCE00CF2F24 /* RoomRankModel.m */; };
E83953222769F33B00CF2F24 /* XPRoomFunctionContainerView.m in Sources */ = {isa = PBXBuildFile; fileRef = E83953212769F33B00CF2F24 /* XPRoomFunctionContainerView.m */; };
E83DB47A27462C4500D8CBD1 /* XPGiftBigPrizeModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E83DB47927462C4500D8CBD1 /* XPGiftBigPrizeModel.m */; };
E83DB47D2746372300D8CBD1 /* XPRoomGiftBannerView.m in Sources */ = {isa = PBXBuildFile; fileRef = E83DB47C2746372300D8CBD1 /* XPRoomGiftBannerView.m */; };
E83DB481274649FB00D8CBD1 /* XPGiftBannerUserInfoModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E83DB480274649FB00D8CBD1 /* XPGiftBannerUserInfoModel.m */; };
@@ -693,6 +695,11 @@
E833ED0C274FAD1C00A2463B /* XPKickUserModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPKickUserModel.m; sourceTree = "<group>"; };
E838D99E275E1BF60079E0B5 /* XPRoomAnimationView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPRoomAnimationView.h; sourceTree = "<group>"; };
E838D99F275E1BF60079E0B5 /* XPRoomAnimationView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPRoomAnimationView.m; sourceTree = "<group>"; };
E839531C2769CCCE00CF2F24 /* RoomRankModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RoomRankModel.h; sourceTree = "<group>"; };
E839531D2769CCCE00CF2F24 /* RoomRankModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RoomRankModel.m; sourceTree = "<group>"; };
E839531F2769E40900CF2F24 /* XPRoomRankHostDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPRoomRankHostDelegate.h; sourceTree = "<group>"; };
E83953202769F33B00CF2F24 /* XPRoomFunctionContainerView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPRoomFunctionContainerView.h; sourceTree = "<group>"; };
E83953212769F33B00CF2F24 /* XPRoomFunctionContainerView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPRoomFunctionContainerView.m; sourceTree = "<group>"; };
E83DB47827462C4500D8CBD1 /* XPGiftBigPrizeModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPGiftBigPrizeModel.h; sourceTree = "<group>"; };
E83DB47927462C4500D8CBD1 /* XPGiftBigPrizeModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPGiftBigPrizeModel.m; sourceTree = "<group>"; };
E83DB47B2746372300D8CBD1 /* XPRoomGiftBannerView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPRoomGiftBannerView.h; sourceTree = "<group>"; };
@@ -1920,6 +1927,7 @@
isa = PBXGroup;
children = (
E8252FF02768882B002B3164 /* XPRoomRankProtocol.h */,
E839531F2769E40900CF2F24 /* XPRoomRankHostDelegate.h */,
);
path = Protocol;
sourceTree = "<group>";
@@ -1960,6 +1968,8 @@
E8252FF527688868002B3164 /* Model */ = {
isa = PBXGroup;
children = (
E839531C2769CCCE00CF2F24 /* RoomRankModel.h */,
E839531D2769CCCE00CF2F24 /* RoomRankModel.m */,
);
path = Model;
sourceTree = "<group>";
@@ -2494,6 +2504,8 @@
children = (
E8AEAEEB27141AE20017FCE0 /* XPRoomBackContainerView.h */,
E8AEAEEC27141AE20017FCE0 /* XPRoomBackContainerView.m */,
E83953202769F33B00CF2F24 /* XPRoomFunctionContainerView.h */,
E83953212769F33B00CF2F24 /* XPRoomFunctionContainerView.m */,
);
path = BaseUIContainerView;
sourceTree = "<group>";
@@ -3106,6 +3118,7 @@
E8232603274E4AA0003A3332 /* ThemeColor+UserCard.m in Sources */,
E87A24F1272935920086A794 /* XPMessageRemoteExtModel.m in Sources */,
E88B5CBA26FB329C00DA9178 /* XPMineTeenagerPwdProtocol.h in Sources */,
E83953222769F33B00CF2F24 /* XPRoomFunctionContainerView.m in Sources */,
E88B5CB226FB1CFF00DA9178 /* XPMineTeenagerProtocol.h in Sources */,
E824546626F5FF6000BE8163 /* XPMineResetPayPasswordProtocol.h in Sources */,
E89DA66427005932008483C1 /* XPIAPHelper.m in Sources */,
@@ -3385,6 +3398,7 @@
18E7B29026EA0E6B0064BC9B /* FlutterBoost+Xplan.m in Sources */,
E8B846DC26FDE24300A777FE /* RechargeListModel.m in Sources */,
E884C36C2743951B00E1EBED /* GiftReceiveInfoModel.m in Sources */,
E839531E2769CCCE00CF2F24 /* RoomRankModel.m in Sources */,
189DD75926E6003C00AB55B1 /* Api.m in Sources */,
E8133916273E532D00708B66 /* XPGiftItemCollectionViewCell.m in Sources */,
E833ED0D274FAD1C00A2463B /* XPKickUserModel.m in Sources */,

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 303 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 439 B

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

View File

@@ -0,0 +1,16 @@
//
// XPRoomFunctionContainerView.h
// xplan-ios
//
// Created by 冯硕 on 2021/12/15.
//
#import "XPRoomAnimationHitView.h"
#import "RoomHostDelegate.h"
NS_ASSUME_NONNULL_BEGIN
@interface XPRoomFunctionContainerView : XPRoomAnimationHitView
- (instancetype)initWithdelegate:(id<RoomHostDelegate>)delegate;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,74 @@
//
// XPRoomFunctionContainerView.m
// xplan-ios
//
// Created by on 2021/12/15.
//
#import "XPRoomFunctionContainerView.h"
///Tool
#import "XPMacro.h"
///Third
#import <Masonry/Masonry.h>
///Model
#import "RoomInfoModel.h"
///View
#import "XPRoomRankViewController.h"
@interface XPRoomFunctionContainerView ()
///host
@property (nonatomic,weak) id<RoomHostDelegate>delegate;
///
@property (nonatomic,strong) UIButton *contributionButton;
@end
@implementation XPRoomFunctionContainerView
- (instancetype)initWithdelegate:(id<RoomHostDelegate>)delegate {
self = [super init];
if (self) {
self.delegate = delegate;
[self initSubViews];
[self initSubViewConstraints];
}
return self;
}
#pragma mark - Private Method
- (void)initSubViews {
[self addSubview:self.contributionButton];
}
- (void)initSubViewConstraints {
[self.contributionButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.mas_equalTo(-12);
make.top.mas_equalTo(statusbarHeight+57);
make.width.mas_equalTo(90);
make.height.mas_equalTo(26);
}];
}
#pragma mark - Event Response
- (void)contributionButtonAction:(UIButton *)sender {
NSString * roomUid = [NSString stringWithFormat:@"%ld", self.delegate.getRoomInfo.uid];
XPRoomRankViewController * rankVC = [[XPRoomRankViewController alloc] initWithRoomUid:roomUid delegate:self.delegate];
[self.delegate.getCurrentNav presentViewController:rankVC animated:YES completion:nil];
}
#pragma mark - Getters And Setters
- (UIButton *)contributionButton {
if (!_contributionButton) {
_contributionButton = [[UIButton alloc]init];
[_contributionButton addTarget:self action:@selector(contributionButtonAction:) forControlEvents:UIControlEventTouchUpInside];
_contributionButton.backgroundColor = [UIColor colorWithWhite:0 alpha:0.2];
[_contributionButton setTitle:@"房间榜" forState:UIControlStateNormal];
[_contributionButton setImage:[UIImage imageNamed:@"room_rank_enter_icon"] forState:UIControlStateNormal];
[_contributionButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
_contributionButton.titleLabel.font = [UIFont systemFontOfSize:12];
_contributionButton.layer.cornerRadius = 13;
_contributionButton.layer.masksToBounds = YES;
_contributionButton.imageEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0);
_contributionButton.titleEdgeInsets = UIEdgeInsetsMake(0, 20, 0, 0);
}
return _contributionButton;
}
@end

View File

@@ -24,7 +24,6 @@
#import "SessionListViewController.h"
#import "XPRoomMoreMenuViewController.h"
#import "XPRoomRankViewController.h"
@interface XPRoomMenuContainerView ()
///
@@ -96,12 +95,8 @@
}
break;
case XPRoomMenuItemType_More: {
// XPRoomMoreMenuViewController * moreMenuVC = [[XPRoomMoreMenuViewController alloc] initRoomInfo:self.delegate.getRoomInfo];
// [self.delegate.getCurrentNav presentViewController:moreMenuVC animated:YES completion:nil];
XPRoomRankViewController * rankVC = [[XPRoomRankViewController alloc] init];
rankVC.modalPresentationStyle = UIModalPresentationOverFullScreen;
[self.delegate.getCurrentNav presentViewController:rankVC animated:YES completion:nil];
XPRoomMoreMenuViewController * moreMenuVC = [[XPRoomMoreMenuViewController alloc] initRoomInfo:self.delegate.getRoomInfo];
[self.delegate.getCurrentNav presentViewController:moreMenuVC animated:YES completion:nil];
}
break;
default:

View File

@@ -10,7 +10,21 @@
NS_ASSUME_NONNULL_BEGIN
@interface Api (RoomRank)
/// 房间贡献榜
/// @param completion 完成
/// @param roomUid 房主的uid
/// @param page 当前的页数
/// @param pageSize 一页有多少个
/// @param type 类型 day 日榜 week 周榜 month月榜
+ (void)roomContributeRank:(HttpRequestHelperCompletion)completion roomUid:(NSString *)roomUid page:(NSString *)page pageSize:(NSString *)pageSize type:(NSString *)type;
/// 房间魅力榜
/// @param completion 完成
/// @param roomUid 房主的uid
/// @param page 当前的页数
/// @param pageSize 一页有多少个
/// @param type 类型 day 日榜 week 周榜 month月榜
+ (void)roomCharmRank:(HttpRequestHelperCompletion)completion roomUid:(NSString *)roomUid page:(NSString *)page pageSize:(NSString *)pageSize type:(NSString *)type;
@end
NS_ASSUME_NONNULL_END

View File

@@ -9,4 +9,25 @@
@implementation Api (RoomRank)
///
/// @param completion
/// @param roomUid uid
/// @param page
/// @param pageSize
/// @param type day week month
+ (void)roomContributeRank:(HttpRequestHelperCompletion)completion roomUid:(NSString *)roomUid page:(NSString *)page pageSize:(NSString *)pageSize type:(NSString *)type {
[self makeRequest:@"room/rankings" method:HttpRequestHelperMethodGET completion:completion, __FUNCTION__, roomUid, page, pageSize, type, nil];
}
///
/// @param completion
/// @param roomUid uid
/// @param page
/// @param pageSize
/// @param type day week month
+ (void)roomCharmRank:(HttpRequestHelperCompletion)completion roomUid:(NSString *)roomUid page:(NSString *)page pageSize:(NSString *)pageSize type:(NSString *)type {
[self makeRequest:@"room/recive/rankings" method:HttpRequestHelperMethodGET completion:completion, __FUNCTION__, roomUid, page, pageSize, type, nil];
}
@end

View File

@@ -0,0 +1,30 @@
//
// RoomRankModel.h
// xplan-ios
//
// Created by 冯硕 on 2021/12/15.
//
#import <Foundation/Foundation.h>
///Tool
#import "XPEnum.h"
NS_ASSUME_NONNULL_BEGIN
@interface RoomRankModel : NSObject
///用户的uid
@property (nonatomic,copy) NSString * uid;
///昵称
@property (nonatomic,copy) NSString *nick;
///头像
@property (nonatomic,copy) NSString *avatar;
///性别
@property (nonatomic,assign) GenderType gender;
///房间send/receive钻石总数
@property (nonatomic,copy) NSString *goldAmount;
///erban id
@property (nonatomic,copy) NSString *erbanNo;
///排名
@property (nonatomic,copy) NSString *ranking;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,12 @@
//
// RoomRankModel.m
// xplan-ios
//
// Created by on 2021/12/15.
//
#import "RoomRankModel.h"
@implementation RoomRankModel
@end

View File

@@ -8,9 +8,41 @@
#import "BaseMvpPresenter.h"
NS_ASSUME_NONNULL_BEGIN
typedef NS_ENUM(NSInteger, RankListType) {
RankListType_Day = 1,
RankListType_Week,
};
typedef NS_ENUM(NSInteger, RoomDayRankType) {
///财富榜
RoomDayRankType_Wealth = 1,
///魅力榜
RoomDayRankType_Charm,
};
@interface XPRoomRankPresenter : BaseMvpPresenter
/// 请求房间贡献榜
/// @param roomUid 房主的uid
/// @param type 类型
/// @param page 当前页数
/// @param pageSize 一页多少个
- (void)getRoomContributeRankList:(NSString *)roomUid
type:(RankListType)type
page:(int)page
pageSize:(int)pageSize
state:(int)state;
/// 请求房间贡献榜
/// @param roomUid 房主的uid
/// @param type 类型
/// @param page 当前页数
/// @param pageSize 一页多少个
- (void)getRoomCharmRankList:(NSString *)roomUid
type:(RankListType)type
page:(int)page
pageSize:(int)pageSize
state:(int)state;
@end
NS_ASSUME_NONNULL_END

View File

@@ -6,7 +6,45 @@
//
#import "XPRoomRankPresenter.h"
#import "Api+RoomRank.h"
#import "XPRoomRankProtocol.h"
#import "RoomRankModel.h"
@implementation XPRoomRankPresenter
///
/// @param roomUid uid
/// @param type
/// @param page
/// @param pageSize
- (void)getRoomContributeRankList:(NSString *)roomUid type:(RankListType)type page:(int)page pageSize:(int)pageSize state:(int)state {
NSString * pageStr = [NSString stringWithFormat:@"%d", page];
NSString * pageSizeStr = [NSString stringWithFormat:@"%d", pageSize];
NSString * typeStr = type == RankListType_Day ? @"day" : @"week";
[Api roomContributeRank:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
NSArray * array = [RoomRankModel modelsWithArray:data.data[@"rankings"]];
[[self getView] getRoomContributeRankListSuccess:array state:state];
} fail:^(NSInteger code, NSString * _Nullable msg) {
[[self getView] getRoomContributeRankListFailState:state];
}] roomUid:roomUid page:pageStr pageSize:pageSizeStr type:typeStr];
}
///
/// @param roomUid uid
/// @param type
/// @param page
/// @param pageSize
- (void)getRoomCharmRankList:(NSString *)roomUid type:(RankListType)type page:(int)page pageSize:(int)pageSize state:(int)state {
NSString * pageStr = [NSString stringWithFormat:@"%d", page];
NSString * pageSizeStr = [NSString stringWithFormat:@"%d", pageSize];
NSString * typeStr = type == RankListType_Day ? @"day" : @"week";
[Api roomCharmRank:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
NSArray * array = [RoomRankModel modelsWithArray:data.data[@"rankings"]];
[[self getView] getRoomContributeRankListSuccess:array state:state];
} fail:^(NSInteger code, NSString * _Nullable msg) {
[[self getView] getRoomCharmRankListFailState:state];
}] roomUid:roomUid page:pageStr pageSize:pageSizeStr type:typeStr];
}
@end

View File

@@ -0,0 +1,20 @@
//
// XPRoomRankHostDelegate.h
// xplan-ios
//
// Created by 冯硕 on 2021/12/15.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@protocol XPRoomRankHostDelegate <NSObject>
///获取房主的uid
- (NSString *)getRoomUid;
///点击了某个用户
- (void)didSelectUser:(NSString *)uid;
@end
NS_ASSUME_NONNULL_END

View File

@@ -11,6 +11,14 @@ NS_ASSUME_NONNULL_BEGIN
@protocol XPRoomRankProtocol <NSObject>
///获取房间贡献榜成功
- (void)getRoomContributeRankListSuccess:(NSArray *)list state:(int)state;
///获取房间贡献榜失败
- (void)getRoomContributeRankListFailState:(int)state;
///获取房间魅力榜成功
- (void)getRoomCharmRankListSuccess:(NSArray *)list state:(int)state;
///获取房间贡献榜失败
- (void)getRoomCharmRankListFailState:(int)state;
@end
NS_ASSUME_NONNULL_END

View File

@@ -8,7 +8,7 @@
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@class RoomRankModel;
@interface XPRoomRankEmptyTableViewCell : UITableViewCell
@end

View File

@@ -6,9 +6,68 @@
//
#import "XPRoomRankEmptyTableViewCell.h"
///Third
#import <Masonry/Masonry.h>
///Tool
#import "ThemeColor.h"
#import "UIImageConstant.h"
@interface XPRoomRankEmptyTableViewCell ()
@property (nonatomic,strong) UIImageView *emptyImageView;
@property (nonatomic,strong) UILabel *titleLabel;
@end
@implementation XPRoomRankEmptyTableViewCell
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self initSubViews];
[self initSubViewConstraints];
}
return self;
}
#pragma mark - Private Method
- (void)initSubViews {
self.selectionStyle = UITableViewCellSelectionStyleNone;
[self.contentView addSubview:self.emptyImageView];
[self.contentView addSubview:self.titleLabel];
}
- (void)initSubViewConstraints {
[self.emptyImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.mas_equalTo(self.contentView);
make.top.mas_equalTo(self.contentView).offset(150);
make.size.mas_equalTo(CGSizeMake(100, 100));
}];
[self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.emptyImageView.mas_bottom).offset(20);
make.left.right.mas_equalTo(self.contentView);
}];
}
#pragma mark - Getters And Setters
- (UIImageView *)emptyImageView {
if (!_emptyImageView) {
_emptyImageView = [[UIImageView alloc] init];
_emptyImageView.userInteractionEnabled = YES;
_emptyImageView.image = [UIImageConstant defalutEmptyPlaceholder];
_emptyImageView.layer.masksToBounds = YES;
_emptyImageView.contentMode = UIViewContentModeScaleAspectFit;
}
return _emptyImageView;
}
- (UILabel *)titleLabel {
if (!_titleLabel) {
_titleLabel = [[UILabel alloc] init];
_titleLabel.text = @"暂无数据";
_titleLabel.font = [UIFont systemFontOfSize:16];
_titleLabel.textAlignment = NSTextAlignmentCenter;
_titleLabel.textColor = [ThemeColor secondTextColor];
}
return _titleLabel;
}
@end

View File

@@ -8,9 +8,9 @@
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@class RoomRankModel;
@interface XPRoomRankTableViewCell : UITableViewCell
@property (nonatomic,strong) RoomRankModel *rankModel;
@end
NS_ASSUME_NONNULL_END

View File

@@ -10,11 +10,13 @@
#import <Masonry/Masonry.h>
///Tool
#import "ThemeColor+RoomRank.h"
#import "NetImageView.h"
#import "RoomRankModel.h"
@interface XPRoomRankTableViewCell ()
///
@property (nonatomic, strong) UILabel *rankLabel;
///
@property (nonatomic, strong) UIImageView *avatarImageView;
@property (nonatomic, strong) NetImageView *avatarImageView;
///
@property (nonatomic, strong) UIImageView *genderImageView;
///
@@ -41,6 +43,7 @@
#pragma mark - Private
- (void)setupSubView {
self.selectionStyle = UITableViewCellSelectionStyleNone;
[self.contentView addSubview:self.rankLabel];
[self.contentView addSubview:self.avatarImageView];
[self.contentView addSubview:self.nickNameLabel];
@@ -57,11 +60,16 @@
}];
[self.avatarImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.height.equalTo(@48);
make.width.height.equalTo(@50);
make.left.equalTo(self.rankLabel.mas_right).offset(10);
make.centerY.equalTo(self.contentView);
}];
[self.nickNameLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.mas_equalTo(self.avatarImageView.mas_right).offset(16);
make.bottom.mas_equalTo(self.avatarImageView.mas_centerY).offset(-1.5);
}];
[self.genderImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.mas_equalTo(self.nickNameLabel.mas_right).offset(3);
make.centerY.mas_equalTo(self.nickNameLabel);
@@ -69,7 +77,7 @@
}];
[self.idLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.nickNameLabel.mas_bottom).offset(8);
make.top.mas_equalTo(self.avatarImageView.mas_centerY).offset(1.5);
make.left.mas_equalTo(self.nickNameLabel);
make.right.mas_lessThanOrEqualTo(self.coinNumberLabel.mas_left).offset(-10);
}];
@@ -81,43 +89,35 @@
}
//- (void)setHalfhourData:(RankData *)rankModel {
// _halfhourData = rankModel;
//
// self.uidLabel.text = [NSString stringWithFormat:@"ID:%@", rankModel.erbanNo];
//
// self.farBeforeTipsLabel.hidden = NO;
// self.genderImageView.hidden = YES;
// [self.coinNumberLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
// make.centerY.mas_equalTo(self.nickNameLabel);
// make.right.mas_equalTo(-28);
// }];
// [self.contentView layoutIfNeeded];
//
// NSString *rankImage = [NSString stringWithFormat:@"%d", rankModel.seqNo];
// self.rankLabel.text = rankImage;
//// self.rankImageView.image = [UIImage imageNamed:rankImage];
//
// NSString *numStr = [NSString stringWithFormat:@"%@",_halfhourData.totalNum];
// if ([_halfhourData.totalNum doubleValue] > 10000) {
// CGFloat numF = [_halfhourData.totalNum doubleValue] / 10000.0;
// numStr = [NSString stringWithFormat:@"%.1f万",numF];
// numStr = [numStr stringByReplacingOccurrencesOfString:@".0" withString:@""];
// }
// self.coinNumberLabel.text = numStr;
//
// [self.avatarImageView qn_setImageImageWithUrl:rankModel.avatar placeholderImage:[XCTheme defaultTheme].default_background type:ImageTypeUserIcon];
// self.nickNameLabel.text = [rankModel.roomTitle cleanSpecialText];
//}
#pragma mark - Getters And Setters
- (UIImageView *)avatarImageView {
if (!_avatarImageView) {
_avatarImageView = [[UIImageView alloc] init];
_avatarImageView.layer.masksToBounds = YES;
_avatarImageView.layer.cornerRadius = 24;
- (void)setRankModel:(RoomRankModel *)rankModel {
_rankModel = rankModel;
self.idLabel.text = [NSString stringWithFormat:@"ID:%@", rankModel.erbanNo];
self.rankLabel.text = rankModel.ranking;
NSString *numStr = [NSString stringWithFormat:@"%@",rankModel.goldAmount];
if (rankModel.goldAmount.doubleValue > 10000) {
CGFloat numF = [rankModel.goldAmount doubleValue] / 10000.0;
numStr = [NSString stringWithFormat:@"%.1f万",numF];
numStr = [numStr stringByReplacingOccurrencesOfString:@".0" withString:@""];
}
return _avatarImageView;
self.genderImageView.image = rankModel.gender == GenderType_Female ? [UIImage imageNamed:@"common_female"] : [UIImage imageNamed:@"common_male"];
self.coinNumberLabel.text = numStr;
self.avatarImageView.imageUrl = rankModel.avatar;
self.nickNameLabel.text = rankModel.nick;
}
#pragma mark - Getters And Setters
- (NetImageView *)avatarImageView {
if (!_avatarImageView) {
_avatarImageView = [[NetImageView alloc] init];
_avatarImageView.layer.masksToBounds = YES;
_avatarImageView.layer.cornerRadius = 25;
_avatarImageView.image = [UIImageConstant defaultAvatarPlaceholder];
_avatarImageView.contentMode = UIViewContentModeScaleAspectFill;
}
return _avatarImageView;;
}
- (UILabel *)rankLabel {
if (!_rankLabel) {

View File

@@ -8,9 +8,15 @@
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@protocol XPRoomRankListHeaderViewDelegate <NSObject>
- (void)showUserCard:(NSString *)uid;
@end
@interface XPRoomRankListHeaderView : UIView
@property (nonatomic,copy) NSArray *rankList;
///代理
@property (nonatomic,weak) id<XPRoomRankListHeaderViewDelegate> delegate;
@end
NS_ASSUME_NONNULL_END

View File

@@ -6,9 +6,130 @@
//
#import "XPRoomRankListHeaderView.h"
///Third
#import <Masonry/Masonry.h>
///Tool
#import "XPMacro.h"
///Tool
#import "XPRoomRankUserInfoView.h"
///Model
#import "RoomRankModel.h"
@interface XPRoomRankListHeaderView ()<XPRoomRankUserInfoViewDelegate>
///
@property (nonatomic,strong) UIImageView *backImageView;
///
@property (nonatomic,strong) XPRoomRankUserInfoView *firstUserView;
///
@property (nonatomic,strong) XPRoomRankUserInfoView *secondUserView;
///
@property (nonatomic,strong) XPRoomRankUserInfoView *thirdUserView;
@property (nonatomic,copy) NSArray *viewArray;
@end
@implementation XPRoomRankListHeaderView
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self initSubViews];
[self initSubViewConstraints];
}
return self;
}
#pragma mark - XPRoomRankUserInfoViewDelegate
- (void)didTapUserInfo:(NSString *)uid {
if (self.delegate && [self.delegate respondsToSelector:@selector(showUserCard:)]) {
[self.delegate showUserCard:uid];
}
}
#pragma mark - Private Method
- (void)initSubViews {
[self addSubview:self.backImageView];
[self addSubview:self.firstUserView];
[self addSubview:self.secondUserView];
[self addSubview:self.thirdUserView];
self.viewArray = @[self.firstUserView, self.secondUserView, self.thirdUserView];
}
- (void)initSubViewConstraints {
CGFloat kscale = (CGFloat)KScreenWidth / (CGFloat)375;
self.frame = CGRectMake(0, 0, KScreenWidth, 200 * kscale);
[self.backImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.mas_equalTo(self);
}];
[self.firstUserView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self).offset(17 * kscale);
make.width.mas_equalTo(KScreenWidth / 3);
make.centerX.mas_equalTo(self);
}];
[self.secondUserView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self).offset(56 * kscale);
make.width.mas_equalTo(self.firstUserView);
make.left.mas_equalTo(self);
}];
[self.thirdUserView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self).offset(55 * kscale);
make.width.mas_equalTo(self.firstUserView);
make.right.mas_equalTo(self);
}];
}
#pragma mark - Getters And Setters
- (void)setRankList:(NSArray *)rankList {
for (int i = 0; i< rankList.count; i++) {
RoomRankModel * rankModel = [rankList objectAtIndex:i];
if (i < self.viewArray.count) {
XPRoomRankUserInfoView * view = [self.viewArray objectAtIndex:i];
view.rankModel = rankModel;
}
}
}
- (UIImageView *)backImageView {
if (!_backImageView) {
_backImageView = [[UIImageView alloc] init];
_backImageView.userInteractionEnabled = YES;
_backImageView.image = [UIImage imageNamed:@"room_rank_high_user_bg"];
}
return _backImageView;
}
- (XPRoomRankUserInfoView *)firstUserView {
if (!_firstUserView) {
_firstUserView = [[XPRoomRankUserInfoView alloc] init];
_firstUserView.type = RankUserInfoType_First;
_firstUserView.delegate = self;
}
return _firstUserView;
}
- (XPRoomRankUserInfoView *)secondUserView {
if (!_secondUserView) {
_secondUserView = [[XPRoomRankUserInfoView alloc] init];
_secondUserView.type = RankUserInfoType_Second;
_secondUserView.delegate = self;
}
return _secondUserView;
}
- (XPRoomRankUserInfoView *)thirdUserView {
if (!_thirdUserView) {
_thirdUserView = [[XPRoomRankUserInfoView alloc] init];
_thirdUserView.type = RankUserInfoType_Third;
_thirdUserView.delegate = self;
}
return _thirdUserView;
}
@end

View File

@@ -8,9 +8,25 @@
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
typedef NS_ENUM(NSInteger, RankUserInfoType) {
RankUserInfoType_First = 1,
RankUserInfoType_Second,
RankUserInfoType_Third,
};
@class RoomRankModel;
@protocol XPRoomRankUserInfoViewDelegate <NSObject>
- (void)didTapUserInfo:(NSString *)uid;
@end
@interface XPRoomRankUserInfoView : UIView
///类型
@property (nonatomic,assign) RankUserInfoType type;
///数据
@property (nonatomic,strong) RoomRankModel *rankModel;
///代理
@property (nonatomic,weak) id<XPRoomRankUserInfoViewDelegate> delegate;
@end
NS_ASSUME_NONNULL_END

View File

@@ -11,6 +11,8 @@
///Tool
#import "NetImageView.h"
#import "ThemeColor+RoomRank.h"
///Model
#import "RoomRankModel.h"
@interface XPRoomRankUserInfoView ()
///
@@ -42,6 +44,11 @@
return self;
}
- (void)layoutSubviews {
[super layoutSubviews];
self.avatarImageView.layer.cornerRadius = self.avatarImageView.bounds.size.width / 2;
}
#pragma mark - Private Method
- (void)initSubViews {
[self addSubview:self.avatarImageView];
@@ -52,13 +59,99 @@
[self.stackView addArrangedSubview:self.nickLabel];
[self.stackView addArrangedSubview:self.sexImageView];
UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(recognizer:)];
[self addGestureRecognizer:tap];
}
- (void)initSubViewConstraints {
[self mas_makeConstraints:^(MASConstraintMaker *make) {
make.bottom.mas_equalTo(self.coinLabel.mas_bottom);
}];
[self.crownImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.centerX.mas_equalTo(self);
make.width.mas_equalTo(87);
make.height.mas_equalTo(99);
}];
[self.avatarImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.mas_equalTo(self.crownImageView).inset(6);
make.bottom.mas_equalTo(self.crownImageView.mas_bottom).offset(-6);
make.height.mas_equalTo(self.avatarImageView.mas_width);
}];
[self.stackView mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.mas_equalTo(self);
make.top.mas_equalTo(self.crownImageView.mas_bottom).offset(4);
}];
[self.idLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.mas_equalTo(self);
make.top.mas_equalTo(self.stackView.mas_bottom).offset(1);
}];
[self.coinLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.idLabel.mas_bottom).offset(2);
make.left.right.mas_equalTo(self);
}];
}
#pragma mark - Event Response
- (void)recognizer:(UITapGestureRecognizer *)tap {
if (self.delegate && [self.delegate respondsToSelector:@selector(didTapUserInfo:)]) {
[self.delegate didTapUserInfo:self.rankModel.uid];
}
}
#pragma mark - Getters And Setters
- (void)setRankModel:(RoomRankModel *)rankModel {
_rankModel = rankModel;
self.idLabel.text = [NSString stringWithFormat:@"ID:%@", rankModel.erbanNo];
NSString *numStr = [NSString stringWithFormat:@"%@",rankModel.goldAmount];
if (rankModel.goldAmount.doubleValue > 10000) {
CGFloat numF = [rankModel.goldAmount doubleValue] / 10000.0;
numStr = [NSString stringWithFormat:@"%.1f万",numF];
numStr = [numStr stringByReplacingOccurrencesOfString:@".0" withString:@""];
}
self.sexImageView.hidden = NO;
self.sexImageView.image = rankModel.gender == GenderType_Female ? [UIImage imageNamed:@"common_female"] : [UIImage imageNamed:@"common_male"];
self.coinLabel.text = numStr;
self.avatarImageView.imageUrl = rankModel.avatar;
self.nickLabel.text = rankModel.nick;
}
- (void)setType:(RankUserInfoType)type {
NSString * crownName;
NSString * avatarPlace;
switch (type) {
case RankUserInfoType_First:
crownName = @"room_rank_crown_first";
avatarPlace = @"room_rank_avatar_first_place";
break;
case RankUserInfoType_Second:
crownName = @"room_rank_crown_second";
avatarPlace = @"room_rank_avatar_second_place";
break;
case RankUserInfoType_Third:
crownName = @"room_rank_crown_third";
avatarPlace = @"room_rank_avatar_third_place";
break;
default:
break;
}
if (crownName.length >0) {
self.crownImageView.image = [UIImage imageNamed:crownName];
}
if (avatarPlace.length > 0) {
self.avatarImageView.image = [UIImage imageNamed:avatarPlace];
}
self.sexImageView.hidden = YES;
}
- (UIImageView *)crownImageView {
if (!_crownImageView) {
_crownImageView = [[UIImageView alloc] init];
@@ -71,7 +164,6 @@
if (!_avatarImageView) {
_avatarImageView = [[NetImageView alloc] init];
_avatarImageView.layer.masksToBounds = YES;
_avatarImageView.layer.cornerRadius = 12;
_avatarImageView.image = [UIImageConstant defaultAvatarPlaceholder];
_avatarImageView.contentMode = UIViewContentModeScaleAspectFill;
}
@@ -94,6 +186,8 @@
_nickLabel = [[UILabel alloc] init];
_nickLabel.textAlignment = NSTextAlignmentCenter;
_nickLabel.font = [UIFont systemFontOfSize:14];
_nickLabel.text = @"虚位以待";
_nickLabel.textAlignment = NSTextAlignmentCenter;
_nickLabel.textColor = [ThemeColor mainTextColor];
}
return _nickLabel;

View File

@@ -7,20 +7,20 @@
#import "BaseViewController.h"
#import <JXCategoryView/JXCategoryListContainerView.h>
#import "XPRoomRankHostDelegate.h"
NS_ASSUME_NONNULL_BEGIN
typedef NS_ENUM(NSInteger, RoomDayRankType) {
///财富
RoomDayRankType_Wealth = 1,
typedef NS_ENUM(NSInteger, RoomRankType) {
///贡献
RoomRankType_Contribute = 1,
///魅力榜
RoomDayRankType_Charm,
RoomRankType_Charm,
};
@interface XPRoomDayRankViewController : BaseViewController<JXCategoryListContentViewDelegate>
///类型
@property (nonatomic,assign) RoomDayRankType dayType;
@property (nonatomic,assign) RoomRankType type;
- (instancetype)initWithDelegate:(id<XPRoomRankHostDelegate>)delegate;
@end
NS_ASSUME_NONNULL_END

View File

@@ -25,10 +25,19 @@
@property (nonatomic,strong) XPRoomRankListViewController *dayRankView;
///
@property (nonatomic,strong) XPRoomRankListViewController *weekRankView;
@property (nonatomic,weak) id<XPRoomRankHostDelegate> hostDelegate;
@end
@implementation XPRoomDayRankViewController
- (instancetype)initWithDelegate:(id<XPRoomRankHostDelegate>)delegate; {
if (self = [super init]) {
self.hostDelegate = delegate;
}
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
[self initSubViews];
@@ -52,6 +61,9 @@
return self.weekRankView;
}
- (void)categoryView:(JXCategoryBaseView *)categoryView didSelectedItemAtIndex:(NSInteger)index {
}
#pragma mark - Private Method
- (void)initSubViews {
self.view.backgroundColor = [UIColor clearColor];
@@ -114,16 +126,18 @@
- (XPRoomRankListViewController *)dayRankView {
if (!_dayRankView) {
_dayRankView = [[XPRoomRankListViewController alloc] init];
_dayRankView.type = RankListType_Day;
_dayRankView = [[XPRoomRankListViewController alloc] initWithDelegate:self.hostDelegate];
_dayRankView.type = self.type;
_dayRankView.listType = RankListType_Day;
}
return _dayRankView;
}
- (XPRoomRankListViewController *)weekRankView {
if (!_weekRankView) {
_weekRankView = [[XPRoomRankListViewController alloc] init];
_weekRankView.type = RankListType_Week;
_weekRankView = [[XPRoomRankListViewController alloc] initWithDelegate:self.hostDelegate];
_weekRankView.type = self.type;
_weekRankView.listType = RankListType_Week;
}
return _weekRankView;
}

View File

@@ -7,18 +7,17 @@
#import "MvpViewController.h"
#import <JXCategoryView/JXCategoryListContainerView.h>
#import "XPRoomRankPresenter.h"
#import "XPRoomDayRankViewController.h"
NS_ASSUME_NONNULL_BEGIN
typedef NS_ENUM(NSInteger, RankListType) {
RankListType_Day = 1,
RankListType_Week,
};
@interface XPRoomRankListViewController : MvpViewController<JXCategoryListContentViewDelegate>
///类型
@property (nonatomic,assign) RankListType type;
- (instancetype)initWithDelegate:(id<XPRoomRankHostDelegate>)delegate;
///日榜 周榜
@property (nonatomic,assign) RankListType listType;
///贡献榜 魅力榜
@property (nonatomic,assign) RoomRankType type;
@end
NS_ASSUME_NONNULL_END

View File

@@ -8,21 +8,49 @@
#import "XPRoomRankListViewController.h"
///Third
#import <Masonry/Masonry.h>
#import <MJRefresh/MJRefresh.h>
///Tool
#import "ThemeColor+RoomRank.h"
///Model
#import "RoomRankModel.h"
///View
#import "XPRoomRankTableViewCell.h"
#import "XPRoomRankEmptyTableViewCell.h"
#import "XPRoomRankListHeaderView.h"
///P
#import "XPRoomRankPresenter.h"
#import "XPRoomRankProtocol.h"
@interface XPRoomRankListViewController ()<UITableViewDataSource, UITableViewDelegate>
@interface XPRoomRankListViewController ()<UITableViewDataSource, UITableViewDelegate,XPRoomRankProtocol, XPRoomRankListHeaderViewDelegate>
///
@property (nonatomic,strong) UITableView *tableView;
///
@property (nonatomic,strong) NSMutableArray *datasource;
///
@property (nonatomic,strong) XPRoomRankListHeaderView *headerView;
///
@property (nonatomic,assign) int page;
@property (nonatomic,weak) id<XPRoomRankHostDelegate> hostDelegate;
///
@property (nonatomic,assign) BOOL hasNoMoreData;
@end
@implementation XPRoomRankListViewController
- (instancetype)initWithDelegate:(id<XPRoomRankHostDelegate>)delegate {
if (self = [super init]) {
self.hostDelegate = delegate;
}
return self;
}
- (XPRoomRankPresenter *)createPresenter {
return [[XPRoomRankPresenter alloc] init];
}
- (void)viewDidLoad {
[super viewDidLoad];
[self initHeaderAndFooterRrfresh];
[self initSubViews];
[self initSubViewConstraints];
}
@@ -31,6 +59,7 @@
- (void)initSubViews {
self.view.backgroundColor = [UIColor whiteColor];
[self.view addSubview:self.tableView];
self.tableView.tableHeaderView = self.headerView;
}
- (void)initSubViewConstraints {
@@ -39,6 +68,113 @@
}];
}
- (void)initHeaderAndFooterRrfresh {
MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(headerRefresh)];
header.stateLabel.font = [UIFont systemFontOfSize:10.0];
header.lastUpdatedTimeLabel.font = [UIFont systemFontOfSize:10.0];
header.stateLabel.textColor = [ThemeColor secondTextColor];
header.lastUpdatedTimeLabel.textColor = [ThemeColor secondTextColor];
self.tableView.mj_header = header;
MJRefreshBackNormalFooter *footer = [MJRefreshBackNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(footerRefresh)];
footer.stateLabel.textColor = [ThemeColor secondTextColor];
footer.stateLabel.font = [UIFont systemFontOfSize:10.0];
self.tableView.mj_footer = footer;
}
#pragma mark - fangfa
- (void)headerRefresh {
NSString * roomUid = self.hostDelegate.getRoomUid;
[self.tableView.mj_header beginRefreshing];
self.page = 1;
if (self.type == RoomRankType_Contribute) {
[self.presenter getRoomContributeRankList:roomUid type:self.listType page:self.page pageSize:20 state:0];
} else {
[self.presenter getRoomCharmRankList:roomUid type:self.listType page:self.page pageSize:20 state:0];
}
}
- (void)footerRefresh {
if (self.hasNoMoreData) {
[self showErrorToast:@"没有更多数据了"];
return;
}
self.page++;
NSString * roomUid = self.hostDelegate.getRoomUid;
if (self.type == RoomRankType_Contribute) {
[self.presenter getRoomContributeRankList:roomUid type:self.listType page:self.page pageSize:20 state:1];
} else {
[self.presenter getRoomCharmRankList:roomUid type:self.listType page:self.page pageSize:20 state:1];
}
}
#pragma mark - XPRoomRankProtocol
- (void)getRoomCharmRankListFailState:(int)state {
[self.tableView.mj_header endRefreshing];
[self.tableView.mj_footer endRefreshing];
}
- (void)getRoomCharmRankListSuccess:(NSArray *)list state:(int)state {
NSMutableArray * originArray;
if (state == 0) {
originArray = [NSMutableArray array];
[self.tableView.mj_header endRefreshing];
} else {
[self.tableView.mj_footer endRefreshing];
}
if (list.count > 0) {
self.hasNoMoreData = NO;
[self.datasource addObjectsFromArray:list];
} else {
self.hasNoMoreData = YES;
[self.tableView.mj_footer endRefreshingWithNoMoreData];
}
[self handleRoomRankList:originArray state:state];
}
- (void)getRoomContributeRankListFailState:(int)state {
[self.tableView.mj_header endRefreshing];
[self.tableView.mj_footer endRefreshing];
}
- (void)getRoomContributeRankListSuccess:(NSArray *)list state:(int)state {
NSMutableArray * originArray;
if (state == 0) {
originArray = [NSMutableArray array];
[self.tableView.mj_header endRefreshing];
} else {
[self.tableView.mj_footer endRefreshing];
}
if (list.count > 0) {
self.hasNoMoreData = NO;
[originArray addObjectsFromArray:list];
} else {
self.hasNoMoreData = YES;
[self.tableView.mj_footer endRefreshingWithNoMoreData];
}
[self handleRoomRankList:originArray state:state];
}
- (void)handleRoomRankList:(NSMutableArray *)array state:(int)state {
if (array.count <= 3) {
self.headerView.rankList = array;
} else {
if (state == 0) {
NSArray * headArray = [array subarrayWithRange:NSMakeRange(0, 3)];
self.headerView.rankList = headArray;
[array removeObjectsInArray:headArray];
self.datasource = array;
} else {
[self.datasource addObjectsFromArray:array];
}
}
[self.tableView reloadData];
}
#pragma mark - XPRoomRankListHeaderView
- (void)showUserCard:(NSString *)uid {
[self.hostDelegate didSelectUser:uid];
}
#pragma mark - JXCategoryListContentViewDelegate
- (UIView *)listView {
return self.view;
@@ -59,6 +195,7 @@
if (cell == nil) {
cell = [[XPRoomRankTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:NSStringFromClass([XPRoomRankTableViewCell class])];
}
cell.rankModel = [self.datasource objectAtIndex:indexPath.row];
return cell;
}
@@ -69,7 +206,20 @@
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView deselectRowAtIndexPath:indexPath animated:YES];
if (self.datasource.count > 0) {
RoomRankModel * model = [self.datasource objectAtIndex:indexPath.row];
[self.hostDelegate didSelectUser:model.uid];
}
}
#pragma mark - Getters And Setters
- (void)setListType:(RankListType)listType {
_listType = listType;
[self headerRefresh];
}
- (UITableView *)tableView {
if (!_tableView) {
_tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
@@ -86,6 +236,14 @@
return _tableView;
}
- (XPRoomRankListHeaderView *)headerView {
if (!_headerView) {
_headerView = [[XPRoomRankListHeaderView alloc] init];
_headerView.delegate = self;
}
return _headerView;
}
@end

View File

@@ -6,10 +6,11 @@
//
#import "BaseViewController.h"
#import "RoomHostDelegate.h"
NS_ASSUME_NONNULL_BEGIN
@interface XPRoomRankViewController : BaseViewController
///本来只需要一个roomUid的 但是列表中 需要点击用户 展示用户卡片 用户卡片需要的内容 需要hostDelegate 提供 要么传出去 要么传进来
- (instancetype)initWithRoomUid:(NSString *)roomUid delegate:(id<RoomHostDelegate>)delegate;;
@end

View File

@@ -13,9 +13,15 @@
///Tool
#import "ThemeColor+RoomRank.h"
#import "XPMacro.h"
///Model
#import "MicroQueueModel.h"
#import "UserInfoModel.h"
#import "MicroStateModel.h"
#import "RoomInfoModel.h"
///View
#import "XPRoomDayRankViewController.h"
@interface XPRoomRankViewController ()<JXCategoryViewDelegate, JXCategoryListContainerViewDelegate>
#import "XPUserCardViewController.h"
@interface XPRoomRankViewController ()<JXCategoryViewDelegate, JXCategoryListContainerViewDelegate, XPRoomRankHostDelegate>
///View
@property (nonatomic,strong) UIView * topView;
///
@@ -32,10 +38,24 @@
@property (nonatomic,strong) XPRoomDayRankViewController *wealthRankVC;
///
@property (nonatomic,strong) XPRoomDayRankViewController *charmRankVC;
///uid
@property (nonatomic,copy) NSString *roomUid;
///host
@property (nonatomic,weak) id<RoomHostDelegate>hostDelegate;
@end
@implementation XPRoomRankViewController
- (instancetype)initWithRoomUid:(NSString *)roomUid delegate:(id<RoomHostDelegate>)delegate; {
if (self = [super init]) {
self.roomUid = roomUid;
self.hostDelegate = delegate;
self.modalPresentationStyle = UIModalPresentationOverFullScreen;
}
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
[self initSubViews];
@@ -54,6 +74,36 @@
return self.charmRankVC;
}
#pragma mark - XPRoomRankHostDelegate
- (NSString *)getRoomUid {
return self.roomUid;
}
- (void)didSelectUser:(NSString *)uid {
if (uid.integerValue <=0) return;
[self dismissViewControllerAnimated:YES completion:nil];
RoomInfoModel * roomInfo = self.hostDelegate.getRoomInfo;
NSString * targetUid = uid;
XPUserCardInfoModel * model = [[XPUserCardInfoModel alloc] init];
[[self.hostDelegate.getMicroQueue allValues] enumerateObjectsUsingBlock:^(MicroQueueModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
if (uid.integerValue == obj.userInfo.uid) {
model.position = [NSString stringWithFormat:@"%d", obj.microState.position];
model.posState = (UserCardMicroPosStateType)obj.microState.posState;
model.micState = (UserCardMicroMicStateType)obj.microState.micState;
*stop = YES;
}
}];
model.uid = targetUid;
model.roomId = [NSString stringWithFormat:@"%ld", roomInfo.roomId];
model.leaveMode = roomInfo.leaveMode;
model.showGiftValue = roomInfo.showGiftValue;
model.avatar = roomInfo.avatar;
model.roomUid = [NSString stringWithFormat:@"%ld", roomInfo.uid];
model.nick = self.hostDelegate.getUserInfo.nick;
model.delegate = self.hostDelegate;
XPUserCardViewController * userCardVC = [[XPUserCardViewController alloc] initWithUser:model];
[self.hostDelegate.getCurrentNav presentViewController:userCardVC animated:YES completion:nil];
}
#pragma mark - Private Method
- (void)initSubViews {
self.view.backgroundColor = [UIColor clearColor];
@@ -73,7 +123,7 @@
[self.backView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.bottom.right.mas_equalTo(self.view);
make.height.mas_equalTo(500);
make.height.mas_equalTo(550);
}];
[self.titleView mas_makeConstraints:^(MASConstraintMaker *make) {
@@ -170,16 +220,16 @@
- (XPRoomDayRankViewController *)charmRankVC {
if (!_charmRankVC) {
_charmRankVC = [[XPRoomDayRankViewController alloc] init];
_charmRankVC.dayType = RoomDayRankType_Charm;
_charmRankVC = [[XPRoomDayRankViewController alloc] initWithDelegate:self];
_charmRankVC.type = RoomRankType_Charm;
}
return _charmRankVC;
}
- (XPRoomDayRankViewController *)wealthRankVC {
if (!_wealthRankVC) {
_wealthRankVC = [[XPRoomDayRankViewController alloc] init];
_wealthRankVC.dayType = RoomDayRankType_Wealth;
_wealthRankVC = [[XPRoomDayRankViewController alloc] initWithDelegate:self];
_wealthRankVC.type = RoomRankType_Contribute;
}
return _wealthRankVC;
}

View File

@@ -28,6 +28,7 @@
#import "RoomHeaderView.h"
#import "SocialStageView.h"
#import "XPRoomAnimationView.h"
#import "XPRoomFunctionContainerView.h"
///P
#import "XPRoomPresenter.h"
#import "XPRoomProtocol.h"
@@ -50,6 +51,8 @@
@property (nonatomic,strong) XPRoomActivityContainerView *activityContainerView;
///view
@property (nonatomic,strong) XPRoomAnimationView *animationView;
///view
@property (nonatomic,strong) XPRoomFunctionContainerView *functionView;
///Uid
@property (nonatomic,copy) NSString * roomUid;
///
@@ -108,6 +111,7 @@
[self.view addSubview:self.messageContainerView];
[self.view addSubview:self.menuContainerView];
[self.view addSubview:self.activityContainerView];
[self.view addSubview:self.functionView];
[self.view addSubview:self.animationView];
}
@@ -149,6 +153,10 @@
[self.animationView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.mas_equalTo(self.view);
}];
[self.functionView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.mas_equalTo(self.view);
}];
}
- (void)exitOldRoom {
@@ -384,4 +392,11 @@
return _animationView;
}
- (XPRoomFunctionContainerView *)functionView {
if (!_functionView) {
_functionView = [[XPRoomFunctionContainerView alloc] initWithdelegate:self];
}
return _functionView;
}
@end