完成房间 PK 面板基本 UI 结构
This commit is contained in:
eggmanQQQ
2024-06-14 21:04:26 +08:00
parent c735852d9b
commit 384bc3e95c
17 changed files with 926 additions and 29 deletions

View File

@@ -521,6 +521,7 @@
23FF42792AA6E19C0055733C /* HomeMenuSourceModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 23FF42782AA6E19C0055733C /* HomeMenuSourceModel.m */; };
23FF428E2AAB2D3A0055733C /* XPCandyTreeBuyView.m in Sources */ = {isa = PBXBuildFile; fileRef = 23FF428D2AAB2D3A0055733C /* XPCandyTreeBuyView.m */; };
545888332C1AFFB500897585 /* XPRoomPKPanelView.m in Sources */ = {isa = PBXBuildFile; fileRef = 545888322C1AFFB500897585 /* XPRoomPKPanelView.m */; };
545888362C1C306B00897585 /* XPRoomPKPaneAvatarView.m in Sources */ = {isa = PBXBuildFile; fileRef = 545888352C1C306B00897585 /* XPRoomPKPaneAvatarView.m */; };
73FFADDC93E195344047A2EC /* Pods_YuMi.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CACF623970097D653132D69A /* Pods_YuMi.framework */; };
9B0086C627BA392B0032BD2B /* AnchorStageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B0086C527BA392B0032BD2B /* AnchorStageView.m */; };
9B0086CA27BA4F570032BD2B /* AnchorMicroView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B0086C927BA4F570032BD2B /* AnchorMicroView.m */; };
@@ -2562,6 +2563,8 @@
23FF428D2AAB2D3A0055733C /* XPCandyTreeBuyView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPCandyTreeBuyView.m; sourceTree = "<group>"; };
545888312C1AFFB500897585 /* XPRoomPKPanelView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPRoomPKPanelView.h; sourceTree = "<group>"; };
545888322C1AFFB500897585 /* XPRoomPKPanelView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPRoomPKPanelView.m; sourceTree = "<group>"; };
545888342C1C306B00897585 /* XPRoomPKPaneAvatarView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPRoomPKPaneAvatarView.h; sourceTree = "<group>"; };
545888352C1C306B00897585 /* XPRoomPKPaneAvatarView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPRoomPKPaneAvatarView.m; sourceTree = "<group>"; };
7DB00EC07F1D0ADFF900B38D /* Pods-YuMi.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-YuMi.debug.xcconfig"; path = "Target Support Files/Pods-YuMi/Pods-YuMi.debug.xcconfig"; sourceTree = "<group>"; };
9B0086C427BA392B0032BD2B /* AnchorStageView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AnchorStageView.h; sourceTree = "<group>"; };
9B0086C527BA392B0032BD2B /* AnchorStageView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AnchorStageView.m; sourceTree = "<group>"; };
@@ -7165,6 +7168,8 @@
E81AF32727F1EE69003B9E43 /* XPRoomPKPanelUserView.m */,
E84843B027F5A0740050D365 /* XPRomPKResultTitleLabel.h */,
E84843B127F5A0740050D365 /* XPRomPKResultTitleLabel.m */,
545888342C1C306B00897585 /* XPRoomPKPaneAvatarView.h */,
545888352C1C306B00897585 /* XPRoomPKPaneAvatarView.m */,
);
path = SubViews;
sourceTree = "<group>";
@@ -12563,6 +12568,7 @@
1427218829A75F6F00C7C423 /* HTTPErrorResponse.m in Sources */,
E85E7B032A4EB0D200B6D00A /* XPGuildIncomePresenter.m in Sources */,
E8A30BF928534E48003B4873 /* XPSessionFindNewEmptyTableViewCell.m in Sources */,
545888362C1C306B00897585 /* XPRoomPKPaneAvatarView.m in Sources */,
E896EFB22771C93B00AD2CC1 /* XPMineFriendNumberView.m in Sources */,
14EB640D29A5C16000A4A00B /* XPMomentsSimpleDetailNav.m in Sources */,
E80EC80E28ACD84000D133C5 /* QKeyboardBaseManager.m in Sources */,

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 964 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -5,7 +5,7 @@
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleDisplayName</key>
<string>MoliStar</string>
<string>MoliStar Debug</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>

View File

@@ -99,6 +99,8 @@
#import "XPLittleGameRoomListView.h"
#import "MSRoomOnLineView.h"
#import "XPRoomPKPanelView.h"
@interface XPRoomFunctionContainerView ()<XPAcrossRoomPKPanelViewDelegate, XPAnchorPkPanelViewDelegate, XPRoomBackMusicPlayerViewDelegate, XPRoomNewUserGreetViewDelegate, XPWishGiftViewControllerDelegate,XPRoomLittleGameListViewDelegate>
///host
@property (nonatomic,weak) id<RoomHostDelegate>delegate;
@@ -159,6 +161,8 @@
///线
@property(nonatomic,strong) MSRoomOnLineView *onlineView;
@property(nonatomic, strong) XPRoomPKPanelView *pkPanelView;
@end
@implementation XPRoomFunctionContainerView
@@ -437,10 +441,30 @@
}
#pragma mark - PK
// MARL: -----
- (void)showPKPanel_ {
if (NO == [TTPopup hasShowPopup]) {
[TTPopup popupView:self.pkPanelView style:TTPopupStyleAlert];
}
}
- (void)updateIsRoomManagerState {
self.pkPanelView.isManager = self.roompkPanelView.isManager;
}
- (void)removePKPanel_ {
if (_pkPanelView) {
[self.pkPanelView removeFromSuperview];
self.pkPanelView = nil;
}
}
// MARL: -----
- (void)configRoomPKPanelView:(BOOL)isEnter {
RoomInfoModel * roomInfo = self.delegate.getRoomInfo;
if (roomInfo.roomModeType == RoomModeType_Open_PK_Mode) {
[self showPKPanel_];
self.roompkPanelView.roomInfo = roomInfo;
self.pkPanelView.roomInfo = roomInfo;
if (!self.roompkPanelView.superview) {
[self addSubview:self.roompkPanelView];
[self.roompkPanelView mas_makeConstraints:^(MASConstraintMaker *make) {
@@ -461,10 +485,12 @@
}else {
self.roompkPanelView.isManager = NO;
}
if (isEnter) {
[self.roompkPanelView enterRoomGetRoomPKDetailInfo];
[self.pkPanelView enterRoomGetRoomPKDetailInfo];
}
[self updateIsRoomManagerState];
}
}];
} else {
@@ -991,6 +1017,7 @@
break;
}
[self updateIsRoomManagerState];
}
- (void)onMicroQueueUpdate:(NSMutableDictionary<NSString *,MicroQueueModel *> *)queue {
@@ -998,6 +1025,7 @@
[self.littleGameMiniView needRefreshPosition:queue];
} else if(self.delegate.getRoomInfo.roomModeType == RoomModeType_Open_PK_Mode) {
self.roompkPanelView.micQueue = queue;
self.pkPanelView.micQueue = queue;
}else {
MicroQueueModel * currentUserModel;
NSString * uid = [AccountInfoStorage instance].getUid;
@@ -1894,6 +1922,13 @@
return _musicPlayView;
}
- (XPRoomPKPanelView *)pkPanelView {
if (!_pkPanelView) {
_pkPanelView = [[XPRoomPKPanelView alloc] initWithFrame:CGRectMake(0, 0, 309, 379)];
}
return _pkPanelView;
}
- (XPRoomPKProgressView *)roompkPanelView {
if (!_roompkPanelView) {
_roompkPanelView = [[XPRoomPKProgressView alloc] init];

View File

@@ -270,17 +270,13 @@
case RoomMoreMenuType_Room_Across_PK_Open:{
if (roomInfo.roomModeType == RoomModeType_Open_Blind) {
[self showErrorToast:YMLocalizedString(@"XPRoomMoreMenuViewController13")];
return;
}
if (roomInfo.roomModeType == RoomModeType_Open_PK_Mode) {
} else if (roomInfo.roomModeType == RoomModeType_Open_PK_Mode) {
[self showErrorToast:YMLocalizedString(@"XPRoomMoreMenuViewController14")];
return;
} else {
[StatisticsServiceHelper trackEventWithKey:StatisticsServiceEventroom_more_tool_click eventAttributes:@{@"roomMoreMenuType" : @"openAcrossPk"}];
XPAcrossRoomPKViewController *acrossRoomPKVC = [[XPAcrossRoomPKViewController alloc] initWithRoomUid:[NSString stringWithFormat:@"%ld", roomInfo.uid]];
[self.hostDelegate.getCurrentNav presentViewController:acrossRoomPKVC animated:YES completion:nil];
}
[StatisticsServiceHelper trackEventWithKey:StatisticsServiceEventroom_more_tool_click eventAttributes:@{@"roomMoreMenuType" : @"openAcrossPk"}];
XPAcrossRoomPKViewController *acrossRoomPKVC = [[XPAcrossRoomPKViewController alloc] initWithRoomUid:[NSString stringWithFormat:@"%ld", roomInfo.uid]];
[self.hostDelegate.getCurrentNav presentViewController:acrossRoomPKVC animated:YES completion:nil];
}
break;
default:
@@ -329,15 +325,13 @@
-(void)ms_didSelectItemAtIndexPath:(id)model {
self.gameView.hidden = YES;
if ([model isKindOfClass:[XPRoomMoreItemModel class]]) {
// TODO: PK
[self handleMoreItem:(XPRoomMoreItemModel *)model];
} else if ([model isKindOfClass:[ActivityInfoModel class]]) {
[self handleActivityInfo:(ActivityInfoModel *)model];
}
[self dismissViewControllerAnimated:YES completion:nil];
[self dismissViewControllerAnimated:YES completion:^{
if ([model isKindOfClass:[XPRoomMoreItemModel class]]) {
[self handleMoreItem:(XPRoomMoreItemModel *)model];
} else if ([model isKindOfClass:[ActivityInfoModel class]]) {
[self handleActivityInfo:(ActivityInfoModel *)model];
}
}];
}
-(void)clickGameVC:(ActivityInfoModel *)model{
if ([self.hostDelegate isKindOfClass:[XPRoomViewController class]]){

View File

@@ -0,0 +1,29 @@
//
// XPRoomPKPaneAvatarView.h
// YuMi
//
// Created by P on 2024/6/14.
//
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
typedef NS_ENUM(NSInteger,XPRoomPKPaneAvatarType) {
XPRoomPKPaneAvatarType_Red = 1,
XPRoomPKPaneAvatarType_Blue,
XPRoomPKPaneAvatarType_Leader_Red,
XPRoomPKPaneAvatarType_Leader_Blue,
// XPRoomPKPaneAvatarType_Red_Default,
// XPRoomPKPaneAvatarType_Blue_Default,
// XPRoomPKPaneAvatarType_Leader_Red_Default,
// XPRoomPKPaneAvatarType_Leader_Blue_Default,
};
@interface XPRoomPKPaneAvatarView : UIView
@property (nonatomic,assign) XPRoomPKPaneAvatarType type;
@property (nonatomic, copy) void (^didTapAvatar)(XPRoomPKPaneAvatarType type);
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,100 @@
//
// XPRoomPKPaneAvatarView.m
// YuMi
//
// Created by P on 2024/6/14.
//
#import "XPRoomPKPaneAvatarView.h"
@interface XPRoomPKPaneAvatarView()
@property (nonatomic, strong) UIImageView *avatarBackgroundImageView;
@property (nonatomic, strong) NetImageView *avatarImageView;
@end
@implementation XPRoomPKPaneAvatarView
- (instancetype)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
self.clipsToBounds = NO;
[self setupUI];
}
return self;
}
- (void)setupUI {
[self addSubview:self.avatarBackgroundImageView];
[self.avatarBackgroundImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.mas_equalTo(self);
}];
[self addSubview:self.avatarImageView];
[self.avatarImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.center.mas_equalTo(self.avatarBackgroundImageView);
make.width.equalTo(self.avatarBackgroundImageView.mas_width).offset(-4);
make.height.equalTo(self.avatarBackgroundImageView.mas_height).offset(-4);
}];
}
- (void)setupGesture {
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(handleTapGesture)];
[self addGestureRecognizer:tap];
}
- (void)handleTapGesture {
if (_didTapAvatar) {
_didTapAvatar(self.type);
}
}
- (void)setType:(XPRoomPKPaneAvatarType)type {
_type = type;
switch (type) {
case XPRoomPKPaneAvatarType_Red:
self.avatarBackgroundImageView.image = [UIImage imageNamed:@"room_pk_avatar_bg_red"];
self.avatarImageView.hidden = YES;
self.avatarImageView.layer.cornerRadius = 15;
break;
case XPRoomPKPaneAvatarType_Blue:
self.avatarBackgroundImageView.image = [UIImage imageNamed:@"room_pk_avatar_bg_blue"];
self.avatarImageView.hidden = YES;
self.avatarImageView.layer.cornerRadius = 15;
break;
case XPRoomPKPaneAvatarType_Leader_Red:
self.avatarBackgroundImageView.image = [UIImage imageNamed:@"room_pk_avatar_bg_red"];
self.avatarImageView.layer.cornerRadius = 31;
break;
case XPRoomPKPaneAvatarType_Leader_Blue:
self.avatarBackgroundImageView.image = [UIImage imageNamed:@"room_pk_avatar_bg_blue"];
self.avatarImageView.layer.cornerRadius = 31;
break;
default:
break;
}
}
#pragma mark -
- (UIImageView *)avatarBackgroundImageView {
if (!_avatarBackgroundImageView) {
_avatarBackgroundImageView = [[UIImageView alloc] init];
_avatarBackgroundImageView.contentMode = UIViewContentModeScaleAspectFit;
_avatarBackgroundImageView.clipsToBounds = NO;
}
return _avatarBackgroundImageView;
}
- (NetImageView *)avatarImageView {
if (!_avatarImageView) {
NetImageConfig * config = [[NetImageConfig alloc]init];
config.imageType = ImageTypeUserIcon;
config.placeHolder = [UIImageConstant defaultAvatarPlaceholder];
_avatarImageView = [[NetImageView alloc] initWithConfig:config];
_avatarImageView.layer.masksToBounds = YES;
}
return _avatarImageView;
}
@end

View File

@@ -7,10 +7,24 @@
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
NS_ASSUME_NONNULL_BEGIN
@class MicroQueueModel, AttachmentModel, RoomInfoModel, RoomPKChooseUserModel;
@interface XPRoomPKPanelView : UIView
@property (nonatomic, strong) NSMutableDictionary<NSString *, MicroQueueModel *> *micQueue;
///房间信息
@property (nonatomic, strong) RoomInfoModel *roomInfo;
///是否是管理员
@property (nonatomic, assign) BOOL isManager;
///红色的
@property (nonatomic,strong, readonly) NSArray<RoomPKChooseUserModel *> *redChooseArray;
///蓝色的
@property (nonatomic,strong, readonly) NSArray<RoomPKChooseUserModel *> *blueChooseArray;
- (void)enterRoomGetRoomPKDetailInfo;
@end
NS_ASSUME_NONNULL_END

View File

@@ -6,15 +6,668 @@
//
#import "XPRoomPKPanelView.h"
#import "XPRoomPKPaneAvatarView.h"
@implementation XPRoomPKPanelView
#import "Api+RoomPK.h"
#import "UserInfoModel.h"
#import "MicroQueueModel.h"
#import "RoomInfoModel.h"
#import "RoomPKDetailInfoModel.h"
#import "RoomPKChooseUserModel.h"
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
// Drawing code
}
*/
#import "XPRoomPKSelectUserView.h"
@interface XPRoomPKPanelView() <XPRoomPKSelectUserViewDelegate>
///pk
@property (nonatomic,strong) RoomPKInfoModel *pkInfo;
///
@property (nonatomic,assign) BOOL isPlaying;
///
@property (nonatomic,assign) long redTeamScore;
///
@property (nonatomic,assign) long blueTeamScore;
///
@property (nonatomic,strong) NSArray<RoomPKChooseUserModel *> *redChooseArray;
///
@property (nonatomic,strong) NSArray<RoomPKChooseUserModel *> *blueChooseArray;
@property (nonatomic, strong) UIImageView *backgroundImageView;
@property (nonatomic, strong) UIImageView *topImageView;
@property (nonatomic, strong) UIButton *minionButton;
@property (nonatomic, strong) XPRoomPKPaneAvatarView *leaderRed;
@property (nonatomic, strong) XPRoomPKPaneAvatarView *leaderBlue;
@property (nonatomic, strong) XPRoomPKPaneAvatarView *memberRed_1;
@property (nonatomic, strong) XPRoomPKPaneAvatarView *memberRed_2;
@property (nonatomic, strong) XPRoomPKPaneAvatarView *memberRed_3;
@property (nonatomic, strong) XPRoomPKPaneAvatarView *memberBlue_1;
@property (nonatomic, strong) XPRoomPKPaneAvatarView *memberBlue_2;
@property (nonatomic, strong) XPRoomPKPaneAvatarView *memberBlue_3;
@property (nonatomic, strong) UIStackView *redTeamStackView;
@property (nonatomic, strong) UIStackView *blueTeamStackView;
@property (nonatomic, strong) UILabel *countDownLabel;
@property (nonatomic, strong) UIButton *actionButton;
///
@property (nonatomic, strong) UIImageView *redCountImageView;
///
@property (nonatomic, strong) UILabel *redCountLabel;
///
@property (nonatomic, strong) UIImageView *blueCountImageView;
///
@property (nonatomic, strong) UILabel *blueCountLabel;
@property (nonatomic, strong) UIImageView *fireImageView;
@end
@implementation XPRoomPKPanelView
- (instancetype)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
self.backgroundColor = [UIColor colorWithWhite:1 alpha:0.6];
[self setupUI];
}
return self;
}
- (void)setupUI {
[self addSubview:self.backgroundImageView];
[self.backgroundImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.mas_equalTo(self);
}];
[self addSubview:self.topImageView];
[self.topImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.mas_equalTo(self);
make.centerY.mas_equalTo(self.mas_top);
make.size.mas_equalTo(CGSizeMake(375, 120));
}];
[self setupCenterVSMark];
[self addSubview:self.minionButton];
[self.minionButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self).offset(12);
make.right.mas_equalTo(self).offset(-12);
make.size.mas_equalTo(CGSizeMake(30, 30));
}];
[self addSubview:self.leaderRed];
[self.leaderRed mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.topImageView.mas_bottom).offset(21);
make.left.mas_equalTo(self).offset(12.5);
make.size.mas_equalTo(CGSizeMake(68, 68));
}];
[self addSubview:self.leaderBlue];
[self.leaderBlue mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.topImageView.mas_bottom).offset(21);
make.right.mas_equalTo(self).offset(-12.5);
make.size.mas_equalTo(CGSizeMake(68, 68));
}];
[self addSubview:self.redTeamStackView];
[self.redTeamStackView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.mas_equalTo(self).offset(4);
make.top.mas_equalTo(self.leaderRed.mas_bottom).offset(36);
make.size.mas_equalTo(CGSizeMake(110, 36));
}];
[self.redTeamStackView addArrangedSubview:self.memberRed_1];
[self.redTeamStackView addArrangedSubview:self.memberRed_2];
[self.redTeamStackView addArrangedSubview:self.memberRed_3];
[self addSubview:self.blueTeamStackView];
[self.blueTeamStackView mas_makeConstraints:^(MASConstraintMaker *make) {
make.right.mas_equalTo(self).offset(-4);
make.top.mas_equalTo(self.leaderRed.mas_bottom).offset(36);
make.size.mas_equalTo(CGSizeMake(110, 36));
}];
[self.blueTeamStackView addArrangedSubview:self.memberBlue_1];
[self.blueTeamStackView addArrangedSubview:self.memberBlue_2];
[self.blueTeamStackView addArrangedSubview:self.memberBlue_3];
[self setupCountDownView];
[self setupProgressArea];
[self addSubview:self.actionButton];
[self.actionButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.mas_equalTo(self);
make.bottom.mas_equalTo(self).offset(-26.5);
make.size.mas_equalTo(CGSizeMake(144, 32.5));
}];
}
- (void)setupCallBack {
self.leaderRed.didTapAvatar = ^(XPRoomPKPaneAvatarType type) {
};
self.leaderBlue.didTapAvatar = ^(XPRoomPKPaneAvatarType type) {
};
}
- (void)handleTapAvatar {
}
#pragma mark -
- (void)enterRoomGetRoomPKDetailInfo {
NSString * roomUid = [NSString stringWithFormat:@"%ld", self.roomInfo.uid];
@kWeakify(self);
[Api getRoomPKDetail:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) {
@kStrongify(self);
if (code == 200) {
RoomPKDetailInfoModel * pkDetailInfo = [RoomPKDetailInfoModel modelWithDictionary:data.data];
self.pkInfo = pkDetailInfo.roomPK;
[self handleRoomPKInfoChangeState];
if (self.pkInfo.pkStatus == RoomPKStatusType_Playing) {
[self updateCountDown];
}
///
NSMutableArray * redArray = [NSMutableArray array];
NSMutableArray * blueArray = [NSMutableArray array];
if (self.pkInfo.pkStatus == RoomPKStatusType_Playing) {
for (int i = 0; i < self.pkInfo.teams.count; i++) {
RoomPKTeamModel * teamInfo = [self.pkInfo.teams safeObjectAtIndex1:i];
if (teamInfo.team == GroupType_Red) {
self.redTeamScore = teamInfo.score;
for (int i = 0; i < teamInfo.teamMembers.count; i++) {
RoomPKTeamUserModel * teamUserModel = [teamInfo.teamMembers safeObjectAtIndex1:i];
RoomPKChooseUserModel * redInfo = [[RoomPKChooseUserModel alloc] init];
redInfo.avatar = teamUserModel.avatar;
redInfo.uid = teamUserModel.uid;
redInfo.groupType = GroupType_Red;
redInfo.position = [self findMicroInfoByUid:teamUserModel.uid].microState.position;
redInfo.nick = teamUserModel.nick;
[redArray addObject:redInfo];
}
} else if(teamInfo.team == GroupType_Blue) {
self.blueTeamScore = teamInfo.score;
for (int i = 0; i < teamInfo.teamMembers.count; i++) {
RoomPKTeamUserModel * teamUserModel = [teamInfo.teamMembers safeObjectAtIndex1:i];
RoomPKChooseUserModel * blueInfo = [[RoomPKChooseUserModel alloc] init];
blueInfo.avatar = teamUserModel.avatar;
blueInfo.uid = teamUserModel.uid;
blueInfo.groupType = GroupType_Blue;
blueInfo.position = [self findMicroInfoByUid:teamUserModel.uid].microState.position;
blueInfo.nick = teamUserModel.nick;
[blueArray addObject:blueInfo];
}
}
}
[self configRedTeamScore:self.redTeamScore blueTeamScore:self.blueTeamScore];
} else {
NSMutableDictionary * queue = self.micQueue;
for (int i = 0 ; i < queue.allValues.count; i++) {
MicroQueueModel * micModel = [queue.allValues safeObjectAtIndex1:i];
if (micModel.userInfo && micModel.userInfo.uid > 0) {
UserInfoModel * userInfo = micModel.userInfo;
if (userInfo.groupType == GroupType_Red) {
RoomPKChooseUserModel * redInfo = [[RoomPKChooseUserModel alloc] init];
redInfo.avatar = userInfo.avatar;
redInfo.uid = [NSString stringWithFormat:@"%ld", userInfo.uid];
redInfo.groupType = userInfo.groupType;
redInfo.position = micModel.microState.position;
redInfo.nick = userInfo.nick;
[redArray addObject:redInfo];
} else if(userInfo.groupType == GroupType_Blue) {
RoomPKChooseUserModel * blueInfo = [[RoomPKChooseUserModel alloc] init];
blueInfo.avatar = userInfo.avatar;
blueInfo.uid = [NSString stringWithFormat:@"%ld", userInfo.uid];
blueInfo.groupType = userInfo.groupType;
blueInfo.position = micModel.microState.position;
blueInfo.nick = userInfo.nick;
[blueArray addObject:blueInfo];
}
}
}
}
self.redChooseArray = redArray.copy;
self.blueChooseArray = blueArray.copy;
} else {
[XNDJTDDLoadingTool showErrorWithMessage:msg];
}
} roomUid:roomUid];
}
- (void)handleRoomPKInfoChangeState {
self.isPlaying = NO;
if (self.pkInfo) {
switch (self.pkInfo.pkStatus) {
case RoomPKStatusType_End:
// [self handleBeginButtonState];
break;
case RoomPKStatusType_Playing: {
[TTPopup dismiss];
// [self handleBeginButtonState];
self.isPlaying = YES;
// self.roomPKPlayingView.pkDetailInfo = self.roomPKInfo;
// self.roomPKPlayingView.redChooseArray = self.redChooseArray;
// self.roomPKPlayingView.blueChooseArray = self.blueChooseArray;
// [self.roomPKPlayingView configRedTeamScore:self.redTeamScore blueTeamScore:self.blueTeamScore];
// [TTPopup popupView:self.roomPKPlayingView style:TTPopupStyleAlert];
}
break;
case RoomPKStatusType_ReStart:
case RoomPKStatusType_NonStart: {
// [self handleBeginButtonState];
// [self clearRoomPKTeamData];
// [self stopRoomPKCountDown];
}
break;
default:
break;
}
}
}
- (void)updateCountDown {
// [self startRoomPKCountDown:(self.roomPKInfo.endTime - pkDetailInfo.now) / 1000];
}
- (void)startRoomPKCountDown:(CGFloat)time {
__block long tempTime = time; //
__weak typeof(self) weakSelf = self;
// self.currentTime = tempTime;
// if (self.timer != nil) {
// dispatch_source_cancel(self.timer);
// }
// dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
// self.timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
// dispatch_source_set_timer(self.timer,dispatch_walltime(NULL, 0),1.0*NSEC_PER_SEC, 0); //
// dispatch_source_set_event_handler(self.timer, ^{
// typeof(weakSelf) self = weakSelf;
// if(tempTime <= 0){ //
// self.currentTime = 0;
// dispatch_source_cancel(self.timer);
// dispatch_async(dispatch_get_main_queue(), ^{
// [self checkRoomPKResult];
// });
// } else {
// dispatch_async(dispatch_get_main_queue(), ^{
// //
// NSInteger minute = tempTime / 60;
// NSInteger second = (tempTime % 60);
// NSString *timeStr = [NSString stringWithFormat:@"%02zd:%02zd", minute, second];
// self.timeLabel.text= timeStr;
// self.roomPKPlayingView.currentTime = timeStr;
// });
// tempTime--;
// self.currentTime = tempTime;
// }
// });
// dispatch_resume(self.timer);
}
- (MicroQueueModel *)findMicroInfoByUid:(NSString *)uid {
for (MicroQueueModel *model in self.micQueue.allValues) {
if (model.userInfo && model.userInfo.uid == uid.intValue) {
return model;
}
}
return nil;
}
- (void)configRedTeamScore:(long)redTeamScore
blueTeamScore:(long)blueTeamScore {
self.redTeamScore = redTeamScore;
self.blueTeamScore = blueTeamScore;
// self.redScoreLabel.text = [NSString stringWithFormat:@"%ld", redTeamScore];
// self.blueScoreLabel.text = [NSString stringWithFormat:@"%ld", blueTeamScore];
if (redTeamScore > 0 || blueTeamScore > 0) {
CGFloat redScale = (CGFloat)redTeamScore / (CGFloat)(redTeamScore + blueTeamScore);
if (redScale == 1) {
redScale = 0.99;
}
// [self.redProgressView mas_updateConstraints:^(MASConstraintMaker *make) {
// make.width.mas_equalTo(85 * 2 * redScale);
// }];
}
// [self.roomPKPlayingView configRedTeamScore:redTeamScore blueTeamScore:blueTeamScore];
}
#pragma mark -
- (void)showSelectUserPanelWith:(GroupType)type {
XPRoomPKSelectUserView * chooseUserView = [[XPRoomPKSelectUserView alloc] init];
chooseUserView.delegate = self;
chooseUserView.redUserArray = self.redChooseArray;
chooseUserView.blueUserArray = self.blueChooseArray;
chooseUserView.groupType = type;
chooseUserView.microQueueArray = self.micQueue.allValues;
[TTPopup popupView:chooseUserView style:TTPopupStyleAlert];
}
#pragma mark -
- (void)setIsManager:(BOOL)isManager {
_isManager = isManager;
self.frame = [self roomFrame];
self.backgroundImageView.image = [self backgroundImage];
}
- (void)setMicQueue:(NSMutableDictionary<NSString *,MicroQueueModel *> *)micQueue {
}
#pragma mark -
- (void)didTapMinion {
// TODO:
}
- (void)didTapActionButton {
}
#pragma mark -
- (CGRect)roomFrame {
return CGRectMake(0, 0, 309, self.isManager ? 379 : 324);
}
- (UIImage *)backgroundImage {
return self.isManager ? [UIImage imageNamed:@"room_pk_panel_bg_manager"] : [UIImage imageNamed:@"room_pk_panel_bg_normal"];
}
- (UIImageView *)backgroundImageView {
if (!_backgroundImageView) {
_backgroundImageView = [[UIImageView alloc] init];
_backgroundImageView.contentMode = UIViewContentModeScaleAspectFill;
}
return _backgroundImageView;
}
- (void)setupCenterVSMark {
UIImageView *vs = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"pk_vs_mark_big"]];
[self addSubview:vs];
[vs mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.mas_equalTo(self);
make.top.mas_equalTo(self.topImageView.mas_bottom).offset(32.5);
make.size.mas_equalTo(CGSizeMake(112.5, 60.5));
}];
}
- (UIImageView *)topImageView {
if (!_topImageView) {
_topImageView = [[UIImageView alloc] init];
_topImageView.image = [UIImage imageNamed:@"room_pk_panel_top"];
_topImageView.contentMode = UIViewContentModeScaleAspectFit;
}
return _topImageView;
}
- (UIButton *)minionButton {
if (!_minionButton) {
_minionButton = [UIButton buttonWithType:UIButtonTypeCustom];
[_minionButton setBackgroundImage:[UIImage imageNamed:@"room_pk_panel_be_mini_icon"]
forState:UIControlStateNormal];
[_minionButton addTarget:self
action:@selector(didTapMinion)
forControlEvents:UIControlEventTouchUpInside];
}
return _minionButton;
}
- (XPRoomPKPaneAvatarView *)leaderRed {
if (!_leaderRed) {
_leaderRed = [[XPRoomPKPaneAvatarView alloc] initWithFrame:CGRectMake(0, 0, 112.5, 60.5)];
_leaderRed.type = XPRoomPKPaneAvatarType_Leader_Red;
}
return _leaderRed;
}
- (XPRoomPKPaneAvatarView *)memberRed_1 {
if (!_memberRed_1) {
_memberRed_1 = [[XPRoomPKPaneAvatarView alloc] initWithFrame:CGRectMake(0, 0, 35, 35)];
_memberRed_1.type = XPRoomPKPaneAvatarType_Red;
}
return _memberRed_1;
}
- (XPRoomPKPaneAvatarView *)memberRed_2 {
if (!_memberRed_2) {
_memberRed_2 = [[XPRoomPKPaneAvatarView alloc] initWithFrame:CGRectMake(0, 0, 35, 35)];
_memberRed_2.type = XPRoomPKPaneAvatarType_Red;
}
return _memberRed_2;
}
- (XPRoomPKPaneAvatarView *)memberRed_3 {
if (!_memberRed_3) {
_memberRed_3 = [[XPRoomPKPaneAvatarView alloc] initWithFrame:CGRectMake(0, 0, 35, 35)];
_memberRed_3.type = XPRoomPKPaneAvatarType_Red;
}
return _memberRed_3;
}
- (XPRoomPKPaneAvatarView *)leaderBlue {
if (!_leaderBlue) {
_leaderBlue = [[XPRoomPKPaneAvatarView alloc] initWithFrame:CGRectMake(0, 0, 112.5, 60.5)];
_leaderBlue.type = XPRoomPKPaneAvatarType_Leader_Blue;
}
return _leaderBlue;
}
- (XPRoomPKPaneAvatarView *)memberBlue_1 {
if (!_memberBlue_1) {
_memberBlue_1 = [[XPRoomPKPaneAvatarView alloc] initWithFrame:CGRectMake(0, 0, 35, 35)];
_memberBlue_1.type = XPRoomPKPaneAvatarType_Blue;
}
return _memberBlue_1;
}
- (XPRoomPKPaneAvatarView *)memberBlue_2 {
if (!_memberBlue_2) {
_memberBlue_2 = [[XPRoomPKPaneAvatarView alloc] initWithFrame:CGRectMake(0, 0, 35, 35)];
_memberBlue_2.type = XPRoomPKPaneAvatarType_Blue;
}
return _memberBlue_2;
}
- (XPRoomPKPaneAvatarView *)memberBlue_3 {
if (!_memberBlue_3) {
_memberBlue_3 = [[XPRoomPKPaneAvatarView alloc] initWithFrame:CGRectMake(0, 0, 35, 35)];
_memberBlue_3.type = XPRoomPKPaneAvatarType_Blue;
}
return _memberBlue_3;
}
- (UIStackView *)redTeamStackView {
if (!_redTeamStackView) {
_redTeamStackView = [[UIStackView alloc] init];
_redTeamStackView.axis = UILayoutConstraintAxisHorizontal;
_redTeamStackView.distribution = UIStackViewDistributionFillEqually;
_redTeamStackView.alignment = UIStackViewAlignmentLeading;
_redTeamStackView.spacing = 4;
}
return _redTeamStackView;
}
- (UIStackView *)blueTeamStackView {
if (!_blueTeamStackView) {
_blueTeamStackView = [[UIStackView alloc] init];
_blueTeamStackView.axis = UILayoutConstraintAxisHorizontal;
_blueTeamStackView.distribution = UIStackViewDistributionFillEqually;
_blueTeamStackView.alignment = UIStackViewAlignmentTrailing;
_blueTeamStackView.spacing = 4;
}
return _blueTeamStackView;
}
- (void)setupCountDownView {
UIView *transparentRoundedCornersBackgroundView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 122, 30)];
transparentRoundedCornersBackgroundView.layer.cornerRadius = 14.5;
transparentRoundedCornersBackgroundView.backgroundColor = [UIColor colorWithWhite:0 alpha:0.7];
[self addSubview:transparentRoundedCornersBackgroundView];
[transparentRoundedCornersBackgroundView mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.mas_equalTo(self);
make.top.mas_equalTo(self.redTeamStackView.mas_bottom).offset(8);
make.size.mas_equalTo(CGSizeMake(122, 30));
}];
UIImageView *clockImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"room_pk_clock_icon"]];
[transparentRoundedCornersBackgroundView addSubview:clockImageView];
[clockImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerY.mas_equalTo(transparentRoundedCornersBackgroundView);
make.left.mas_equalTo(transparentRoundedCornersBackgroundView).offset(12);
make.size.mas_equalTo(CGSizeMake(13, 13));
}];
UILabel *titleLabel = [UILabel labelInitWithText:@"倒计时"
font:[UIFont systemFontOfSize:11 weight:UIFontWeightMedium]
textColor:[UIColor colorWithWhite:1 alpha:0.7]];
[transparentRoundedCornersBackgroundView addSubview:titleLabel];
[titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerY.mas_equalTo(transparentRoundedCornersBackgroundView);
make.left.mas_equalTo(clockImageView.mas_right).offset(6);
}];
[transparentRoundedCornersBackgroundView addSubview:self.countDownLabel];
[self.countDownLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerY.mas_equalTo(transparentRoundedCornersBackgroundView);
make.left.mas_equalTo(titleLabel.mas_right).offset(6);
}];
}
- (void)setupProgressArea {
UIView *progressArea = [[UIView alloc] init];
progressArea.backgroundColor = [UIColor colorWithWhite:1 alpha:0.6];
[self addSubview:progressArea];
[progressArea mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.redTeamStackView.mas_bottom).offset(28.5);
make.left.mas_equalTo(self.leaderRed.mas_left).offset(-4.5);
make.right.mas_equalTo(self.leaderBlue.mas_right).offset(4.5);
make.height.mas_equalTo(56.5);
}];
UIImageView *redPinImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"room_pk_panel_red_mark"]];
[progressArea addSubview:redPinImageView];
[redPinImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.left.mas_equalTo(progressArea);
make.size.mas_equalTo(CGSizeMake(47.5, 56.5));
}];
UIImageView *bluePinImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"room_pk_panel_blue_mark"]];
[progressArea addSubview:bluePinImageView];
[bluePinImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.right.mas_equalTo(progressArea);
make.size.mas_equalTo(CGSizeMake(47.5, 56.5));
}];
[progressArea insertSubview:self.redCountImageView belowSubview:redPinImageView];
[self.redCountImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.center.mas_equalTo(progressArea);
make.left.mas_equalTo(progressArea).offset(47.5);
make.right.mas_equalTo(progressArea).offset(-47.5);
make.height.mas_equalTo(14);
}];
[progressArea addSubview:self.fireImageView];
[self.fireImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.mas_equalTo(progressArea).offset(0);
make.centerY.mas_equalTo(progressArea);
make.height.mas_equalTo(35);
make.width.mas_equalTo(24);
}];
[progressArea insertSubview:self.blueCountImageView aboveSubview:self.redCountImageView];
[self.blueCountImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.right.mas_equalTo(progressArea).offset(-47.5);
make.centerY.mas_equalTo(progressArea);
make.leading.mas_equalTo(self.fireImageView.mas_centerX);
make.height.mas_equalTo(14);
}];
UILabel *giftLabel_red = [UILabel labelInitWithText:@"Gift"
font:[UIFont systemFontOfSize:15 weight:UIFontWeightBold]
textColor:[UIColor whiteColor]];
[redPinImageView addSubview:giftLabel_red];
[giftLabel_red mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.mas_equalTo(redPinImageView);
make.bottom.mas_equalTo(redPinImageView).offset(-12);
}];
UILabel *giftLabel_blue = [UILabel labelInitWithText:@"Gift"
font:[UIFont systemFontOfSize:15 weight:UIFontWeightBold]
textColor:[UIColor whiteColor]];
[bluePinImageView addSubview:giftLabel_blue];
[giftLabel_blue mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.mas_equalTo(bluePinImageView);
make.bottom.mas_equalTo(bluePinImageView).offset(-12);
}];
}
- (UILabel *)countDownLabel {
if (!_countDownLabel) {
_countDownLabel = [UILabel labelInitWithText:@"00:00"
font:[UIFont systemFontOfSize:15 weight:UIFontWeightBold]
textColor:[UIColor whiteColor]];
}
return _countDownLabel;
}
- (UIImageView *)redCountImageView {
if (!_redCountImageView) {
_redCountImageView = [[UIImageView alloc] init];
_redCountImageView.image = [[UIImage imageNamed:@"pk_progress_red"]
resizableImageWithCapInsets:UIEdgeInsetsZero
resizingMode:UIImageResizingModeTile];
}
return _redCountImageView;
}
- (UILabel *)redCountLabel {
if (!_redCountLabel) {
_redCountLabel = [UILabel labelInitWithText:@"0"
font:[UIFont boldSystemFontOfSize:12]
textColor:[UIColor whiteColor]];
_redCountLabel.textAlignment = NSTextAlignmentLeft;
}
return _redCountLabel;
}
- (UIImageView *)blueCountImageView {
if (!_blueCountImageView) {
_blueCountImageView = [[UIImageView alloc] init];
_blueCountImageView.image = [[UIImage imageNamed:@"pk_progress_blue"]
resizableImageWithCapInsets:UIEdgeInsetsZero
resizingMode:UIImageResizingModeTile];
}
return _blueCountImageView;
}
- (UILabel *)blueCountLabel {
if (!_blueCountLabel) {
_blueCountLabel = [UILabel labelInitWithText:@"0"
font:[UIFont boldSystemFontOfSize:12]
textColor:[UIColor whiteColor]];
_blueCountLabel.textAlignment = NSTextAlignmentRight;
}
return _blueCountLabel;
}
- (UIImageView *)fireImageView {
if (!_fireImageView) {
_fireImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"pk_progress_fire_icon"]];
_fireImageView.contentMode = UIViewContentModeScaleAspectFit;
}
return _fireImageView;
}
- (UIButton *)actionButton {
if (!_actionButton) {
_actionButton = [UIButton buttonWithType:UIButtonTypeCustom];
[_actionButton setBackgroundImage:[UIImage imageNamed:@"room_pk_panel_button_bg"]
forState:UIControlStateNormal];
[_actionButton addTarget:self
action:@selector(didTapActionButton)
forControlEvents:UIControlEventTouchUpInside];
}
return _actionButton;
}
@end