This commit is contained in:
启星
2026-01-23 17:08:58 +08:00
parent 491b97f3cb
commit 472bd8b3ae
50 changed files with 1434 additions and 27 deletions

View File

@@ -28,8 +28,9 @@
#import "QXGiftDriftView.h" #import "QXGiftDriftView.h"
#import "QXMeetActivityDriftView.h" #import "QXMeetActivityDriftView.h"
#import "QXRedPacketDriftView.h" #import "QXRedPacketDriftView.h"
#import "QXRoomPasswordView.h"
@interface QXGlobal() @interface QXGlobal()<QXRoomPasswordViewDelegate>
@property (nonatomic,assign)BOOL isLogin; @property (nonatomic,assign)BOOL isLogin;
@@ -291,7 +292,7 @@
} }
weakSelf.isClickJoinRoom = YES; weakSelf.isClickJoinRoom = YES;
[[QXRoomMessageManager shared] joinGroupWithRoomId:roomId]; [[QXRoomMessageManager shared] joinGroupWithRoomId:roomId];
[QXMineNetwork joinRoomWithRoomId:roomId successBlock:^(QXRoomModel * _Nonnull roomModel) { [QXMineNetwork joinRoomWithRoomId:roomId room_password:@"" successBlock:^(QXRoomModel * _Nonnull roomModel) {
[UIApplication sharedApplication].idleTimerDisabled = YES; [UIApplication sharedApplication].idleTimerDisabled = YES;
weakSelf.isClickJoinRoom = NO; weakSelf.isClickJoinRoom = NO;
weakSelf.roomVC = [[QXRoomViewController alloc] init]; weakSelf.roomVC = [[QXRoomViewController alloc] init];
@@ -327,7 +328,7 @@
} }
} }
[[QXRoomMessageManager shared] joinGroupWithRoomId:roomId]; [[QXRoomMessageManager shared] joinGroupWithRoomId:roomId];
[QXMineNetwork joinRoomWithRoomId:roomId successBlock:^(QXRoomModel * _Nonnull roomModel) { [QXMineNetwork joinRoomWithRoomId:roomId room_password:@"" successBlock:^(QXRoomModel * _Nonnull roomModel) {
weakSelf.isClickJoinRoom = NO; weakSelf.isClickJoinRoom = NO;
if (weakSelf.roomId && ![weakSelf.roomId isEqualToString:roomId]) { if (weakSelf.roomId && ![weakSelf.roomId isEqualToString:roomId]) {
[weakSelf quitRoomWithRoomId:weakSelf.roomId removeListener:NO]; [weakSelf quitRoomWithRoomId:weakSelf.roomId removeListener:NO];
@@ -353,6 +354,12 @@
} roomErrorBlock:^(NSString * _Nonnull roomId, NSString * _Nonnull msg) { } roomErrorBlock:^(NSString * _Nonnull roomId, NSString * _Nonnull msg) {
weakSelf.isClickJoinRoom = NO; weakSelf.isClickJoinRoom = NO;
[weakSelf showAlertWithMessage:msg roomId:roomId]; [weakSelf showAlertWithMessage:msg roomId:roomId];
} roomNeedPasswordBlock:^(NSString * _Nonnull msg) {
weakSelf.isClickJoinRoom = NO;
QXRoomPasswordView *pwdView = [[QXRoomPasswordView alloc] init];
pwdView.roomId = roomId;
pwdView.delegate = self;
[pwdView showInView:KEYWINDOW];
} failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) { } failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) {
weakSelf.isClickJoinRoom = NO; weakSelf.isClickJoinRoom = NO;
showToast(msg); showToast(msg);
@@ -361,6 +368,35 @@
} }
} }
} }
-(void)commitRoomPassword:(NSString *)password roomId:(nonnull NSString *)roomId passwordView:(nonnull QXRoomPasswordView *)passwordView{
[passwordView hide];
MJWeakSelf
QXRoomNavigationController*navagationController = (QXRoomNavigationController*)KEYWINDOW.rootViewController;
[[QXRoomMessageManager shared] joinGroupWithRoomId:roomId];
[QXMineNetwork joinRoomWithRoomId:roomId room_password:password successBlock:^(QXRoomModel * _Nonnull roomModel) {
weakSelf.isClickJoinRoom = NO;
if (weakSelf.roomId && ![weakSelf.roomId isEqualToString:roomId]) {
[weakSelf quitRoomWithRoomId:weakSelf.roomId removeListener:NO];
}
[[QXRoomMessageManager shared] joinGroupWithRoomId:roomId];
[UIApplication sharedApplication].idleTimerDisabled = YES;
weakSelf.roomVC = [[QXRoomViewController alloc] init];
weakSelf.roomVC.roomId = roomId;
weakSelf.roomVC.isReJoin = NO;
weakSelf.roomId = roomId;
weakSelf.roomVC.roomModel = roomModel;
weakSelf.roomVC.hidesBottomBarWhenPushed = YES;
[navagationController pushViewController:weakSelf.roomVC animated:YES];
weakSelf.roomId = roomId;
} roomErrorBlock:^(NSString * _Nonnull roomId, NSString * _Nonnull msg) {
weakSelf.isClickJoinRoom = NO;
[weakSelf showAlertWithMessage:msg roomId:roomId];
} failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) {
showToast(msg);
// hideLoadingInView(KEYWINDOW)
weakSelf.isClickJoinRoom = NO;
}];
}
-(void)startKeepAlive{ -(void)startKeepAlive{
[self stopKeepTimer]; [self stopKeepTimer];

View File

@@ -77,7 +77,7 @@
} }
-(void)getData{ -(void)getData{
MJWeakSelf MJWeakSelf
[QXMineNetwork getDressTypeListSuccessBlock:^(NSArray<QXUserDressTypeModel *> * _Nonnull list) { [QXMineNetwork getDressTypeListWithFrom:@"2" successBlock:^(NSArray<QXUserDressTypeModel *> * _Nonnull list) {
[weakSelf.dataArray removeAllObjects]; [weakSelf.dataArray removeAllObjects];
[weakSelf.dataArray addObjectsFromArray:list]; [weakSelf.dataArray addObjectsFromArray:list];
for (QXUserDressTypeModel*model in list) { for (QXUserDressTypeModel*model in list) {

View File

@@ -10,7 +10,7 @@
NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_BEGIN
@interface QXBackpackSubViewController : QXBaseViewController<JXCategoryListContentViewDelegate> @interface QXBackpackSubViewController : QXBaseViewController<JXCategoryListContentViewDelegate>
/// 0背包道具 1背包收入 2背包支出 /// 0背包道具 1背包收入 2背包支出 3热度卡
@property (nonatomic,assign)NSInteger type; @property (nonatomic,assign)NSInteger type;
@end @end

View File

@@ -28,8 +28,16 @@
if (self.type == 0) { if (self.type == 0) {
[self getBagList]; [self getBagList];
self.collectionView.frame = CGRectMake(0, 12, SCREEN_WIDTH, SCREEN_HEIGHT-NavContentHeight-44-10); self.collectionView.frame = CGRectMake(0, 12, SCREEN_WIDTH, SCREEN_HEIGHT-NavContentHeight-44-10);
}else{ }else if(self.type == 1){
[self getGiftRecordListIsIncome:self.type == 1]; [self getBagList];
self.collectionView.frame = CGRectMake(0, 12, SCREEN_WIDTH, SCREEN_HEIGHT-NavContentHeight-44-10);
}else if(self.type == 2){
[self getGiftRecordListIsIncome:YES];
[self.collectionView addRoundedCornersWithRadius:16];
self.collectionView.backgroundColor = [UIColor whiteColor];
self.collectionView.frame = CGRectMake(16, 12, SCREEN_WIDTH-32, SCREEN_HEIGHT-NavContentHeight-44-10);
}else if(self.type == 3){
[self getGiftRecordListIsIncome:NO];
[self.collectionView addRoundedCornersWithRadius:16]; [self.collectionView addRoundedCornersWithRadius:16];
self.collectionView.backgroundColor = [UIColor whiteColor]; self.collectionView.backgroundColor = [UIColor whiteColor];
self.collectionView.frame = CGRectMake(16, 12, SCREEN_WIDTH-32, SCREEN_HEIGHT-NavContentHeight-44-10); self.collectionView.frame = CGRectMake(16, 12, SCREEN_WIDTH-32, SCREEN_HEIGHT-NavContentHeight-44-10);
@@ -95,7 +103,7 @@
return self.dataArray.count; return self.dataArray.count;
} }
-(__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{ -(__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
if (self.type == 0) { if (self.type == 0 || self.type == 1) {
QXGiftCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"QXGiftCell" forIndexPath:indexPath]; QXGiftCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"QXGiftCell" forIndexPath:indexPath];
cell.roomGiftModel = self.dataArray[indexPath.row]; cell.roomGiftModel = self.dataArray[indexPath.row];
cell.cellType = QXGiftCellTypeBackpack; cell.cellType = QXGiftCellTypeBackpack;
@@ -112,7 +120,7 @@
} }
} }
-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath{ -(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath{
if (self.type == 0) { if (self.type == 0 || self.type == 1) {
CGFloat width = (SCREEN_WIDTH-15*2-22*2)/3; CGFloat width = (SCREEN_WIDTH-15*2-22*2)/3;
return CGSizeMake(width, width/100*136); return CGSizeMake(width, width/100*136);
}else{ }else{

View File

@@ -32,7 +32,7 @@
} }
- (void)initSubViews{ - (void)initSubViews{
self.view.backgroundColor = [UIColor whiteColor]; self.view.backgroundColor = [UIColor whiteColor];
self.titles = @[QXText(@"背包道具"),QXText(@"背包收入"),QXText(@"背包支出")]; self.titles = @[QXText(@"背包道具"),@"热度卡",QXText(@"背包收入"),QXText(@"背包支出")];
self.listVCArray = [NSMutableArray array]; self.listVCArray = [NSMutableArray array];
self.categoryView = [[JXCategoryTitleView alloc] init]; self.categoryView = [[JXCategoryTitleView alloc] init];
self.categoryView.frame = CGRectMake(15, kSafeAreaTop+44, SCREEN_WIDTH-30, 44); self.categoryView.frame = CGRectMake(15, kSafeAreaTop+44, SCREEN_WIDTH-30, 44);

View File

@@ -14,6 +14,8 @@ NS_ASSUME_NONNULL_BEGIN
@property(nonatomic,assign)BOOL isLight; @property(nonatomic,assign)BOOL isLight;
/// 数据源 /// 数据源
@property(nonatomic,strong)NSArray<QXUserGiftWallModel*> *giftArray; @property(nonatomic,strong)NSArray<QXUserGiftWallModel*> *giftArray;
/// 用户id
@property (nonatomic,strong)NSString*userId;
@end @end
NS_ASSUME_NONNULL_END NS_ASSUME_NONNULL_END

View File

@@ -7,6 +7,7 @@
#import "QXGiftWallSubViewController.h" #import "QXGiftWallSubViewController.h"
#import "QXMineGiftWallCell.h" #import "QXMineGiftWallCell.h"
#import "QXGiftWallDetailView.h"
@interface QXGiftWallSubViewController ()<UICollectionViewDelegate,UICollectionViewDataSource> @interface QXGiftWallSubViewController ()<UICollectionViewDelegate,UICollectionViewDataSource>
@property (nonatomic,strong)UICollectionView *collectionView; @property (nonatomic,strong)UICollectionView *collectionView;
@@ -58,5 +59,14 @@
cell.model = self.giftArray[indexPath.row]; cell.model = self.giftArray[indexPath.row];
return cell; return cell;
} }
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{
if (self.isLight) {
QXUserGiftWallModel *model = self.giftArray[indexPath.row];
QXGiftWallDetailView *giftDetailView = [[QXGiftWallDetailView alloc] init];
giftDetailView.userId = self.userId;
giftDetailView.giftModel = model;
[giftDetailView showInView:self.view];
}
}
@end @end

View File

@@ -92,8 +92,10 @@
} }
-(id<JXCategoryListContentViewDelegate>)listContainerView:(JXCategoryListContainerView *)listContainerView initListForIndex:(NSInteger)index{ -(id<JXCategoryListContentViewDelegate>)listContainerView:(JXCategoryListContainerView *)listContainerView initListForIndex:(NSInteger)index{
if (index == 0) { if (index == 0) {
self.lightVC.userId = self.userId;
return self.lightVC; return self.lightVC;
}else{ }else{
self.grayVC.userId = self.userId;
return self.grayVC; return self.grayVC;
} }
} }

View File

@@ -69,7 +69,7 @@
} }
-(void)getData{ -(void)getData{
MJWeakSelf MJWeakSelf
[QXMineNetwork getDressTypeListSuccessBlock:^(NSArray<QXUserDressTypeModel *> * _Nonnull list) { [QXMineNetwork getDressTypeListWithFrom:@"2" successBlock:^(NSArray<QXUserDressTypeModel *> * _Nonnull list) {
[weakSelf.dataArray removeAllObjects]; [weakSelf.dataArray removeAllObjects];
[weakSelf.dataArray addObjectsFromArray:list]; [weakSelf.dataArray addObjectsFromArray:list];
for (QXUserDressTypeModel*model in list) { for (QXUserDressTypeModel*model in list) {

View File

@@ -242,8 +242,10 @@ NS_ASSUME_NONNULL_BEGIN
/** /**
装扮类型列表 装扮类型列表
type 1 道具商城 2个性装扮
*/ */
+(void)getDressTypeListSuccessBlock:(void (^)(NSArray<QXUserDressTypeModel*>* list))successBlock +(void)getDressTypeListWithFrom:(NSString*)type
successBlock:(void (^)(NSArray<QXUserDressTypeModel*>* list))successBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock; failBlock:(void (^)(NSError * error, NSString * msg))failBlock;
@@ -300,6 +302,7 @@ NS_ASSUME_NONNULL_BEGIN
+(void)beforeJoinRoomWithRoomId:(NSString *)room_id +(void)beforeJoinRoomWithRoomId:(NSString *)room_id
successBlock:(void (^)(NSDictionary* dict))successBlock successBlock:(void (^)(NSDictionary* dict))successBlock
roomErrorBlock:(void (^)(NSString * roomId, NSString * msg))roomErrorBlock roomErrorBlock:(void (^)(NSString * roomId, NSString * msg))roomErrorBlock
roomNeedPasswordBlock:(void (^)(NSString * msg))roomNeedPasswordBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock; failBlock:(void (^)(NSError * error, NSString * msg))failBlock;
@@ -307,6 +310,7 @@ NS_ASSUME_NONNULL_BEGIN
进入房间 进入房间
*/ */
+(void)joinRoomWithRoomId:(NSString*)room_id +(void)joinRoomWithRoomId:(NSString*)room_id
room_password:(NSString*)room_password
successBlock:(void (^)(QXRoomModel* roomModel))successBlock successBlock:(void (^)(QXRoomModel* roomModel))successBlock
roomErrorBlock:(void (^)(NSString * roomId, NSString * msg))roomErrorBlock roomErrorBlock:(void (^)(NSString * roomId, NSString * msg))roomErrorBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock; failBlock:(void (^)(NSError * error, NSString * msg))failBlock;
@@ -1604,6 +1608,16 @@ NS_ASSUME_NONNULL_BEGIN
user_id:(NSString*)user_id user_id:(NSString*)user_id
successBlock:(void (^)(NSDictionary* dict))successBlock successBlock:(void (^)(NSDictionary* dict))successBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock; failBlock:(void (^)(NSError * error, NSString * msg))failBlock;
/**
礼物墙礼物用户列表
*/
+(void)giftWallUserListWithUserId:(NSString*)user_id
page:(NSInteger)page
gift_id:(NSString*)gift_id
successBlock:(void (^)(NSArray<QXUserHomeModel*>* list,NSString*count))successBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock;
@end @end

View File

@@ -487,8 +487,10 @@
/** /**
*/ */
+(void)getDressTypeListSuccessBlock:(void (^)(NSArray<QXUserDressTypeModel *> * _Nonnull))successBlock failBlock:(void (^)(NSError * _Nonnull, NSString * _Nonnull))failBlock{ +(void)getDressTypeListWithFrom:(NSString*)type
[[QXRequset shareInstance] getWithUrl:QXDressTypeList parameters:@{} needCache:NO success:^(id responseObject) { successBlock:(void (^)(NSArray<QXUserDressTypeModel *> * _Nonnull))successBlock
failBlock:(void (^)(NSError * _Nonnull, NSString * _Nonnull))failBlock{
[[QXRequset shareInstance] postWithUrl:QXDressTypeList parameters:@{@"type":type?type:@""} needCache:NO success:^(id responseObject) {
if (successBlock) { if (successBlock) {
NSArray *list = [NSArray yy_modelArrayWithClass:[QXUserDressTypeModel class] json:responseObject[@"data"]]; NSArray *list = [NSArray yy_modelArrayWithClass:[QXUserDressTypeModel class] json:responseObject[@"data"]];
successBlock(list); successBlock(list);
@@ -591,6 +593,7 @@
+(void)beforeJoinRoomWithRoomId:(NSString *)room_id +(void)beforeJoinRoomWithRoomId:(NSString *)room_id
successBlock:(void (^)(NSDictionary* dict))successBlock successBlock:(void (^)(NSDictionary* dict))successBlock
roomErrorBlock:(void (^)(NSString * roomId, NSString * msg))roomErrorBlock roomErrorBlock:(void (^)(NSString * roomId, NSString * msg))roomErrorBlock
roomNeedPasswordBlock:(void (^)(NSString * msg))roomNeedPasswordBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock{ failBlock:(void (^)(NSError * error, NSString * msg))failBlock{
[[QXRequset shareInstance] postWithUrl:QXBeforeJoinRoom parameters:@{@"room_id":room_id} needCache:NO success:^(id responseObject) { [[QXRequset shareInstance] postWithUrl:QXBeforeJoinRoom parameters:@{@"room_id":room_id} needCache:NO success:^(id responseObject) {
int code = [responseObject[@"code"] intValue]; int code = [responseObject[@"code"] intValue];
@@ -605,6 +608,11 @@
if (roomErrorBlock) { if (roomErrorBlock) {
roomErrorBlock(roomId,content); roomErrorBlock(roomId,content);
} }
}if(code == 101){
NSString* message = [NSString stringWithFormat:@"%@",responseObject[@"msg"]];
if (roomNeedPasswordBlock) {
roomNeedPasswordBlock(message);
}
}else{ }else{
if (successBlock) { if (successBlock) {
successBlock(responseObject[@"data"]); successBlock(responseObject[@"data"]);
@@ -615,9 +623,10 @@
}]; }];
} }
+(void)joinRoomWithRoomId:(NSString *)room_id successBlock:(nonnull void (^)(QXRoomModel * _Nonnull))successBlock roomErrorBlock:(nonnull void (^)(NSString * _Nonnull, NSString * _Nonnull))roomErrorBlock failBlock:(nonnull void (^)(NSError * _Nonnull, NSString * _Nonnull))failBlock{ +(void)joinRoomWithRoomId:(NSString *)room_id room_password:(NSString*)room_password successBlock:(nonnull void (^)(QXRoomModel * _Nonnull))successBlock roomErrorBlock:(nonnull void (^)(NSString * _Nonnull, NSString * _Nonnull))roomErrorBlock failBlock:(nonnull void (^)(NSError * _Nonnull, NSString * _Nonnull))failBlock{
NSDictionary *parameters =@{ NSDictionary *parameters =@{
@"room_id":room_id?:@"" @"room_id":room_id?:@"",
@"room_password":room_password?:@""
}; };
[[QXRequset shareInstance] postWithUrl:QXJoinRoom parameters:parameters needCache:NO success:^(id responseObject) { [[QXRequset shareInstance] postWithUrl:QXJoinRoom parameters:parameters needCache:NO success:^(id responseObject) {
int code = [responseObject[@"code"] intValue]; int code = [responseObject[@"code"] intValue];
@@ -3290,4 +3299,29 @@
failBlock(error,msg); failBlock(error,msg);
}]; }];
} }
/**
*/
+(void)giftWallUserListWithUserId:(NSString*)user_id
page:(NSInteger)page
gift_id:(NSString*)gift_id
successBlock:(void (^)(NSArray<QXUserHomeModel*>* list,NSString*count))successBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock{
NSDictionary *parameters =@{
@"user_id":user_id?:@"",
@"gift_id":gift_id?:@"",
@"page":[NSNumber numberWithInteger:page]
};
[[QXRequset shareInstance] postWithUrl:QXUserGiftWallUserList parameters:parameters needCache:NO success:^(id responseObject) {
if (successBlock) {
NSArray*list = [NSArray yy_modelArrayWithClass:[QXUserHomeModel class] json:responseObject[@"data"][@"users"]];
NSString*count = [NSString stringWithFormat:@"%@",responseObject[@"data"][@"count"]];
successBlock(list,count);
}
} fail:^(NSError *error, NSString *msg, NSURLSessionDataTask *task) {
failBlock(error,msg);
}];
}
@end @end

View File

@@ -157,7 +157,7 @@
self.fullEffectView.hidden = NO; self.fullEffectView.hidden = NO;
[self.fullEffectView previewEffectWith:self.model.play_image]; [self.fullEffectView previewEffectWith:self.model.play_image];
} }
if ([self.typeId isEqualToString:@"12"]) { if ([self.typeId isEqualToString:@"12"] || [self.typeId isEqualToString:@"13"]) {
self.titleArray = @[@"商品名称",@"商品单价",@"购买次数",@"商品总价"]; self.titleArray = @[@"商品名称",@"商品单价",@"购买次数",@"商品总价"];
}else{ }else{
self.titleArray = @[@"商品名称",@"商品价格",@"有效期至",@"购买时长"]; self.titleArray = @[@"商品名称",@"商品价格",@"有效期至",@"购买时长"];

View File

@@ -31,6 +31,8 @@ NS_ASSUME_NONNULL_BEGIN
@property (nonatomic, assign)BRDatePickerMode pickerMode; @property (nonatomic, assign)BRDatePickerMode pickerMode;
@property (nonatomic,strong)NSDate* beginDate; @property (nonatomic,strong)NSDate* beginDate;
@property (nonatomic,strong)NSDate* endDate; @property (nonatomic,strong)NSDate* endDate;
@property (nonatomic,strong)NSString *startSelectValue;
@property (nonatomic,strong)NSString *endSelectValue;
@property (nonatomic,copy)void(^chooseDateBlock)(NSString*startTime,NSString*endTime); @property (nonatomic,copy)void(^chooseDateBlock)(NSString*startTime,NSString*endTime);
@property (nonatomic,copy)void(^selectedDateBlock)(NSString*startTime,NSDate*startDate,NSString*endTime,NSDate*endDate); @property (nonatomic,copy)void(^selectedDateBlock)(NSString*startTime,NSDate*startDate,NSString*endTime,NSDate*endDate);
-(void)show; -(void)show;

View File

@@ -338,11 +338,19 @@
} }
-(void)setBeginDate:(NSDate *)beginDate{ -(void)setBeginDate:(NSDate *)beginDate{
_beginDate = beginDate; _beginDate = beginDate;
if (self.pickerMode == BRDatePickerModeHM) {
[self.beginTimeBtn setTitle:[NSString stringWithFormat:@"%02ld:%02ld",(long)beginDate.br_hour,beginDate.br_minute] forState:(UIControlStateNormal)]; [self.beginTimeBtn setTitle:[NSString stringWithFormat:@"%02ld:%02ld",(long)beginDate.br_hour,beginDate.br_minute] forState:(UIControlStateNormal)];
}else{
[self.beginTimeBtn setTitle:self.startSelectValue forState:(UIControlStateNormal)];
}
} }
-(void)setEndDate:(NSDate *)endDate{ -(void)setEndDate:(NSDate *)endDate{
_endDate = endDate; _endDate = endDate;
if (self.pickerMode == BRDatePickerModeHM) {
[self.endTimeBtn setTitle:[NSString stringWithFormat:@"%02ld:%02ld",(long)endDate.br_hour,endDate.br_minute] forState:(UIControlStateNormal)]; [self.endTimeBtn setTitle:[NSString stringWithFormat:@"%02ld:%02ld",(long)endDate.br_hour,endDate.br_minute] forState:(UIControlStateNormal)];
}else{
[self.endTimeBtn setTitle:self.endSelectValue forState:(UIControlStateNormal)];
}
} }
-(void)doneAction{ -(void)doneAction{
@@ -401,10 +409,12 @@
MJWeakSelf MJWeakSelf
_pickerView.resultBlock = ^(NSDate * _Nullable selectDate, NSString * _Nullable selectValue) { _pickerView.resultBlock = ^(NSDate * _Nullable selectDate, NSString * _Nullable selectValue) {
if (weakSelf.beginTimeBtn.selected) { if (weakSelf.beginTimeBtn.selected) {
weakSelf.startSelectValue = selectValue;
[weakSelf.beginTimeBtn setTitle:selectValue forState:(UIControlStateNormal)]; [weakSelf.beginTimeBtn setTitle:selectValue forState:(UIControlStateNormal)];
weakSelf.beginDate = selectDate; weakSelf.beginDate = selectDate;
}else{ }else{
[weakSelf.endTimeBtn setTitle:selectValue forState:(UIControlStateNormal)]; [weakSelf.endTimeBtn setTitle:selectValue forState:(UIControlStateNormal)];
weakSelf.endSelectValue = selectValue;
weakSelf.endDate = selectDate; weakSelf.endDate = selectDate;
} }
}; };

View File

@@ -0,0 +1,25 @@
//
// QXGiftWallDetailView.h
// QXLive
//
// Created by 启星 on 2026/1/23.
//
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface QXGiftWallDetailView : UIView
@property (nonatomic,strong)NSString*userId;
@property (nonatomic,strong)QXUserGiftWallModel*giftModel;
-(void)showInView:(UIView *)view;
-(void)hide;
@end
@interface QXGiftWallDetailCell : UICollectionViewCell
@property (nonatomic,strong)UIImageView *headerImageView;
@property (nonatomic,strong)UILabel *nameLabel;
@property (nonatomic,strong)UILabel *countLabel;
@property (nonatomic,strong)QXUserHomeModel*user;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,233 @@
//
// QXGiftWallDetailView.m
// QXLive
//
// Created by on 2026/1/23.
//
#import "QXGiftWallDetailView.h"
#import "QXMineNetwork.h"
@interface QXGiftWallDetailView()<UICollectionViewDataSource,UICollectionViewDelegate>
@property (strong, nonatomic)UIView *bgView;
@property (strong, nonatomic)UILabel *titleLabel;
@property (strong, nonatomic)UIButton *closeBtn;
@property (strong, nonatomic)UILabel *subTitleLabel;
@property (strong, nonatomic)UILabel *giftCountLabel;
@property (strong, nonatomic)UICollectionView *collectionView;
@property (strong, nonatomic)NSMutableArray *dataArray;
@property (assign, nonatomic)NSInteger page;
@end
@implementation QXGiftWallDetailView
- (instancetype)init
{
self = [super init];
if (self) {
self.frame = CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
[self initSubviews];
}
return self;
}
-(void)initSubviews{
self.backgroundColor = [UIColor colorWithWhite:0.0 alpha:0.4];
self.bgView = [[UIView alloc] initWithFrame:CGRectMake((SCREEN_WIDTH-ScaleWidth(348))/2, (SCREEN_HEIGHT-ScaleWidth(429))/2, ScaleWidth(348), ScaleWidth(429))];
self.bgView.backgroundColor = RGB16(0x134039);
[self.bgView addRoundedCornersWithRadius:16];
[self addSubview:self.bgView];
self.titleLabel = [[UILabel alloc] init];
self.titleLabel.textColor = RGB16(0xffffff);
self.titleLabel.font = [UIFont boldSystemFontOfSize:16];
self.titleLabel.text = @"黄金游轮";
[self.bgView addSubview:self.titleLabel];
[self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(20);
make.centerX.equalTo(self.bgView);
}];
self.closeBtn = [[UIButton alloc] init];
[self.closeBtn setImage:[UIImage imageNamed:@"wallet_close"] forState:(UIControlStateNormal)];
[self.closeBtn addTarget:self action:@selector(hide) forControlEvents:(UIControlEventTouchUpInside)];
[self.bgView addSubview:self.closeBtn];
[self.closeBtn mas_makeConstraints:^(MASConstraintMaker *make) {
make.height.width.mas_equalTo(35);
make.top.mas_equalTo(2);
make.right.mas_equalTo(-2);
}];
self.subTitleLabel = [[UILabel alloc] init];
self.subTitleLabel.textColor = RGB16A(0xffffff,0.65);
self.subTitleLabel.font = [UIFont boldSystemFontOfSize:12];
self.subTitleLabel.text = @"— 历史累计集卡详情 —";
[self.bgView addSubview:self.subTitleLabel];
[self.subTitleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.titleLabel.mas_bottom).offset(6);
make.centerX.equalTo(self.bgView);
}];
self.giftCountLabel = [[UILabel alloc] init];
self.giftCountLabel.textColor = RGB16(0xffffff);
self.giftCountLabel.font = [UIFont boldSystemFontOfSize:14];
self.giftCountLabel.text = @"黄金邮轮 26 人数 23";
[self.bgView addSubview:self.giftCountLabel];
[self.giftCountLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.subTitleLabel.mas_bottom).offset(13);
make.centerX.equalTo(self.bgView);
}];
[self.bgView addSubview:self.collectionView];
[self.collectionView mas_makeConstraints:^(MASConstraintMaker *make) {
make.right.mas_equalTo(0);
make.left.mas_equalTo(0);
make.top.equalTo(self.giftCountLabel.mas_bottom).offset(5);
make.bottom.equalTo(self.bgView).offset(-10);
}];
}
-(void)setGiftModel:(QXUserGiftWallModel *)giftModel{
_giftModel = giftModel;
self.titleLabel.text = giftModel.gift_name;
NSString *userCount = giftModel.top_users_count;
NSString *giftCount = giftModel.total_count;
NSString *giftInfo = [NSString stringWithFormat:@"%@%@ 人数%@",giftModel.gift_name,giftCount,userCount];
NSMutableAttributedString *attr = [[NSMutableAttributedString alloc] initWithString:giftInfo];
[attr yy_setColor:RGB16(0xFFFF59) range:[giftInfo rangeOfString:userCount]];
[attr yy_setColor:RGB16(0xFFFF59) range:[giftInfo rangeOfString:giftCount]];
self.giftCountLabel.attributedText = attr;
}
-(void)getUserList{
MJWeakSelf
[QXMineNetwork giftWallUserListWithUserId:self.userId page:self.page gift_id:self.giftModel.gift_id successBlock:^(NSArray<QXUserHomeModel *> * _Nonnull list, NSString * _Nonnull count) {
if (weakSelf.page == 1) {
[weakSelf.dataArray removeAllObjects];
}
[weakSelf.dataArray addObjectsFromArray:list];
[weakSelf.collectionView reloadData];
[weakSelf.collectionView.mj_header endRefreshing];
if (list.count == 0) {
weakSelf.collectionView.mj_footer.state = MJRefreshStateNoMoreData;
}else{
[weakSelf.collectionView.mj_footer endRefreshing];
}
} failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) {
[weakSelf.collectionView.mj_header endRefreshing];
[weakSelf.collectionView.mj_footer endRefreshing];
}];
}
-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
return self.dataArray.count;
}
-(__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
QXGiftWallDetailCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"QXGiftWallDetailCell" forIndexPath:indexPath];
cell.user = self.dataArray[indexPath.row];
return cell;
}
-(void)showInView:(UIView *)view{
self.page = 1;
[self getUserList];
self.bgView.alpha = 0;
self.bgView.frame = CGRectMake((SCREEN_WIDTH-ScaleWidth(348))/2, (view.height-ScaleWidth(429))/2, ScaleWidth(348), ScaleWidth(429));
[view addSubview:self];
[UIView animateWithDuration:0.1 animations:^{
self.bgView.alpha = 1;
}completion:^(BOOL finished) {
}];
}
-(void)hide{
[UIView animateWithDuration:0.1 animations:^{
self.bgView.alpha = 0;
}completion:^(BOOL finished) {
[self removeFromSuperview];
}];
}
-(UICollectionView *)collectionView{
if (!_collectionView) {
UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
layout.minimumLineSpacing = 20;
layout.minimumInteritemSpacing = 20;
layout.sectionInset = UIEdgeInsetsMake(0, 16, 0, 16);
NSInteger itemWidth =(ScaleWidth(348)-16*2-20*3)/4;
layout.itemSize = CGSizeMake(itemWidth, itemWidth+22);
_collectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout];
_collectionView.delegate = self;
_collectionView.dataSource = self;
_collectionView.backgroundColor = [UIColor clearColor];
[_collectionView registerNib:[UINib nibWithNibName:@"QXRechargePriceCell" bundle:[NSBundle mainBundle]] forCellWithReuseIdentifier:@"QXRechargePriceCell"];
[_collectionView registerClass:[QXGiftWallDetailCell class] forCellWithReuseIdentifier:@"QXGiftWallDetailCell"];
MJWeakSelf
_collectionView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
weakSelf.page = 1;
[weakSelf getUserList];
}];
_collectionView.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingBlock:^{
weakSelf.page++;
[weakSelf getUserList];
}];
}
return _collectionView;
}
-(NSMutableArray *)dataArray{
if (!_dataArray) {
_dataArray = [NSMutableArray array];
}
return _dataArray;
}
@end
@implementation QXGiftWallDetailCell
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self initSubviews];
self.contentView.backgroundColor = [UIColor clearColor];
self.backgroundColor = UIColor.clearColor;
}
return self;
}
-(void)setUser:(QXUserHomeModel *)user{
_user = user;
[self.headerImageView sd_setImageWithURL:[NSURL URLWithString:user.avatar]];
self.nameLabel.text = user.nickname;
self.countLabel.text = [NSString stringWithFormat:@"x%@",user.count];
}
-(void)initSubviews{
self.headerImageView = [[UIImageView alloc] init];
self.headerImageView.contentMode = UIViewContentModeScaleAspectFill;
[self.contentView addSubview:self.headerImageView];
NSInteger itemWidth =(ScaleWidth(348)-16*2-20*3)/4;
[self.headerImageView addRoundedCornersWithRadius:itemWidth/2];
[self.headerImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.top.equalTo(self.contentView);
make.height.equalTo(self.headerImageView.mas_width);
}];
self.countLabel = [[UILabel alloc] init];
self.countLabel.textColor = RGB16(0xFFFF93);
self.countLabel.font = [UIFont boldSystemFontOfSize:12];
self.countLabel.text = @"x0";
[self.contentView addSubview:self.countLabel];
[self.countLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.right.equalTo(self.contentView);
make.bottom.equalTo(self.headerImageView).offset(-4);
make.height.mas_equalTo(17);
}];
self.nameLabel = [[UILabel alloc] init];
self.nameLabel.textColor = RGB16(0xFFFF93);
self.nameLabel.font = [UIFont systemFontOfSize:12];
self.nameLabel.text = @"羽声语音";
[self.contentView addSubview:self.nameLabel];
[self.nameLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.equalTo(self.contentView);
make.bottom.equalTo(self.contentView);
make.height.mas_equalTo(20);
}];
}
@end

View File

@@ -55,7 +55,7 @@
self.userCountLabel.text = [NSString stringWithFormat:@"等%@人",model.top_users_count]; self.userCountLabel.text = [NSString stringWithFormat:@"等%@人",model.top_users_count];
if (model.top_users.count > 0) { if (model.top_users.count > 0) {
self.countLabel.hidden = NO; // self.countLabel.hidden = NO;
self.userCountLabel.hidden = NO; self.userCountLabel.hidden = NO;
QXUserHomeModel *md1; QXUserHomeModel *md1;
QXUserHomeModel *md2; QXUserHomeModel *md2;
@@ -89,7 +89,7 @@
} }
}else{ }else{
self.countLabel.hidden = YES; // self.countLabel.hidden = YES;
self.userCountLabel.hidden = YES; self.userCountLabel.hidden = YES;
self.userImageView1.hidden = YES; self.userImageView1.hidden = YES;
self.userImageView2.hidden = YES; self.userImageView2.hidden = YES;

View File

@@ -43,7 +43,7 @@
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/> <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
<nil key="highlightedColor"/> <nil key="highlightedColor"/>
</label> </label>
<imageView hidden="YES" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="6dg-55-CAQ"> <imageView hidden="YES" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="6dg-55-CAQ">
<rect key="frame" x="66" y="211" width="18" height="18"/> <rect key="frame" x="66" y="211" width="18" height="18"/>
<constraints> <constraints>
<constraint firstAttribute="height" constant="18" id="SU0-l9-dWa"/> <constraint firstAttribute="height" constant="18" id="SU0-l9-dWa"/>
@@ -56,19 +56,31 @@
</userDefinedRuntimeAttribute> </userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes> </userDefinedRuntimeAttributes>
</imageView> </imageView>
<imageView hidden="YES" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="mxk-cv-aBW"> <imageView hidden="YES" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="mxk-cv-aBW">
<rect key="frame" x="54" y="211" width="18" height="18"/> <rect key="frame" x="54" y="211" width="18" height="18"/>
<constraints> <constraints>
<constraint firstAttribute="width" constant="18" id="Kwg-ZJ-I5s"/> <constraint firstAttribute="width" constant="18" id="Kwg-ZJ-I5s"/>
<constraint firstAttribute="height" constant="18" id="xl5-Rc-fQg"/> <constraint firstAttribute="height" constant="18" id="xl5-Rc-fQg"/>
</constraints> </constraints>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="layer.masksToBounds" value="YES"/>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="9"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</imageView> </imageView>
<imageView hidden="YES" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="Rfn-Wi-s2Q"> <imageView hidden="YES" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="Rfn-Wi-s2Q">
<rect key="frame" x="42" y="211" width="18" height="18"/> <rect key="frame" x="42" y="211" width="18" height="18"/>
<constraints> <constraints>
<constraint firstAttribute="width" constant="18" id="n8I-xi-ccY"/> <constraint firstAttribute="width" constant="18" id="n8I-xi-ccY"/>
<constraint firstAttribute="height" constant="18" id="pmp-Ws-KWh"/> <constraint firstAttribute="height" constant="18" id="pmp-Ws-KWh"/>
</constraints> </constraints>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="layer.masksToBounds" value="YES"/>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="9"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</imageView> </imageView>
<label hidden="YES" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="等12人" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="5R5-ei-HVw"> <label hidden="YES" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="等12人" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="5R5-ei-HVw">
<rect key="frame" x="90" y="214.66666666666666" width="70" height="11"/> <rect key="frame" x="90" y="214.66666666666666" width="70" height="11"/>

View File

@@ -207,6 +207,29 @@ CGFloat labelHeight = 63;
break; break;
case QXPasswordViewTypeRoom:{ case QXPasswordViewTypeRoom:{
self.titleLabel.text = QXText(@"请输入房间密码"); self.titleLabel.text = QXText(@"请输入房间密码");
self.titleLabel.hidden = YES;
[self.label2 mas_remakeConstraints:^(MASConstraintMaker *make) {
make.right.equalTo(self.mas_centerX).offset(-8);
make.size.mas_equalTo(CGSizeMake(ScaleWidth(44), ScaleWidth(44)));
make.top.equalTo(self).offset(0);
}];
[self.label3 mas_remakeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(self.mas_centerX).offset(8);
make.size.mas_equalTo(CGSizeMake(ScaleWidth(44), ScaleWidth(44)));
make.top.equalTo(self.label2);
}];
[self.label1 mas_remakeConstraints:^(MASConstraintMaker *make) {
make.right.equalTo(self.label2.mas_left).offset(-16);
make.size.mas_equalTo(CGSizeMake(ScaleWidth(44), ScaleWidth(44)));
make.top.equalTo(self.label2);
}];
[self.label4 mas_remakeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(self.label3.mas_right).offset(16);
make.size.mas_equalTo(CGSizeMake(ScaleWidth(44), ScaleWidth(44)));
make.top.equalTo(self.label2);
}];
} }
break; break;
default: default:

View File

@@ -628,4 +628,6 @@ static NSString * QXRoomServicesUserId = @"api/banner/app_customer_service";
static NSString * QXRoomSetTime = @"api/Room/set_room_business_time"; static NSString * QXRoomSetTime = @"api/Room/set_room_business_time";
/// pk闭麦 /// pk闭麦
static NSString * QXRoomPKCloseMic = @"api/RoomPk/close_pk_mic"; static NSString * QXRoomPKCloseMic = @"api/RoomPk/close_pk_mic";
/// 礼物墙用户列表
static NSString * QXUserGiftWallUserList = @"api/User/gift_wall_user_list";
#endif /* Api_h */ #endif /* Api_h */

View File

@@ -320,7 +320,7 @@ QXUpSeatViewDelegate
[[QXRoomMessageManager shared] joinGroupWithRoomId:self.roomId]; [[QXRoomMessageManager shared] joinGroupWithRoomId:self.roomId];
QXGlobal.shareGlobal.roomId = self.roomId; QXGlobal.shareGlobal.roomId = self.roomId;
QXGlobal.shareGlobal.roomVC = self; QXGlobal.shareGlobal.roomVC = self;
[QXMineNetwork joinRoomWithRoomId:self.roomId successBlock:^(QXRoomModel * _Nonnull roomModel) { [QXMineNetwork joinRoomWithRoomId:self.roomId room_password:@"" successBlock:^(QXRoomModel * _Nonnull roomModel) {
weakSelf.roomModel = roomModel; weakSelf.roomModel = roomModel;
[weakSelf resetSubviews]; [weakSelf resetSubviews];
[weakSelf configRoomDataIsJoin:YES]; [weakSelf configRoomDataIsJoin:YES];

View File

@@ -0,0 +1,25 @@
//
// QXRoomPasswordView.h
// QXLive
//
// Created by 启星 on 2026/1/23.
//
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@class QXRoomPasswordView;
@protocol QXRoomPasswordViewDelegate <NSObject>
@optional
-(void)commitRoomPassword:(NSString*)password roomId:(NSString*)roomId passwordView:(QXRoomPasswordView*)passwordView;
@end
@interface QXRoomPasswordView : UIView
@property (nonatomic,weak)id<QXRoomPasswordViewDelegate>delegate;
@property (nonatomic,strong)NSString *roomId;
-(void)showInView:(UIView *)view;
-(void)hide;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,126 @@
//
// QXRoomPasswordView.m
// QXLive
//
// Created by on 2026/1/23.
//
#import "QXRoomPasswordView.h"
#import "QXPasswordView.h"
@interface QXRoomPasswordView()<QXPasswordViewDelegate>
@property (nonatomic,strong)UIView *bgView;
@property (nonatomic,strong)UILabel *titleLabel;
@property (nonatomic,strong)QXPasswordView *pwdView;
@property (nonatomic,strong)UIButton *cancelBtn;
@property (nonatomic,strong)UIButton *commitBtn;
@property (nonatomic,strong)NSString *password;
@end
@implementation QXRoomPasswordView
- (instancetype)init
{
self = [super init];
if (self) {
self.frame = CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
[self initSubviews];
}
return self;
}
-(void)initSubviews{
self.backgroundColor = [UIColor colorWithWhite:0.0 alpha:0.5];
self.bgView = [[UIView alloc] initWithFrame:CGRectMake((SCREEN_WIDTH-ScaleWidth(275))/2.0, 0, ScaleWidth(275), ScaleWidth(202))];
self.bgView.backgroundColor = [UIColor whiteColor];
self.bgView.layer.masksToBounds = YES;
self.bgView.layer.cornerRadius = 16;
[self addSubview:self.bgView];
self.titleLabel = [[UILabel alloc] init];
self.titleLabel.font = [UIFont boldSystemFontOfSize:16];
self.titleLabel.text = @"输入房间密码";
self.titleLabel.textColor = RGB16(0x333333);
[self.bgView addSubview:self.titleLabel];
[self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.equalTo(self.bgView);
make.top.equalTo(self.bgView).offset(16);
make.height.mas_equalTo(24);
}];
self.pwdView = [[QXPasswordView alloc] init];
self.pwdView.type = QXPasswordViewTypeRoom;
self.pwdView.delegate = self;
[self.bgView addSubview:self.pwdView];
[self.pwdView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.titleLabel.mas_bottom).offset(30);
make.height.mas_equalTo(ScaleWidth(44));
make.left.right.equalTo(self);
}];
self.commitBtn = [[UIButton alloc] init];
[self.commitBtn addRoundedCornersWithRadius:21];
self.commitBtn.backgroundColor = QXConfig.themeColor;
[self.commitBtn setTitle:QXText(@"确认") forState:(UIControlStateNormal)];
[self.commitBtn setTitleColor:QXConfig.btnTextColor forState:(UIControlStateNormal)];
self.commitBtn.titleLabel.font = [UIFont systemFontOfSize:14];
[self.commitBtn addTarget:self action:@selector(commitAction) forControlEvents:(UIControlEventTouchUpInside)];
[self.bgView addSubview:self.commitBtn];
[self.commitBtn mas_makeConstraints:^(MASConstraintMaker *make) {
make.bottom.equalTo(self.bgView).offset(-12);
make.height.mas_equalTo(42);
make.width.mas_equalTo(ScaleWidth(110));
make.right.mas_equalTo(-20);
}];
self.cancelBtn = [[UIButton alloc] init];
[self.cancelBtn addRoundedCornersWithRadius:21];
self.cancelBtn.backgroundColor = RGB16(0xF3F3F3);
[self.cancelBtn setTitle:QXText(@"取消") forState:(UIControlStateNormal)];
[self.cancelBtn setTitleColor:RGB16(0x999999) forState:(UIControlStateNormal)];
self.cancelBtn.titleLabel.font = [UIFont systemFontOfSize:14];
[self.cancelBtn addTarget:self action:@selector(cancelAction) forControlEvents:(UIControlEventTouchUpInside)];
[self.bgView addSubview:self.cancelBtn];
[self.cancelBtn mas_makeConstraints:^(MASConstraintMaker *make) {
make.bottom.equalTo(self.bgView).offset(-12);
make.height.mas_equalTo(42);
make.width.mas_equalTo(ScaleWidth(110));
make.left.mas_equalTo(20);
}];
}
-(void)inputFinished:(NSString *)password{
self.password = password;
}
-(void)cancelAction{
[self hide];
}
-(void)commitAction{
if (![self.password isExist]) {
showToast(@"请输入房间密码");
return;
}
if (self.delegate && [self.delegate respondsToSelector:@selector(commitRoomPassword:roomId:passwordView:)]) {
[self.delegate commitRoomPassword:self.password roomId:self.roomId passwordView:self];
}
}
-(void)showInView:(UIView *)view{
self.bgView.y = -view.height;
[view addSubview:self];
[UIView animateWithDuration:0.3 delay:0 usingSpringWithDamping:0.5 initialSpringVelocity:1.0 options:UIViewAnimationOptionCurveEaseInOut animations:^{
self.bgView.y = (view.height-self.bgView.height)/2.0;
} completion:^(BOOL finished) {
}];
}
-(void)hide{
[UIView animateWithDuration:0.3 delay:0 usingSpringWithDamping:0.5 initialSpringVelocity:1.0 options:UIViewAnimationOptionCurveEaseInOut animations:^{
self.bgView.y = SCREEN_HEIGHT;
} completion:^(BOOL finished) {
[self removeFromSuperview];
}];
}
@end

View File

@@ -90,6 +90,9 @@
if (emoji.children.count>0) { if (emoji.children.count>0) {
NSUInteger randomIndex = arc4random() % emoji.children.count; NSUInteger randomIndex = arc4random() % emoji.children.count;
QXEmojiChirldModel *md = emoji.children[randomIndex]; QXEmojiChirldModel *md = emoji.children[randomIndex];
#if DEBUG
md = emoji.children[0];
#endif
result = [[QXEmojiModel alloc] init]; result = [[QXEmojiModel alloc] init];
result.image = md.image; result.image = md.image;
result.animate_image = emoji.animate_image; result.animate_image = emoji.animate_image;

View File

@@ -783,7 +783,7 @@
-(QXDatePickerView *)pickerView{ -(QXDatePickerView *)pickerView{
if (!_pickerView) { if (!_pickerView) {
_pickerView = [[QXDatePickerView alloc] init]; _pickerView = [[QXDatePickerView alloc] init];
_pickerView.pickerView.pickerMode = BRDatePickerModeHM; _pickerView.pickerMode = BRDatePickerModeHM;
_pickerView.pickerView.maxDate = [NSDate br_setHour:23 minute:59]; _pickerView.pickerView.maxDate = [NSDate br_setHour:23 minute:59];
_pickerView.pickerView.minDate = [NSDate br_setHour:00 minute:00]; _pickerView.pickerView.minDate = [NSDate br_setHour:00 minute:00];
_pickerView.pickerView.selectDate = [NSDate br_setHour:00 minute:00]; _pickerView.pickerView.selectDate = [NSDate br_setHour:00 minute:00];

View File

@@ -0,0 +1,18 @@
//
// JFRoomResultCell.h
// VoiceChat
//
// Created by Mc on 2020/4/16.
//
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface JFRoomResultItemView : UIView
@property (nonatomic,strong) QXGiftModel *model;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,42 @@
//
// JFRoomResultCell.m
// VoiceChat
//
// Created by Mc on 2020/4/16.
//
#import "JFRoomResultItemView.h"
@interface JFRoomResultItemView ()
@property (weak, nonatomic) IBOutlet UIImageView *ballImageView;
@property (weak, nonatomic) IBOutlet UIImageView *logoImageView;
@property (weak, nonatomic) IBOutlet UILabel *nameLabel;
@property (weak, nonatomic) IBOutlet UILabel *numLabel;
@property (weak, nonatomic) IBOutlet UILabel *priceLabel;
@end
@implementation JFRoomResultItemView
- (void)setModel:(QXGiftModel *)model
{
_model = model;
[self.logoImageView sd_setImageWithURL:[NSURL URLWithString:model.base_image]];
self.nameLabel.text = model.gift_name;
self.numLabel.text = [NSString stringWithFormat:@"x%ld",(long)model.num];
self.priceLabel.text = [NSString stringWithFormat:@" (%ld)",(long)model.gift_price];
if (model.gift_price.integerValue > 10000) {
self.ballImageView.image = [UIImage imageNamed:@"room_wish_result_bubble_04"];
} else if (model.gift_price.integerValue >= 5000) {
self.ballImageView.image = [UIImage imageNamed:@"room_wish_result_bubble_03"];
} else if (model.gift_price.integerValue >= 520) {
self.ballImageView.image = [UIImage imageNamed:@"room_wish_result_bubble_02"];
} else {
self.ballImageView.image = [UIImage imageNamed:@"room_wish_result_bubble_01"];
}
}
@end

View File

@@ -0,0 +1,89 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="17701" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
<device id="retina6_1" orientation="portrait" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="17703"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view contentMode="scaleToFill" id="ehx-Gg-fbK" customClass="JFRoomResultItemView">
<rect key="frame" x="0.0" y="0.0" width="90" height="125"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="HcP-2s-Msj">
<rect key="frame" x="17.5" y="12.5" width="55" height="55"/>
<constraints>
<constraint firstAttribute="width" constant="55" id="HPB-VZ-GIK"/>
<constraint firstAttribute="width" secondItem="HcP-2s-Msj" secondAttribute="height" multiplier="1:1" id="PCk-Dj-7Bd"/>
</constraints>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="棒棒糖" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="tl1-Jk-fUH">
<rect key="frame" x="25.5" y="80" width="39" height="19"/>
<fontDescription key="fontDescription" name="PingFangSC-Regular" family="PingFang SC" pointSize="13"/>
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<nil key="highlightedColor"/>
</label>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="iIf-G0-yVe">
<rect key="frame" x="16" y="99" width="58" height="16"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="x1" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="dsG-40-sug">
<rect key="frame" x="0.0" y="-1.5" width="12" height="19"/>
<fontDescription key="fontDescription" name="PingFangSC-Regular" family="PingFang SC" pointSize="13"/>
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="(13444)" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="dig-Yb-tpC">
<rect key="frame" x="12" y="-1.5" width="46" height="19"/>
<fontDescription key="fontDescription" name="PingFangSC-Regular" family="PingFang SC" pointSize="13"/>
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstItem="dig-Yb-tpC" firstAttribute="leading" secondItem="dsG-40-sug" secondAttribute="trailing" id="7cl-kq-9FT"/>
<constraint firstAttribute="trailing" secondItem="dig-Yb-tpC" secondAttribute="trailing" id="Dit-Wg-e72"/>
<constraint firstItem="dsG-40-sug" firstAttribute="centerY" secondItem="iIf-G0-yVe" secondAttribute="centerY" id="anG-mT-Sok"/>
<constraint firstAttribute="height" constant="16" id="d2j-qD-1Yh"/>
<constraint firstItem="dsG-40-sug" firstAttribute="leading" secondItem="iIf-G0-yVe" secondAttribute="leading" id="eRv-Vx-Tfy"/>
<constraint firstItem="dig-Yb-tpC" firstAttribute="centerY" secondItem="iIf-G0-yVe" secondAttribute="centerY" id="jgG-l9-2Vq"/>
</constraints>
</view>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="drs-P0-Tl8">
<rect key="frame" x="5" y="0.0" width="80" height="80"/>
<constraints>
<constraint firstAttribute="height" constant="80" id="165-9M-8PM"/>
<constraint firstAttribute="width" constant="80" id="PZd-ty-bQu"/>
</constraints>
</imageView>
</subviews>
<viewLayoutGuide key="safeArea" id="JXX-aX-CVs"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstItem="drs-P0-Tl8" firstAttribute="top" secondItem="ehx-Gg-fbK" secondAttribute="top" id="BWb-SS-Kwa"/>
<constraint firstItem="tl1-Jk-fUH" firstAttribute="centerX" secondItem="ehx-Gg-fbK" secondAttribute="centerX" id="LpM-6H-X91"/>
<constraint firstItem="drs-P0-Tl8" firstAttribute="centerX" secondItem="ehx-Gg-fbK" secondAttribute="centerX" id="NbI-sc-lzM"/>
<constraint firstItem="HcP-2s-Msj" firstAttribute="centerY" secondItem="drs-P0-Tl8" secondAttribute="centerY" id="bKd-Wf-u8w"/>
<constraint firstItem="tl1-Jk-fUH" firstAttribute="top" secondItem="drs-P0-Tl8" secondAttribute="bottom" id="fun-xd-UVt"/>
<constraint firstItem="iIf-G0-yVe" firstAttribute="centerX" secondItem="ehx-Gg-fbK" secondAttribute="centerX" id="qJF-1m-dDM"/>
<constraint firstItem="iIf-G0-yVe" firstAttribute="top" secondItem="tl1-Jk-fUH" secondAttribute="bottom" id="toU-Tc-Dnw"/>
<constraint firstItem="HcP-2s-Msj" firstAttribute="centerX" secondItem="drs-P0-Tl8" secondAttribute="centerX" id="vr6-cz-OLW"/>
</constraints>
<nil key="simulatedTopBarMetrics"/>
<nil key="simulatedBottomBarMetrics"/>
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
<connections>
<outlet property="ballImageView" destination="drs-P0-Tl8" id="vIu-wF-eS8"/>
<outlet property="logoImageView" destination="HcP-2s-Msj" id="YoP-95-HPV"/>
<outlet property="nameLabel" destination="tl1-Jk-fUH" id="JGL-qg-TxF"/>
<outlet property="numLabel" destination="dsG-40-sug" id="r5w-vg-iEP"/>
<outlet property="priceLabel" destination="dig-Yb-tpC" id="jK2-SW-Lud"/>
</connections>
<point key="canvasLocation" x="-61.594202898550726" y="220.64732142857142"/>
</view>
</objects>
</document>

View File

@@ -0,0 +1,18 @@
//
// JFRoomWishResultView.h
// VoiceChat
//
// Created by Mc on 2020/4/16.
//
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface JFRoomWishResultView : UIView
+ (void)showWish:(NSArray<QXGiftModel *> *)models;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,107 @@
//
// JFRoomWishResultView.m
// VoiceChat
//
// Created by Mc on 2020/4/16.
//
#import "JFRoomWishResultView.h"
#import "JFRoomResultItemView.h"
//#import "JFHttpRequestHelper.h"
#import <AudioToolbox/AudioToolbox.h>
@interface JFRoomWishResultView ()
@property (weak, nonatomic) IBOutlet UIView *contentView;
@property (weak, nonatomic) IBOutlet UIView *itemsView;
@property (weak, nonatomic) IBOutlet UILabel *totalPriceLabel;
@property (nonatomic, strong) NSArray<QXGiftModel *> *models;
@end
@implementation JFRoomWishResultView
+ (void)showWish:(NSArray<QXGiftModel *> *)models
{
JFRoomWishResultView *view = [[NSBundle mainBundle]loadNibNamed:@"JFRoomWishResultView" owner:self options:nil][0];
view.frame = CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
[[UIApplication sharedApplication].keyWindow addSubview:view];
view.models = models;
}
#pragma mark - Event
- (IBAction)onTapCover:(id)sender
{
[self removeFromSuperview];
}
/// itemView
/// @param itemViewList
- (void)expandItemViewsWithItemViewList:(NSMutableArray<JFRoomResultItemView *> *)itemViewList
{
[self layoutIfNeeded];
NSInteger colCount = 3;
CGFloat itemWidth = 90;
CGFloat itemHeight = 125;
for (int i = 0; i < itemViewList.count; i++) {
JFRoomResultItemView *itemView = itemViewList[i];
itemView.frame = CGRectMake(0, 0, itemWidth, itemHeight);
itemView.center = CGPointMake(SCREEN_WIDTH * 0.5, self.itemsView.height * 0.5);
itemView.alpha = 0;
[self.itemsView addSubview:itemView];
}
[UIView animateWithDuration:0.28 animations:^{
for (int i = 0; i < itemViewList.count; i++) {
JFRoomResultItemView *itemView = itemViewList[i];
NSInteger row = i / colCount;
NSInteger col = i % colCount;
CGFloat margin = (SCREEN_WIDTH - (itemWidth * colCount)) / (colCount + 1);
CGFloat x = margin + (itemWidth + margin) * col;
CGFloat y = itemHeight * row;
itemView.frame = CGRectMake(x, y, itemWidth, itemHeight);
itemView.alpha = 1;
}
}];
}
#pragma mark - setter/getter
- (void)setModels:(NSArray<QXGiftModel *> *)models
{
_models = models;
UINib *itemViewNib = [UINib nibWithNibName:@"JFRoomResultItemView" bundle:nil];
NSMutableArray<JFRoomResultItemView *> *itemViewList = [NSMutableArray array];
NSInteger totalPrice = 0;
BOOL needShake = NO;
for (QXGiftModel *item in models) {
if (item.gift_price.integerValue >= 5000) {
needShake = YES;
}
totalPrice += item.gift_price.integerValue * item.num.integerValue;
JFRoomResultItemView *itemView = [itemViewNib instantiateWithOwner:nil options:nil].firstObject;
itemView.model = item;
[itemViewList addObject:itemView];
}
if (needShake) {
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
}
self.totalPriceLabel.text = [NSString stringWithFormat:@"礼物总值:%ld", totalPrice];
[self expandItemViewsWithItemViewList:itemViewList];
}
@end

View File

@@ -0,0 +1,66 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="17701" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
<device id="retina6_1" orientation="portrait" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="17703"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view contentMode="scaleToFill" id="iN0-l3-epB" customClass="JFRoomWishResultView">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="eYy-6Q-Ah1" userLabel="ContentView">
<rect key="frame" x="0.0" y="237" width="375" height="430"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="礼物总值:0" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="3UD-d0-JLL">
<rect key="frame" x="153.5" y="15" width="68.5" height="20"/>
<fontDescription key="fontDescription" name="PingFangSC-Regular" family="PingFang SC" pointSize="14"/>
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<nil key="highlightedColor"/>
</label>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="nLF-3O-kxp">
<rect key="frame" x="0.0" y="70" width="375" height="360"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</view>
</subviews>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="trailing" secondItem="nLF-3O-kxp" secondAttribute="trailing" id="4NL-tc-bXo"/>
<constraint firstAttribute="width" secondItem="eYy-6Q-Ah1" secondAttribute="height" multiplier="375:430" id="9WR-Vt-EW0"/>
<constraint firstItem="nLF-3O-kxp" firstAttribute="leading" secondItem="eYy-6Q-Ah1" secondAttribute="leading" id="JB7-KI-adm"/>
<constraint firstItem="nLF-3O-kxp" firstAttribute="top" secondItem="eYy-6Q-Ah1" secondAttribute="top" constant="70" id="Rbs-xB-RXB"/>
<constraint firstAttribute="bottom" secondItem="nLF-3O-kxp" secondAttribute="bottom" id="U7R-8M-5SA"/>
<constraint firstItem="3UD-d0-JLL" firstAttribute="top" secondItem="eYy-6Q-Ah1" secondAttribute="top" constant="15" id="gB7-Ik-GGY"/>
<constraint firstItem="3UD-d0-JLL" firstAttribute="centerX" secondItem="eYy-6Q-Ah1" secondAttribute="centerX" id="qxV-6V-WY4"/>
</constraints>
</view>
</subviews>
<viewLayoutGuide key="safeArea" id="vUN-kp-3ea"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<gestureRecognizers/>
<constraints>
<constraint firstItem="eYy-6Q-Ah1" firstAttribute="leading" secondItem="vUN-kp-3ea" secondAttribute="leading" id="SPT-NB-f7R"/>
<constraint firstItem="vUN-kp-3ea" firstAttribute="trailing" secondItem="eYy-6Q-Ah1" secondAttribute="trailing" id="g92-T9-izg"/>
<constraint firstAttribute="bottom" secondItem="eYy-6Q-Ah1" secondAttribute="bottom" id="xFK-or-cbd"/>
</constraints>
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
<connections>
<outlet property="contentView" destination="eYy-6Q-Ah1" id="ZaJ-fI-0Fq"/>
<outlet property="itemsView" destination="nLF-3O-kxp" id="O33-Ba-zXd"/>
<outlet property="totalPriceLabel" destination="3UD-d0-JLL" id="Ue5-HH-DyC"/>
<outletCollection property="gestureRecognizers" destination="jpO-9u-hdu" appends="YES" id="1IG-gq-xkR"/>
</connections>
<point key="canvasLocation" x="136.95652173913044" y="98.102678571428569"/>
</view>
<tapGestureRecognizer id="jpO-9u-hdu">
<connections>
<action selector="onTapCover:" destination="iN0-l3-epB" id="EdO-ZJ-p72"/>
</connections>
</tapGestureRecognizer>
</objects>
</document>

View File

@@ -0,0 +1,18 @@
//
// JFRoomWishView.h
// VoiceChat
//
// Created by Mc on 2020/4/15.
//
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface JFRoomWishView : UIView
+ (void)show;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,212 @@
//
// JFRoomWishView.m
// VoiceChat
//
// Created by Mc on 2020/4/15.
//
#import "JFRoomWishView.h"
#import "JFRoomWishResultView.h"
//#import "JFHttpRequestHelper.h"
#import <SVGAParser.h>
#import <SVGAImageView.h>
#import "SVGAVideoEntity.h"
@interface JFRoomWishView ()<SVGAPlayerDelegate>
@property (weak, nonatomic) IBOutlet UIView *bgView;
@property (weak, nonatomic) IBOutlet UIButton *giftAnimationBtn;
@property (weak, nonatomic) IBOutlet UIImageView *ballImageView;
@property (weak, nonatomic) IBOutlet UILabel *goldBalanceLabel;
@property (weak, nonatomic) IBOutlet UIButton *wishBallBtn;
@property (weak, nonatomic) IBOutlet UIButton *wishBtn1;
@property (weak, nonatomic) IBOutlet UIButton *wishBtn10;
@property (weak, nonatomic) IBOutlet UIButton *wishBtn20;
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *bottom_bgView;
@property (nonatomic, strong) NSArray<QXGiftModel *> *models;
@property (nonatomic,assign) BOOL isShowingSvga;
@property (nonatomic,assign) BOOL isRequesting;
@property (strong, nonatomic) SVGAImageView *svgaDisplayView;
@end
@implementation JFRoomWishView
+ (void)show
{
JFRoomWishView *view = [[NSBundle mainBundle]loadNibNamed:@"JFRoomWishView" owner:self options:nil][0];
view.frame = CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
view.tag = 80001;
[[UIApplication sharedApplication].keyWindow addSubview:view];
view.giftAnimationBtn.selected = ![[NSUserDefaults standardUserDefaults] boolForKey:@"ClosePetEatAnimation"];
[view setSvgaView];
view.bottom_bgView.constant = -SCREEN_WIDTH/375*472;
[view layoutIfNeeded];
[UIView animateWithDuration:0.3 animations:^{
view.bottom_bgView.constant = 0;
[view layoutIfNeeded];
}];
}
- (void)close
{
[UIView animateWithDuration:0.3 animations:^{
self.bottom_bgView.constant = -SCREEN_WIDTH/375*472;
[self layoutIfNeeded];
} completion:^(BOOL finished) {
[self removeFromSuperview];
}];
}
- (void)setSvgaView
{
[self layoutIfNeeded];
self.svgaDisplayView.frame = self.ballImageView.bounds;
}
//
- (IBAction)closeBtnAction:(id)sender {
[self close];
}
//
- (IBAction)giftAnimationBtnAction:(id)sender {
self.giftAnimationBtn.selected = !self.giftAnimationBtn.selected;
[[NSUserDefaults standardUserDefaults] setBool:!self.giftAnimationBtn.selected forKey:@"ClosePetEatAnimation"];
}
//
- (IBAction)rankBtnAction:(id)sender {
}
//
- (IBAction)recordBtnAction:(id)sender {
}
//
- (IBAction)giftBtnAction:(id)sender {
}
//
- (IBAction)ruleBtnAction:(id)sender {
}
//1
- (IBAction)openBtnAction1:(id)sender {
[self openWishAction:1];
}
//10
- (IBAction)openBtnAction2:(id)sender {
[self openWishAction:2];
}
//100
- (IBAction)openBtnAction3:(id)sender {
[self openWishAction:5];
}
///
/// @param canTap
- (void)setWishBtnUserinterface:(BOOL)canTap
{
self.wishBallBtn.userInteractionEnabled = canTap;
self.wishBtn1.userInteractionEnabled = canTap;
self.wishBtn10.userInteractionEnabled = canTap;
self.wishBtn20.userInteractionEnabled = canTap;
}
#pragma mark - Svga
- (void)showWishSvga
{
[self.svgaDisplayView stopAnimation];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
self.ballImageView.hidden = YES;
});
self.svgaDisplayView.imageName = @"room_wish_crystal_animation";
}
- (void)svgaPlayerDidFinishedAnimation:(SVGAPlayer *)player
{
self.isShowingSvga = NO;
self.ballImageView.hidden = NO;
[self checkHadShowResult];
}
#pragma mark - Network
- (void)openWishAction:(NSInteger)type
{
if (self.isRequesting) {
return;
}
self.isRequesting = YES;
if (self.giftAnimationBtn.selected) {
self.isShowingSvga = YES;
[self showWishSvga];
}
[self setWishBtnUserinterface:NO];
// __weak typeof(self) weakSelf = self;
// [JFHttpRequestHelper wish:type success:^(id data) {
// weakSelf.isRequesting = NO;
// weakSelf.models = [data copy];
//
// if (!weakSelf.giftAnimationBtn.selected) {
// [weakSelf checkHadShowResult];
// }
//
// } failure:^(NSNumber *code, NSString *msg) {
// weakSelf.isRequesting = NO;
// [weakSelf setWishBtnUserinterface:YES];
// }];
}
///
- (void)checkHadShowResult
{
if (self.isRequesting) {
return;
}
if (self.models) {
//
[JFRoomWishResultView showWish:self.models];
self.models = nil;
[self setWishBtnUserinterface:YES];
}
}
#pragma mark - setter/getter
- (SVGAImageView *)svgaDisplayView {
if (!_svgaDisplayView) {
_svgaDisplayView = [SVGAImageView new];
_svgaDisplayView.userInteractionEnabled = false;
_svgaDisplayView.alpha = 1;
_svgaDisplayView.autoPlay = YES;
_svgaDisplayView.loops = 1;
_svgaDisplayView.clearsAfterStop = YES;
_svgaDisplayView.delegate = self;
[self.bgView insertSubview:_svgaDisplayView aboveSubview:self.ballImageView];
}
return _svgaDisplayView;
}
@end

View File

@@ -0,0 +1,270 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23504" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
<device id="retina6_1" orientation="portrait" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23506"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view contentMode="scaleToFill" id="iN0-l3-epB" customClass="JFRoomWishView">
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="W6n-CV-CMC">
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<color key="backgroundColor" white="0.0" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<gestureRecognizers/>
<connections>
<outletCollection property="gestureRecognizers" destination="bu2-xF-mwK" appends="YES" id="zrY-UQ-FtD"/>
</connections>
</view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="dHe-PS-KN6">
<rect key="frame" x="0.0" y="375" width="414" height="521"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="HMK-WP-zGN">
<rect key="frame" x="0.0" y="109.5" width="414" height="411.5"/>
<color key="backgroundColor" red="0.086274509803921567" green="0.0039215686274509803" blue="0.1803921568627451" alpha="0.94999999999999996" colorSpace="custom" customColorSpace="calibratedRGB"/>
</imageView>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="room_wish_top.png" translatesAutoresizingMaskIntoConstraints="NO" id="pMW-BP-dDz">
<rect key="frame" x="0.0" y="10" width="414" height="99.5"/>
<constraints>
<constraint firstAttribute="width" secondItem="pMW-BP-dDz" secondAttribute="height" multiplier="25:6" id="Ref-Km-7pH"/>
</constraints>
</imageView>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="room_wish_ball.png" translatesAutoresizingMaskIntoConstraints="NO" id="T4s-Hz-LPW">
<rect key="frame" x="0.0" y="0.0" width="414" height="463.5"/>
<constraints>
<constraint firstAttribute="width" secondItem="T4s-Hz-LPW" secondAttribute="height" multiplier="25:28" id="cKK-3Z-ZS6"/>
</constraints>
</imageView>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="bPN-UK-lwz">
<rect key="frame" x="18" y="418.5" width="116" height="57.5"/>
<state key="normal" image="room_wish_time_1.png"/>
<connections>
<action selector="openBtnAction1:" destination="iN0-l3-epB" eventType="touchUpInside" id="cgn-oR-pZ9"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Mug-go-D8Y">
<rect key="frame" x="149" y="418.5" width="116" height="57.5"/>
<constraints>
<constraint firstAttribute="width" secondItem="Mug-go-D8Y" secondAttribute="height" multiplier="105:52" id="H6n-sL-nhu"/>
</constraints>
<state key="normal" image="room_wish_time_10.png"/>
<connections>
<action selector="openBtnAction2:" destination="iN0-l3-epB" eventType="touchUpInside" id="m5g-Nv-6DI"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="JLl-OG-KPY">
<rect key="frame" x="280" y="418.5" width="116" height="57.5"/>
<state key="normal" image="room_wish_time_20.png"/>
<connections>
<action selector="openBtnAction3:" destination="iN0-l3-epB" eventType="touchUpInside" id="kNN-lL-zbx"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="BHb-Dr-sdf">
<rect key="frame" x="365" y="19.5" width="44" height="44"/>
<constraints>
<constraint firstAttribute="height" constant="44" id="fkb-z4-byY"/>
<constraint firstAttribute="width" constant="44" id="gJO-ft-20j"/>
</constraints>
<state key="normal" image="room_wish_close.png"/>
<connections>
<action selector="closeBtnAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="lLW-o0-uMp"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" selected="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="gKq-6s-nfs">
<rect key="frame" x="15" y="124.5" width="54" height="26"/>
<constraints>
<constraint firstAttribute="height" constant="26" id="NpB-Nt-kb7"/>
<constraint firstAttribute="width" constant="54" id="Rbm-Vp-Bic"/>
</constraints>
<state key="normal" image="room_wish_switch_off.png"/>
<state key="selected" image="room_wish_switch_on.png"/>
<connections>
<action selector="giftAnimationBtnAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="AV5-WP-t4P"/>
</connections>
</button>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="礼物动画" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="07M-ih-UPT">
<rect key="frame" x="20" y="155.5" width="44" height="16"/>
<fontDescription key="fontDescription" name="PingFangSC-Regular" family="PingFang SC" pointSize="11"/>
<color key="textColor" red="0.54117647059999996" green="0.50196078430000002" blue="0.58823529409999997" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="FYl-Ry-fwr">
<rect key="frame" x="117" y="142" width="180" height="180"/>
<constraints>
<constraint firstAttribute="height" constant="180" id="Xo2-XU-rRg"/>
<constraint firstAttribute="width" constant="180" id="cCz-Tu-drL"/>
</constraints>
<connections>
<action selector="openBtnAction1:" destination="iN0-l3-epB" eventType="touchUpInside" id="gwY-S8-idg"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="cQa-xo-1iN">
<rect key="frame" x="347" y="159.5" width="67" height="28"/>
<constraints>
<constraint firstAttribute="height" constant="28" id="Tzw-TZ-mIw"/>
<constraint firstAttribute="width" constant="67" id="nAP-ej-cp0"/>
</constraints>
<state key="normal" image="room_wish_rank"/>
<connections>
<action selector="rankBtnAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="79e-ZA-tcW"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="xdo-jM-oVF">
<rect key="frame" x="347" y="202.5" width="67" height="28"/>
<constraints>
<constraint firstAttribute="width" constant="67" id="ING-Qz-b0M"/>
<constraint firstAttribute="height" constant="28" id="dF8-uT-X8M"/>
</constraints>
<state key="normal" image="room_wish_record"/>
<connections>
<action selector="recordBtnAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="Psm-QJ-fcn"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="2r8-9P-LfY">
<rect key="frame" x="347" y="245.5" width="67" height="28"/>
<constraints>
<constraint firstAttribute="height" constant="28" id="KPI-Uw-vpx"/>
<constraint firstAttribute="width" constant="67" id="SJ1-QX-ILj"/>
</constraints>
<state key="normal" image="room_wish_gift"/>
<connections>
<action selector="giftBtnAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="icX-ll-rfr"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="IJg-Zw-dAb">
<rect key="frame" x="347" y="288.5" width="67" height="28"/>
<constraints>
<constraint firstAttribute="height" constant="28" id="HCV-VH-ijH"/>
<constraint firstAttribute="width" constant="67" id="Zmz-zl-DTB"/>
</constraints>
<state key="normal" image="room_wish_rule"/>
<connections>
<action selector="ruleBtnAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="hxu-Cp-JcH"/>
</connections>
</button>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="AJ4-ke-caT">
<rect key="frame" x="173" y="382.5" width="68.5" height="16"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="mine_recharge_corn" translatesAutoresizingMaskIntoConstraints="NO" id="iu4-S4-x6a">
<rect key="frame" x="0.0" y="0.0" width="16" height="16"/>
<constraints>
<constraint firstAttribute="width" constant="16" id="APy-0p-ZgD"/>
<constraint firstAttribute="height" constant="16" id="XW9-vD-Qcn"/>
</constraints>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="999999" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="RRZ-nf-wxL">
<rect key="frame" x="18" y="-2" width="50.5" height="20"/>
<fontDescription key="fontDescription" name="PingFangSC-Regular" family="PingFang SC" pointSize="14"/>
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstItem="iu4-S4-x6a" firstAttribute="top" secondItem="AJ4-ke-caT" secondAttribute="top" id="5fA-kh-Q54"/>
<constraint firstAttribute="trailing" secondItem="RRZ-nf-wxL" secondAttribute="trailing" id="9GI-72-45O"/>
<constraint firstItem="RRZ-nf-wxL" firstAttribute="leading" secondItem="iu4-S4-x6a" secondAttribute="trailing" constant="2" id="Jjp-7D-3Nh"/>
<constraint firstItem="iu4-S4-x6a" firstAttribute="leading" secondItem="AJ4-ke-caT" secondAttribute="leading" id="TbI-oJ-c8Q"/>
<constraint firstAttribute="bottom" secondItem="iu4-S4-x6a" secondAttribute="bottom" id="e1b-gY-OTF"/>
<constraint firstItem="iu4-S4-x6a" firstAttribute="centerY" secondItem="RRZ-nf-wxL" secondAttribute="centerY" id="r0n-iv-dXC"/>
</constraints>
</view>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstItem="2r8-9P-LfY" firstAttribute="top" secondItem="xdo-jM-oVF" secondAttribute="bottom" constant="15" id="2hk-gP-QmX"/>
<constraint firstItem="T4s-Hz-LPW" firstAttribute="top" secondItem="dHe-PS-KN6" secondAttribute="top" id="2pB-l1-GYZ"/>
<constraint firstItem="pMW-BP-dDz" firstAttribute="leading" secondItem="dHe-PS-KN6" secondAttribute="leading" id="4Z9-96-ULM"/>
<constraint firstItem="bPN-UK-lwz" firstAttribute="height" secondItem="Mug-go-D8Y" secondAttribute="height" id="59k-iE-moD"/>
<constraint firstItem="xdo-jM-oVF" firstAttribute="top" secondItem="cQa-xo-1iN" secondAttribute="bottom" constant="15" id="5Sx-yi-eK3"/>
<constraint firstItem="gKq-6s-nfs" firstAttribute="leading" secondItem="dHe-PS-KN6" secondAttribute="leading" constant="15" id="5nd-rJ-i3y"/>
<constraint firstItem="JLl-OG-KPY" firstAttribute="width" secondItem="Mug-go-D8Y" secondAttribute="width" id="6kI-Wc-XgT"/>
<constraint firstItem="Mug-go-D8Y" firstAttribute="centerX" secondItem="dHe-PS-KN6" secondAttribute="centerX" id="9Wh-jH-6Fj"/>
<constraint firstItem="FYl-Ry-fwr" firstAttribute="centerY" secondItem="T4s-Hz-LPW" secondAttribute="centerY" id="Aal-mM-FST"/>
<constraint firstItem="cQa-xo-1iN" firstAttribute="top" secondItem="pMW-BP-dDz" secondAttribute="bottom" constant="50" id="BTt-na-JCL"/>
<constraint firstAttribute="trailing" secondItem="pMW-BP-dDz" secondAttribute="trailing" id="Eag-Ze-fK0"/>
<constraint firstAttribute="trailing" secondItem="T4s-Hz-LPW" secondAttribute="trailing" id="H0G-0f-WoI"/>
<constraint firstItem="Mug-go-D8Y" firstAttribute="width" secondItem="dHe-PS-KN6" secondAttribute="width" multiplier="0.28" id="KgH-2k-lef"/>
<constraint firstItem="07M-ih-UPT" firstAttribute="top" secondItem="gKq-6s-nfs" secondAttribute="bottom" constant="5" id="Tzt-hO-TaN"/>
<constraint firstAttribute="trailing" secondItem="BHb-Dr-sdf" secondAttribute="trailing" constant="5" id="VFr-jk-YYP"/>
<constraint firstItem="AJ4-ke-caT" firstAttribute="centerX" secondItem="dHe-PS-KN6" secondAttribute="centerX" id="Vrr-8c-Ofs"/>
<constraint firstItem="bPN-UK-lwz" firstAttribute="centerY" secondItem="Mug-go-D8Y" secondAttribute="centerY" id="WaB-EE-EJ4"/>
<constraint firstAttribute="width" secondItem="dHe-PS-KN6" secondAttribute="height" multiplier="375:472" id="YPA-o4-oyd"/>
<constraint firstItem="Mug-go-D8Y" firstAttribute="leading" secondItem="bPN-UK-lwz" secondAttribute="trailing" constant="15" id="bPO-oS-LVX"/>
<constraint firstItem="07M-ih-UPT" firstAttribute="centerX" secondItem="gKq-6s-nfs" secondAttribute="centerX" id="cHS-Ri-bz6"/>
<constraint firstItem="IJg-Zw-dAb" firstAttribute="top" secondItem="2r8-9P-LfY" secondAttribute="bottom" constant="15" id="eie-K8-fcK"/>
<constraint firstItem="JLl-OG-KPY" firstAttribute="leading" secondItem="Mug-go-D8Y" secondAttribute="trailing" constant="15" id="f9S-bq-Nle"/>
<constraint firstItem="T4s-Hz-LPW" firstAttribute="leading" secondItem="dHe-PS-KN6" secondAttribute="leading" id="fA2-9b-7ZI"/>
<constraint firstItem="JLl-OG-KPY" firstAttribute="centerY" secondItem="Mug-go-D8Y" secondAttribute="centerY" id="faH-b1-h6u"/>
<constraint firstAttribute="trailing" secondItem="IJg-Zw-dAb" secondAttribute="trailing" id="fps-cf-Gfq"/>
<constraint firstAttribute="bottom" secondItem="JLl-OG-KPY" secondAttribute="bottom" constant="45" id="gbd-6K-hOS"/>
<constraint firstAttribute="trailing" secondItem="xdo-jM-oVF" secondAttribute="trailing" id="gdZ-Wm-iuh"/>
<constraint firstItem="pMW-BP-dDz" firstAttribute="top" secondItem="dHe-PS-KN6" secondAttribute="top" constant="10" id="hKr-2o-d6u"/>
<constraint firstAttribute="trailing" secondItem="cQa-xo-1iN" secondAttribute="trailing" id="ipg-vy-Yqk"/>
<constraint firstAttribute="bottom" secondItem="HMK-WP-zGN" secondAttribute="bottom" id="kva-vj-yez"/>
<constraint firstItem="JLl-OG-KPY" firstAttribute="height" secondItem="Mug-go-D8Y" secondAttribute="height" id="lMM-dG-RZr"/>
<constraint firstItem="bPN-UK-lwz" firstAttribute="width" secondItem="Mug-go-D8Y" secondAttribute="width" id="m3F-aR-oPv"/>
<constraint firstItem="gKq-6s-nfs" firstAttribute="top" secondItem="pMW-BP-dDz" secondAttribute="bottom" constant="15" id="pGo-hs-PHM"/>
<constraint firstItem="HMK-WP-zGN" firstAttribute="top" secondItem="pMW-BP-dDz" secondAttribute="bottom" id="t68-C2-D8P"/>
<constraint firstAttribute="trailing" secondItem="2r8-9P-LfY" secondAttribute="trailing" id="tB4-Gf-ZQ5"/>
<constraint firstAttribute="trailing" secondItem="HMK-WP-zGN" secondAttribute="trailing" id="vOZ-JE-jdK"/>
<constraint firstItem="Mug-go-D8Y" firstAttribute="top" secondItem="AJ4-ke-caT" secondAttribute="bottom" constant="20" id="vzN-bk-Fgb"/>
<constraint firstItem="FYl-Ry-fwr" firstAttribute="centerX" secondItem="T4s-Hz-LPW" secondAttribute="centerX" id="wxd-WP-LmO"/>
<constraint firstItem="HMK-WP-zGN" firstAttribute="leading" secondItem="dHe-PS-KN6" secondAttribute="leading" id="xqW-Tr-Y7z"/>
<constraint firstItem="BHb-Dr-sdf" firstAttribute="centerY" secondItem="pMW-BP-dDz" secondAttribute="centerY" constant="-18" id="yYI-hq-Ot4"/>
</constraints>
</view>
</subviews>
<viewLayoutGuide key="safeArea" id="vUN-kp-3ea"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstItem="dHe-PS-KN6" firstAttribute="trailing" secondItem="vUN-kp-3ea" secondAttribute="trailing" id="4ez-TP-elN"/>
<constraint firstItem="vUN-kp-3ea" firstAttribute="trailing" secondItem="W6n-CV-CMC" secondAttribute="trailing" id="L0w-NZ-j3p"/>
<constraint firstAttribute="bottom" secondItem="W6n-CV-CMC" secondAttribute="bottom" id="Lx8-qg-vkH"/>
<constraint firstItem="dHe-PS-KN6" firstAttribute="leading" secondItem="vUN-kp-3ea" secondAttribute="leading" id="Mzv-kc-dCu"/>
<constraint firstAttribute="bottom" secondItem="dHe-PS-KN6" secondAttribute="bottom" id="pe5-30-V13"/>
<constraint firstItem="W6n-CV-CMC" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="y1J-f9-VeB"/>
<constraint firstItem="W6n-CV-CMC" firstAttribute="leading" secondItem="vUN-kp-3ea" secondAttribute="leading" id="yXO-N7-Q1N"/>
</constraints>
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
<connections>
<outlet property="ballImageView" destination="T4s-Hz-LPW" id="zvz-hx-75r"/>
<outlet property="bgView" destination="dHe-PS-KN6" id="gQI-fP-HcJ"/>
<outlet property="bottom_bgView" destination="pe5-30-V13" id="YUK-rV-t0A"/>
<outlet property="giftAnimationBtn" destination="gKq-6s-nfs" id="o13-hc-RYL"/>
<outlet property="goldBalanceLabel" destination="RRZ-nf-wxL" id="Rh6-bK-G8e"/>
<outlet property="wishBallBtn" destination="FYl-Ry-fwr" id="Adp-xU-fqL"/>
<outlet property="wishBtn1" destination="bPN-UK-lwz" id="YEb-0S-5Vs"/>
<outlet property="wishBtn10" destination="Mug-go-D8Y" id="Shg-TA-KRl"/>
<outlet property="wishBtn20" destination="JLl-OG-KPY" id="CPC-XR-dz3"/>
</connections>
<point key="canvasLocation" x="136.23188405797103" y="114.50892857142857"/>
</view>
<tapGestureRecognizer id="bu2-xF-mwK">
<connections>
<action selector="closeBtnAction:" destination="iN0-l3-epB" id="jnU-pn-9WF"/>
</connections>
</tapGestureRecognizer>
</objects>
<resources>
<image name="mine_recharge_corn" width="20" height="20"/>
<image name="room_wish_ball.png" width="375" height="420"/>
<image name="room_wish_close.png" width="24" height="24"/>
<image name="room_wish_gift" width="67" height="28"/>
<image name="room_wish_rank" width="67" height="28"/>
<image name="room_wish_record" width="67" height="28"/>
<image name="room_wish_rule" width="67" height="28"/>
<image name="room_wish_switch_off.png" width="54" height="26"/>
<image name="room_wish_switch_on.png" width="54" height="26"/>
<image name="room_wish_time_1.png" width="105" height="52"/>
<image name="room_wish_time_10.png" width="105" height="52"/>
<image name="room_wish_time_20.png" width="105" height="52"/>
<image name="room_wish_top.png" width="375" height="90"/>
</resources>
</document>

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 707 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB