提交
@@ -28,8 +28,9 @@
|
||||
#import "QXGiftDriftView.h"
|
||||
#import "QXMeetActivityDriftView.h"
|
||||
#import "QXRedPacketDriftView.h"
|
||||
#import "QXRoomPasswordView.h"
|
||||
|
||||
@interface QXGlobal()
|
||||
@interface QXGlobal()<QXRoomPasswordViewDelegate>
|
||||
@property (nonatomic,assign)BOOL isLogin;
|
||||
|
||||
|
||||
@@ -291,7 +292,7 @@
|
||||
}
|
||||
weakSelf.isClickJoinRoom = YES;
|
||||
[[QXRoomMessageManager shared] joinGroupWithRoomId:roomId];
|
||||
[QXMineNetwork joinRoomWithRoomId:roomId successBlock:^(QXRoomModel * _Nonnull roomModel) {
|
||||
[QXMineNetwork joinRoomWithRoomId:roomId room_password:@"" successBlock:^(QXRoomModel * _Nonnull roomModel) {
|
||||
[UIApplication sharedApplication].idleTimerDisabled = YES;
|
||||
weakSelf.isClickJoinRoom = NO;
|
||||
weakSelf.roomVC = [[QXRoomViewController alloc] init];
|
||||
@@ -327,7 +328,7 @@
|
||||
}
|
||||
}
|
||||
[[QXRoomMessageManager shared] joinGroupWithRoomId:roomId];
|
||||
[QXMineNetwork joinRoomWithRoomId:roomId successBlock:^(QXRoomModel * _Nonnull roomModel) {
|
||||
[QXMineNetwork joinRoomWithRoomId:roomId room_password:@"" successBlock:^(QXRoomModel * _Nonnull roomModel) {
|
||||
weakSelf.isClickJoinRoom = NO;
|
||||
if (weakSelf.roomId && ![weakSelf.roomId isEqualToString:roomId]) {
|
||||
[weakSelf quitRoomWithRoomId:weakSelf.roomId removeListener:NO];
|
||||
@@ -353,6 +354,12 @@
|
||||
} roomErrorBlock:^(NSString * _Nonnull roomId, NSString * _Nonnull msg) {
|
||||
weakSelf.isClickJoinRoom = NO;
|
||||
[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) {
|
||||
weakSelf.isClickJoinRoom = NO;
|
||||
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{
|
||||
[self stopKeepTimer];
|
||||
|
||||
@@ -77,7 +77,7 @@
|
||||
}
|
||||
-(void)getData{
|
||||
MJWeakSelf
|
||||
[QXMineNetwork getDressTypeListSuccessBlock:^(NSArray<QXUserDressTypeModel *> * _Nonnull list) {
|
||||
[QXMineNetwork getDressTypeListWithFrom:@"2" successBlock:^(NSArray<QXUserDressTypeModel *> * _Nonnull list) {
|
||||
[weakSelf.dataArray removeAllObjects];
|
||||
[weakSelf.dataArray addObjectsFromArray:list];
|
||||
for (QXUserDressTypeModel*model in list) {
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface QXBackpackSubViewController : QXBaseViewController<JXCategoryListContentViewDelegate>
|
||||
/// 0背包道具 1背包收入 2背包支出
|
||||
/// 0背包道具 1背包收入 2背包支出 3热度卡
|
||||
@property (nonatomic,assign)NSInteger type;
|
||||
|
||||
@end
|
||||
|
||||
@@ -28,8 +28,16 @@
|
||||
if (self.type == 0) {
|
||||
[self getBagList];
|
||||
self.collectionView.frame = CGRectMake(0, 12, SCREEN_WIDTH, SCREEN_HEIGHT-NavContentHeight-44-10);
|
||||
}else{
|
||||
[self getGiftRecordListIsIncome:self.type == 1];
|
||||
}else if(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.backgroundColor = [UIColor whiteColor];
|
||||
self.collectionView.frame = CGRectMake(16, 12, SCREEN_WIDTH-32, SCREEN_HEIGHT-NavContentHeight-44-10);
|
||||
@@ -95,7 +103,7 @@
|
||||
return self.dataArray.count;
|
||||
}
|
||||
-(__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];
|
||||
cell.roomGiftModel = self.dataArray[indexPath.row];
|
||||
cell.cellType = QXGiftCellTypeBackpack;
|
||||
@@ -112,7 +120,7 @@
|
||||
}
|
||||
}
|
||||
-(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;
|
||||
return CGSizeMake(width, width/100*136);
|
||||
}else{
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
}
|
||||
- (void)initSubViews{
|
||||
self.view.backgroundColor = [UIColor whiteColor];
|
||||
self.titles = @[QXText(@"背包道具"),QXText(@"背包收入"),QXText(@"背包支出")];
|
||||
self.titles = @[QXText(@"背包道具"),@"热度卡",QXText(@"背包收入"),QXText(@"背包支出")];
|
||||
self.listVCArray = [NSMutableArray array];
|
||||
self.categoryView = [[JXCategoryTitleView alloc] init];
|
||||
self.categoryView.frame = CGRectMake(15, kSafeAreaTop+44, SCREEN_WIDTH-30, 44);
|
||||
|
||||
@@ -14,6 +14,8 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
@property(nonatomic,assign)BOOL isLight;
|
||||
/// 数据源
|
||||
@property(nonatomic,strong)NSArray<QXUserGiftWallModel*> *giftArray;
|
||||
/// 用户id
|
||||
@property (nonatomic,strong)NSString*userId;
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
|
||||
#import "QXGiftWallSubViewController.h"
|
||||
#import "QXMineGiftWallCell.h"
|
||||
#import "QXGiftWallDetailView.h"
|
||||
|
||||
@interface QXGiftWallSubViewController ()<UICollectionViewDelegate,UICollectionViewDataSource>
|
||||
@property (nonatomic,strong)UICollectionView *collectionView;
|
||||
@@ -58,5 +59,14 @@
|
||||
cell.model = self.giftArray[indexPath.row];
|
||||
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
|
||||
|
||||
@@ -92,8 +92,10 @@
|
||||
}
|
||||
-(id<JXCategoryListContentViewDelegate>)listContainerView:(JXCategoryListContainerView *)listContainerView initListForIndex:(NSInteger)index{
|
||||
if (index == 0) {
|
||||
self.lightVC.userId = self.userId;
|
||||
return self.lightVC;
|
||||
}else{
|
||||
self.grayVC.userId = self.userId;
|
||||
return self.grayVC;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
}
|
||||
-(void)getData{
|
||||
MJWeakSelf
|
||||
[QXMineNetwork getDressTypeListSuccessBlock:^(NSArray<QXUserDressTypeModel *> * _Nonnull list) {
|
||||
[QXMineNetwork getDressTypeListWithFrom:@"2" successBlock:^(NSArray<QXUserDressTypeModel *> * _Nonnull list) {
|
||||
[weakSelf.dataArray removeAllObjects];
|
||||
[weakSelf.dataArray addObjectsFromArray:list];
|
||||
for (QXUserDressTypeModel*model in list) {
|
||||
|
||||
@@ -242,9 +242,11 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
/**
|
||||
装扮类型列表
|
||||
type 1 道具商城 2个性装扮
|
||||
*/
|
||||
+(void)getDressTypeListSuccessBlock:(void (^)(NSArray<QXUserDressTypeModel*>* list))successBlock
|
||||
failBlock:(void (^)(NSError * error, NSString * msg))failBlock;
|
||||
+(void)getDressTypeListWithFrom:(NSString*)type
|
||||
successBlock:(void (^)(NSArray<QXUserDressTypeModel*>* list))successBlock
|
||||
failBlock:(void (^)(NSError * error, NSString * msg))failBlock;
|
||||
|
||||
|
||||
/**
|
||||
@@ -300,6 +302,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
+(void)beforeJoinRoomWithRoomId:(NSString *)room_id
|
||||
successBlock:(void (^)(NSDictionary* dict))successBlock
|
||||
roomErrorBlock:(void (^)(NSString * roomId, NSString * msg))roomErrorBlock
|
||||
roomNeedPasswordBlock:(void (^)(NSString * msg))roomNeedPasswordBlock
|
||||
failBlock:(void (^)(NSError * error, NSString * msg))failBlock;
|
||||
|
||||
|
||||
@@ -307,6 +310,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
进入房间
|
||||
*/
|
||||
+(void)joinRoomWithRoomId:(NSString*)room_id
|
||||
room_password:(NSString*)room_password
|
||||
successBlock:(void (^)(QXRoomModel* roomModel))successBlock
|
||||
roomErrorBlock:(void (^)(NSString * roomId, NSString * msg))roomErrorBlock
|
||||
failBlock:(void (^)(NSError * error, NSString * msg))failBlock;
|
||||
@@ -1604,6 +1608,16 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
user_id:(NSString*)user_id
|
||||
successBlock:(void (^)(NSDictionary* dict))successBlock
|
||||
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
|
||||
|
||||
|
||||
|
||||
@@ -487,8 +487,10 @@
|
||||
/**
|
||||
获取装扮类型列表
|
||||
*/
|
||||
+(void)getDressTypeListSuccessBlock:(void (^)(NSArray<QXUserDressTypeModel *> * _Nonnull))successBlock failBlock:(void (^)(NSError * _Nonnull, NSString * _Nonnull))failBlock{
|
||||
[[QXRequset shareInstance] getWithUrl:QXDressTypeList parameters:@{} needCache:NO success:^(id responseObject) {
|
||||
+(void)getDressTypeListWithFrom:(NSString*)type
|
||||
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) {
|
||||
NSArray *list = [NSArray yy_modelArrayWithClass:[QXUserDressTypeModel class] json:responseObject[@"data"]];
|
||||
successBlock(list);
|
||||
@@ -591,6 +593,7 @@
|
||||
+(void)beforeJoinRoomWithRoomId:(NSString *)room_id
|
||||
successBlock:(void (^)(NSDictionary* dict))successBlock
|
||||
roomErrorBlock:(void (^)(NSString * roomId, NSString * msg))roomErrorBlock
|
||||
roomNeedPasswordBlock:(void (^)(NSString * msg))roomNeedPasswordBlock
|
||||
failBlock:(void (^)(NSError * error, NSString * msg))failBlock{
|
||||
[[QXRequset shareInstance] postWithUrl:QXBeforeJoinRoom parameters:@{@"room_id":room_id} needCache:NO success:^(id responseObject) {
|
||||
int code = [responseObject[@"code"] intValue];
|
||||
@@ -605,6 +608,11 @@
|
||||
if (roomErrorBlock) {
|
||||
roomErrorBlock(roomId,content);
|
||||
}
|
||||
}if(code == 101){
|
||||
NSString* message = [NSString stringWithFormat:@"%@",responseObject[@"msg"]];
|
||||
if (roomNeedPasswordBlock) {
|
||||
roomNeedPasswordBlock(message);
|
||||
}
|
||||
}else{
|
||||
if (successBlock) {
|
||||
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 =@{
|
||||
@"room_id":room_id?:@""
|
||||
@"room_id":room_id?:@"",
|
||||
@"room_password":room_password?:@""
|
||||
};
|
||||
[[QXRequset shareInstance] postWithUrl:QXJoinRoom parameters:parameters needCache:NO success:^(id responseObject) {
|
||||
int code = [responseObject[@"code"] intValue];
|
||||
@@ -3290,4 +3299,29 @@
|
||||
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
|
||||
|
||||
@@ -157,7 +157,7 @@
|
||||
self.fullEffectView.hidden = NO;
|
||||
[self.fullEffectView previewEffectWith:self.model.play_image];
|
||||
}
|
||||
if ([self.typeId isEqualToString:@"12"]) {
|
||||
if ([self.typeId isEqualToString:@"12"] || [self.typeId isEqualToString:@"13"]) {
|
||||
self.titleArray = @[@"商品名称",@"商品单价",@"购买次数",@"商品总价"];
|
||||
}else{
|
||||
self.titleArray = @[@"商品名称",@"商品价格",@"有效期至",@"购买时长"];
|
||||
|
||||
@@ -31,6 +31,8 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
@property (nonatomic, assign)BRDatePickerMode pickerMode;
|
||||
@property (nonatomic,strong)NSDate* beginDate;
|
||||
@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(^selectedDateBlock)(NSString*startTime,NSDate*startDate,NSString*endTime,NSDate*endDate);
|
||||
-(void)show;
|
||||
|
||||
@@ -338,11 +338,19 @@
|
||||
}
|
||||
-(void)setBeginDate:(NSDate *)beginDate{
|
||||
_beginDate = beginDate;
|
||||
[self.beginTimeBtn setTitle:[NSString stringWithFormat:@"%02ld:%02ld",(long)beginDate.br_hour,beginDate.br_minute] forState:(UIControlStateNormal)];
|
||||
if (self.pickerMode == BRDatePickerModeHM) {
|
||||
[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{
|
||||
_endDate = endDate;
|
||||
[self.endTimeBtn setTitle:[NSString stringWithFormat:@"%02ld:%02ld",(long)endDate.br_hour,endDate.br_minute] forState:(UIControlStateNormal)];
|
||||
if (self.pickerMode == BRDatePickerModeHM) {
|
||||
[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{
|
||||
@@ -401,10 +409,12 @@
|
||||
MJWeakSelf
|
||||
_pickerView.resultBlock = ^(NSDate * _Nullable selectDate, NSString * _Nullable selectValue) {
|
||||
if (weakSelf.beginTimeBtn.selected) {
|
||||
weakSelf.startSelectValue = selectValue;
|
||||
[weakSelf.beginTimeBtn setTitle:selectValue forState:(UIControlStateNormal)];
|
||||
weakSelf.beginDate = selectDate;
|
||||
}else{
|
||||
[weakSelf.endTimeBtn setTitle:selectValue forState:(UIControlStateNormal)];
|
||||
weakSelf.endSelectValue = selectValue;
|
||||
weakSelf.endDate = selectDate;
|
||||
}
|
||||
};
|
||||
|
||||
25
QXLive/Mine(音域)/View/礼物墙/QXGiftWallDetailView.h
Normal 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
|
||||
233
QXLive/Mine(音域)/View/礼物墙/QXGiftWallDetailView.m
Normal 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
|
||||
@@ -55,7 +55,7 @@
|
||||
self.userCountLabel.text = [NSString stringWithFormat:@"等%@人",model.top_users_count];
|
||||
|
||||
if (model.top_users.count > 0) {
|
||||
self.countLabel.hidden = NO;
|
||||
// self.countLabel.hidden = NO;
|
||||
self.userCountLabel.hidden = NO;
|
||||
QXUserHomeModel *md1;
|
||||
QXUserHomeModel *md2;
|
||||
@@ -89,7 +89,7 @@
|
||||
}
|
||||
|
||||
}else{
|
||||
self.countLabel.hidden = YES;
|
||||
// self.countLabel.hidden = YES;
|
||||
self.userCountLabel.hidden = YES;
|
||||
self.userImageView1.hidden = YES;
|
||||
self.userImageView2.hidden = YES;
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</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"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="18" id="SU0-l9-dWa"/>
|
||||
@@ -56,19 +56,31 @@
|
||||
</userDefinedRuntimeAttribute>
|
||||
</userDefinedRuntimeAttributes>
|
||||
</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"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="18" id="Kwg-ZJ-I5s"/>
|
||||
<constraint firstAttribute="height" constant="18" id="xl5-Rc-fQg"/>
|
||||
</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 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"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="18" id="n8I-xi-ccY"/>
|
||||
<constraint firstAttribute="height" constant="18" id="pmp-Ws-KWh"/>
|
||||
</constraints>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="boolean" keyPath="layer.masksToBounds" value="YES"/>
|
||||
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
|
||||
<integer key="value" value="9"/>
|
||||
</userDefinedRuntimeAttribute>
|
||||
</userDefinedRuntimeAttributes>
|
||||
</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">
|
||||
<rect key="frame" x="90" y="214.66666666666666" width="70" height="11"/>
|
||||
|
||||
@@ -207,6 +207,29 @@ CGFloat labelHeight = 63;
|
||||
break;
|
||||
case QXPasswordViewTypeRoom:{
|
||||
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;
|
||||
default:
|
||||
|
||||
@@ -628,4 +628,6 @@ static NSString * QXRoomServicesUserId = @"api/banner/app_customer_service";
|
||||
static NSString * QXRoomSetTime = @"api/Room/set_room_business_time";
|
||||
/// pk闭麦
|
||||
static NSString * QXRoomPKCloseMic = @"api/RoomPk/close_pk_mic";
|
||||
/// 礼物墙用户列表
|
||||
static NSString * QXUserGiftWallUserList = @"api/User/gift_wall_user_list";
|
||||
#endif /* Api_h */
|
||||
|
||||
@@ -320,7 +320,7 @@ QXUpSeatViewDelegate
|
||||
[[QXRoomMessageManager shared] joinGroupWithRoomId:self.roomId];
|
||||
QXGlobal.shareGlobal.roomId = self.roomId;
|
||||
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 resetSubviews];
|
||||
[weakSelf configRoomDataIsJoin:YES];
|
||||
|
||||
25
QXLive/Room(房间)/View/房间密码/QXRoomPasswordView.h
Normal 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
|
||||
126
QXLive/Room(房间)/View/房间密码/QXRoomPasswordView.m
Normal 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
|
||||
@@ -90,6 +90,9 @@
|
||||
if (emoji.children.count>0) {
|
||||
NSUInteger randomIndex = arc4random() % emoji.children.count;
|
||||
QXEmojiChirldModel *md = emoji.children[randomIndex];
|
||||
#if DEBUG
|
||||
md = emoji.children[0];
|
||||
#endif
|
||||
result = [[QXEmojiModel alloc] init];
|
||||
result.image = md.image;
|
||||
result.animate_image = emoji.animate_image;
|
||||
|
||||
@@ -783,7 +783,7 @@
|
||||
-(QXDatePickerView *)pickerView{
|
||||
if (!_pickerView) {
|
||||
_pickerView = [[QXDatePickerView alloc] init];
|
||||
_pickerView.pickerView.pickerMode = BRDatePickerModeHM;
|
||||
_pickerView.pickerMode = BRDatePickerModeHM;
|
||||
_pickerView.pickerView.maxDate = [NSDate br_setHour:23 minute:59];
|
||||
_pickerView.pickerView.minDate = [NSDate br_setHour:00 minute:00];
|
||||
_pickerView.pickerView.selectDate = [NSDate br_setHour:00 minute:00];
|
||||
|
||||
18
QXLive/活动/许愿水晶/JFRoomResultItemView.h
Executable 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
|
||||
42
QXLive/活动/许愿水晶/JFRoomResultItemView.m
Executable 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
|
||||
89
QXLive/活动/许愿水晶/JFRoomResultItemView.xib
Executable 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>
|
||||
18
QXLive/活动/许愿水晶/JFRoomWishResultView.h
Executable 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
|
||||
107
QXLive/活动/许愿水晶/JFRoomWishResultView.m
Executable 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
|
||||
66
QXLive/活动/许愿水晶/JFRoomWishResultView.xib
Executable 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>
|
||||
18
QXLive/活动/许愿水晶/JFRoomWishView.h
Executable 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
|
||||
212
QXLive/活动/许愿水晶/JFRoomWishView.m
Executable 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
|
||||
270
QXLive/活动/许愿水晶/JFRoomWishView.xib
Executable 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>
|
||||
BIN
QXLive/活动/许愿水晶/Resource/btn_guize@2x.png
Executable file
|
After Width: | Height: | Size: 2.5 KiB |
BIN
QXLive/活动/许愿水晶/Resource/btn_guize@3x.png
Executable file
|
After Width: | Height: | Size: 3.7 KiB |
BIN
QXLive/活动/许愿水晶/Resource/room_wish_ball@2x.png
Executable file
|
After Width: | Height: | Size: 48 KiB |
BIN
QXLive/活动/许愿水晶/Resource/room_wish_ball@3x.png
Executable file
|
After Width: | Height: | Size: 96 KiB |
BIN
QXLive/活动/许愿水晶/Resource/room_wish_close@2x.png
Executable file
|
After Width: | Height: | Size: 707 B |
BIN
QXLive/活动/许愿水晶/Resource/room_wish_close@3x.png
Executable file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
QXLive/活动/许愿水晶/Resource/room_wish_crystal_animation.svga
Executable file
BIN
QXLive/活动/许愿水晶/Resource/room_wish_switch_off@2x.png
Executable file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
QXLive/活动/许愿水晶/Resource/room_wish_switch_off@3x.png
Executable file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
QXLive/活动/许愿水晶/Resource/room_wish_switch_on@2x.png
Executable file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
QXLive/活动/许愿水晶/Resource/room_wish_switch_on@3x.png
Executable file
|
After Width: | Height: | Size: 3.8 KiB |
BIN
QXLive/活动/许愿水晶/Resource/room_wish_time_10@2x.png
Executable file
|
After Width: | Height: | Size: 5.2 KiB |
BIN
QXLive/活动/许愿水晶/Resource/room_wish_time_1@2x.png
Executable file
|
After Width: | Height: | Size: 5.0 KiB |
BIN
QXLive/活动/许愿水晶/Resource/room_wish_time_20@2x.png
Executable file
|
After Width: | Height: | Size: 8.8 KiB |
BIN
QXLive/活动/许愿水晶/Resource/room_wish_top@2x.png
Executable file
|
After Width: | Height: | Size: 24 KiB |
BIN
QXLive/活动/许愿水晶/Resource/room_wish_top@3x.png
Executable file
|
After Width: | Height: | Size: 41 KiB |