This commit is contained in:
启星
2025-11-28 22:43:06 +08:00
parent 8913ea6f48
commit 7eb4f8d3b8
197 changed files with 7315 additions and 666 deletions

View File

@@ -130,20 +130,12 @@
self.nameLabel.shimmerColor = [UIColor colorWithHexString:self.model.nickname_color]; self.nameLabel.shimmerColor = [UIColor colorWithHexString:self.model.nickname_color];
[self.nameLabel startShimmer]; [self.nameLabel startShimmer];
} }
// else{
// self.nameLabel.shimmerColor = [UIColor clearColor];
// [self.nameLabel stopShimmer];
// }
} }
-(void)nameStopAnimate{ -(void)nameStopAnimate{
if ([self.model.nickname_color isExist]) { if ([self.model.nickname_color isExist]) {
self.nameLabel.shimmerColor = [UIColor colorWithHexString:self.model.nickname_color]; self.nameLabel.shimmerColor = [UIColor colorWithHexString:self.model.nickname_color];
[self.nameLabel stopShimmer]; [self.nameLabel stopShimmer];
} }
// else{
// self.nameLabel.shimmerColor = [UIColor clearColor];
// [self.nameLabel stopShimmer];
// }
} }
-(void)previewPhotoWithCurrentIndex:(NSInteger)currentIndex{ -(void)previewPhotoWithCurrentIndex:(NSInteger)currentIndex{

View File

@@ -53,7 +53,7 @@
@property (nonatomic,strong)UIButton *skyDownBtn; @property (nonatomic,strong)UIButton *skyDownBtn;
@property (nonatomic,strong)QXNewPeoplePopView *nPeopleRechargeView; @property (nonatomic,strong)QXNewPeoplePopView *nPeopleRechargeView;
@property (nonatomic,strong)QXAppstoreHomeView *appStoreView; //@property (nonatomic,strong)QXAppstoreHomeView *appStoreView;
@property (nonatomic,strong)SDCycleScrollView *rechargePermissionView; @property (nonatomic,strong)SDCycleScrollView *rechargePermissionView;
@property (nonatomic,strong)NSMutableArray *rechargePermissionArray; @property (nonatomic,strong)NSMutableArray *rechargePermissionArray;
@@ -139,8 +139,8 @@
// }]; // }];
[self getBanner]; [self getBanner];
// [self getRechargePermission]; // [self getRechargePermission];
self.appStoreView.hidden = YES; // self.appStoreView.hidden = YES;
[self.view addSubview:self.appStoreView]; // [self.view addSubview:self.appStoreView];
self.rechargePermissionView = [SDCycleScrollView cycleScrollViewWithFrame:CGRectMake(SCREEN_WIDTH-80-17, SCREEN_HEIGHT-(TabbarContentHeight+90+80), 80, 80) delegate:self placeholderImage:nil]; self.rechargePermissionView = [SDCycleScrollView cycleScrollViewWithFrame:CGRectMake(SCREEN_WIDTH-80-17, SCREEN_HEIGHT-(TabbarContentHeight+90+80), 80, 80) delegate:self placeholderImage:nil];
self.rechargePermissionView.pageControlBottomOffset = -15; self.rechargePermissionView.pageControlBottomOffset = -15;
@@ -402,11 +402,11 @@
@strongify(self) @strongify(self)
[self.dataArray removeAllObjects]; [self.dataArray removeAllObjects];
[self.dataArray addObjectsFromArray:list]; [self.dataArray addObjectsFromArray:list];
if (isAppStore) { // if (isAppStore) {
self.appStoreView.hidden = NO; // self.appStoreView.hidden = NO;
}else{ // }else{
self.appStoreView.hidden = YES; // self.appStoreView.hidden = YES;
} // }
// weakSelf.appStoreView.dataArray = list; // weakSelf.appStoreView.dataArray = list;
self.topView.dataArray = list; self.topView.dataArray = list;
} failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) { } failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) {
@@ -424,7 +424,7 @@
} }
[self.bannerArry removeAllObjects]; [self.bannerArry removeAllObjects];
[self.bannerArry addObjectsFromArray:list]; [self.bannerArry addObjectsFromArray:list];
self.appStoreView.bannerArray = list; // self.appStoreView.bannerArray = list;
self.bannerScrollView.imageURLStringsGroup = arr; self.bannerScrollView.imageURLStringsGroup = arr;
} failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) { } failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) {
@@ -671,12 +671,12 @@
return _rechargePermissionArray; return _rechargePermissionArray;
} }
-(QXAppstoreHomeView *)appStoreView{ //-(QXAppstoreHomeView *)appStoreView{
if (!_appStoreView) { // if (!_appStoreView) {
_appStoreView = [[QXAppstoreHomeView alloc] initWithFrame:CGRectMake(0, NavContentHeight, SCREEN_WIDTH, SCREEN_HEIGHT-NavContentHeight-TabbarContentHeight)]; // _appStoreView = [[QXAppstoreHomeView alloc] initWithFrame:CGRectMake(0, NavContentHeight, SCREEN_WIDTH, SCREEN_HEIGHT-NavContentHeight-TabbarContentHeight)];
} // }
return _appStoreView; // return _appStoreView;
} //}
-(void)dealloc{ -(void)dealloc{
[[NSNotificationCenter defaultCenter] removeObserver:self]; [[NSNotificationCenter defaultCenter] removeObserver:self];
} }

View File

@@ -19,4 +19,8 @@ NS_ASSUME_NONNULL_BEGIN
@end @end
@interface QXHeartBeatSpaceListModel : NSObject
@end
NS_ASSUME_NONNULL_END NS_ASSUME_NONNULL_END

View File

@@ -23,6 +23,7 @@
} }
@end @end
@implementation QXHeartBeatSpaceListModel
@end

View File

@@ -530,11 +530,12 @@
showToast(QXText(@"请输入正确的手机号码")); showToast(QXText(@"请输入正确的手机号码"));
return; return;
} }
sender.userInteractionEnabled = NO;
MJWeakSelf MJWeakSelf
[QXLoginNetwork getSmscodeWithMobile:self.accountTextField.textField.text type:GetSmscodeTypeLogin successBlock:^(id _Nonnull responseObject) { [QXLoginNetwork getSmscodeWithMobile:self.accountTextField.textField.text type:GetSmscodeTypeLogin successBlock:^(id _Nonnull responseObject) {
[weakSelf.codeTextField startTimeDown]; [weakSelf.codeTextField startTimeDown];
} failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) { } failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) {
sender.userInteractionEnabled = YES;
}]; }];
} }

View File

@@ -260,6 +260,9 @@
__block int timeCount = 60; __block int timeCount = 60;
_timer = [QXTimer scheduledTimerWithTimeInterval:1 repeats:YES queue:dispatch_get_main_queue() block:^{ _timer = [QXTimer scheduledTimerWithTimeInterval:1 repeats:YES queue:dispatch_get_main_queue() block:^{
timeCount--; timeCount--;
if (self == nil) {
return;
}
if (timeCount<=0) { if (timeCount<=0) {
[self->_timer invalidate]; [self->_timer invalidate];
self->_codeBtn.userInteractionEnabled = YES; self->_codeBtn.userInteractionEnabled = YES;
@@ -269,4 +272,10 @@
} }
}]; }];
} }
-(void)dealloc{
if (_timer) {
[_timer invalidate];
_timer = nil;
}
}
@end @end

View File

@@ -145,6 +145,19 @@ typedef NS_ENUM(NSInteger) {
QXRoomMessageTypeSingerRoomNextSongDidChanged = 1071, QXRoomMessageTypeSingerRoomNextSongDidChanged = 1071,
/// 歌曲数量发生变化 /// 歌曲数量发生变化
QXRoomMessageTypeSingerRoomSongCountDidChanged = 1072, QXRoomMessageTypeSingerRoomSongCountDidChanged = 1072,
/// CP 特效
QXRoomMessageTypeCpJoinRoom = 1080,
/// 开始签约
QXRoomMessageTypeStartSign = 1090,
/// 结束签约
QXRoomMessageTypeEndSign = 1092,
/// 签约延时
QXRoomMessageTypeDelaySignTime = 1093,
/// 身价发生变化
QXRoomMessageTypeSignBodyPriceDidChanged = 1091,
}QXRoomMessageType; }QXRoomMessageType;
NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_BEGIN
@protocol QXRoomMessageManagerDelegate <NSObject> @protocol QXRoomMessageManagerDelegate <NSObject>
@@ -290,6 +303,16 @@ NS_ASSUME_NONNULL_BEGIN
/// 已点歌曲数量发生变化 /// 已点歌曲数量发生变化
-(void)singerSongCountDidChanged:(NSString*)count; -(void)singerSongCountDidChanged:(NSString*)count;
/// 签约开始
-(void)signDidStartWithEndTime:(NSString *)endTime signId:(NSString *)signId signDay:(NSString*)signDay signValue:(NSString*)signValue;
/// 签约结束
-(void)signDidEndWithUserInfo1:(QXUserHomeModel*)userInfo1 userInfo2:(QXUserHomeModel*)userInfo2 sign_value:(NSString*)sign_value;
/// 签约身价变化
-(void)signValueDidChangedWithSignUserInfo:(QXUserHomeModel*)signUserInfo sign_value:(NSString*)sign_value signId:(NSString*)signId;
/// 签约身价变化
-(void)signTimeDelayWithEndTime:(NSString*)endTime;
@end @end
@interface QXRoomMessageManager : NSObject @interface QXRoomMessageManager : NSObject
@property (nonatomic,weak)id<QXRoomMessageManagerDelegate>delegate; @property (nonatomic,weak)id<QXRoomMessageManagerDelegate>delegate;

View File

@@ -14,6 +14,7 @@
#import "TUIChatConfig.h" #import "TUIChatConfig.h"
#import "QXDrifNobilityJoinRoomView.h" #import "QXDrifNobilityJoinRoomView.h"
#import "QXCustomAlertView.h" #import "QXCustomAlertView.h"
#import "QXHeartBeatSpaceViewController.h"
@interface QXRoomMessageManager() <V2TIMGroupListener,V2TIMSimpleMsgListener,V2TIMAdvancedMsgListener> @interface QXRoomMessageManager() <V2TIMGroupListener,V2TIMSimpleMsgListener,V2TIMAdvancedMsgListener>
@property (nonatomic,strong)NSString *groupId; @property (nonatomic,strong)NSString *groupId;
@@ -677,6 +678,46 @@
} }
} }
break; break;
case QXRoomMessageTypeCpJoinRoom:{
QXRoomChatListModel *model = [QXRoomChatListModel yy_modelWithJSON:msg.Text];
[[QXGiftPlayerManager shareManager] displayCpEffectView:model];
}
break;
case QXRoomMessageTypeStartSign:{
NSString *sign_id = [NSString stringWithFormat:@"%@",msg.Text[@"sign_id"]];
NSString *end_time = [NSString stringWithFormat:@"%@",msg.Text[@"end_time"]];
NSString *sign_day = [NSString stringWithFormat:@"%@",msg.Text[@"sign_day"]];
NSString *current_body_value = [NSString stringWithFormat:@"%@",msg.Text[@"current_body_value"]];
if (self.delegate && [self.delegate respondsToSelector:@selector(signDidStartWithEndTime:signId:signDay:signValue:)]) {
[self.delegate signDidStartWithEndTime:end_time signId:sign_id signDay:sign_day signValue:current_body_value];
}
}
break;
case QXRoomMessageTypeEndSign:{
QXRoomChatListModel *model = [QXRoomChatListModel yy_modelWithJSON:msg.Text];
NSString *sign_value = [NSString stringWithFormat:@"%@",msg.Text[@"sign_value"]];
if (self.delegate && [self.delegate respondsToSelector:@selector(signDidEndWithUserInfo1:userInfo2:sign_value:)]) {
[self.delegate signDidEndWithUserInfo1:model.FromUserInfo userInfo2:model.ToUserInfo sign_value:sign_value];
}
}
break;
case QXRoomMessageTypeDelaySignTime:{
NSString *end_time = [NSString stringWithFormat:@"%@",msg.Text[@"end_time"]];
if (self.delegate && [self.delegate respondsToSelector:@selector(signTimeDelayWithEndTime:)]) {
[self.delegate signTimeDelayWithEndTime:end_time];
}
}
break;
case QXRoomMessageTypeSignBodyPriceDidChanged:{
QXRoomChatListModel *model = [QXRoomChatListModel yy_modelWithJSON:msg.Text];
NSString *sign_id = [NSString stringWithFormat:@"%@",msg.Text[@"sign_id"]];
NSString *sign_value = [NSString stringWithFormat:@"%@",msg.Text[@"sign_value"]];
if (self.delegate && [self.delegate respondsToSelector:@selector(signValueDidChangedWithSignUserInfo:sign_value:signId:)]) {
[self.delegate signValueDidChangedWithSignUserInfo:model.FromUserInfo sign_value:sign_value signId:sign_id];
}
}
break;
default: default:
break; break;
} }
@@ -730,6 +771,10 @@
alertView.commitBlock = ^{ alertView.commitBlock = ^{
QXLOG(@"进入心动空间"); QXLOG(@"进入心动空间");
QXHeartBeatSpaceViewController *vc = [[QXHeartBeatSpaceViewController alloc] init];
QXRoomNavigationController *navagationController = (QXRoomNavigationController*)KEYWINDOW.rootViewController;
vc.userId = QXGlobal.shareGlobal.loginModel.user_id;
[navagationController pushViewController:vc animated:YES];
}; };
} }

View File

@@ -8,9 +8,10 @@
#import "QXSystemNoticeViewController.h" #import "QXSystemNoticeViewController.h"
#import "QXSystemNoticeCell.h" #import "QXSystemNoticeCell.h"
#import "QXSystemMessageCell.h" #import "QXSystemMessageCell.h"
#import "QXSystemMessageHandleCell.h"
#import "QXMessageServices.h" #import "QXMessageServices.h"
#import "AppDelegate.h" #import "AppDelegate.h"
@interface QXSystemNoticeViewController ()<UITableViewDataSource,UITableViewDelegate> @interface QXSystemNoticeViewController ()<UITableViewDataSource,UITableViewDelegate,QXSystemMessageHandleCellDelegate>
@property (nonatomic,strong)UITableView *tableView; @property (nonatomic,strong)UITableView *tableView;
@property (nonatomic,assign)CGFloat rowHeight; @property (nonatomic,assign)CGFloat rowHeight;
@end @end
@@ -78,12 +79,22 @@
cell.model = self.dataArray[indexPath.row]; cell.model = self.dataArray[indexPath.row];
return cell; return cell;
}else{ }else{
QXSystemMessageCell *cell = [QXSystemMessageCell cellWithTableView:tableView]; QXMessageListModel *model = self.dataArray[indexPath.row];
cell.model = self.dataArray[indexPath.row]; if (model.type.intValue == 6) {
return cell; QXSystemMessageHandleCell *cell = [QXSystemMessageHandleCell cellWithTableView:tableView];
cell.model = model;
cell.delegate = self;
return cell;
}else{
QXSystemMessageCell *cell = [QXSystemMessageCell cellWithTableView:tableView];
cell.model = model;
return cell;
}
} }
} }
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
QXMessageListModel *model = self.dataArray[indexPath.row]; QXMessageListModel *model = self.dataArray[indexPath.row];
if (model.room_id.integerValue > 0) { if (model.room_id.integerValue > 0) {
@@ -97,13 +108,22 @@
} }
} }
-(void)handleInviteIsAgree:(BOOL)isAgree message:(nonnull QXMessageListModel *)message{
MJWeakSelf
[QXMessageServices guildInviteApplyHandleWithApplyId:message.id type:isAgree?@"1":@"2" successBlock:^(NSDictionary * _Nonnull dict) {
showToast(@"操作成功");
weakSelf.page = 1;
[weakSelf getMessageList];
} failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) {
showToast(msg);
}];
}
-(UITableView *)tableView{ -(UITableView *)tableView{
if (!_tableView) { if (!_tableView) {
_tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, NavContentHeight, SCREEN_WIDTH, SCREEN_HEIGHT-NavContentHeight) style:(UITableViewStylePlain)]; _tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, NavContentHeight, SCREEN_WIDTH, SCREEN_HEIGHT-NavContentHeight) style:(UITableViewStylePlain)];
_tableView.dataSource = self; _tableView.dataSource = self;
_tableView.delegate = self; _tableView.delegate = self;
_tableView.backgroundColor = [UIColor clearColor]; _tableView.backgroundColor = [UIColor clearColor];
_tableView.rowHeight = 60;
_tableView.separatorStyle = UITableViewCellSeparatorStyleNone; _tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
_tableView.rowHeight = UITableViewAutomaticDimension; _tableView.rowHeight = UITableViewAutomaticDimension;
_tableView.estimatedRowHeight = self.rowHeight; _tableView.estimatedRowHeight = self.rowHeight;

View File

@@ -40,6 +40,8 @@ NS_ASSUME_NONNULL_BEGIN
@property (strong,nonatomic)NSString *image; @property (strong,nonatomic)NSString *image;
@property (strong,nonatomic)NSString *url; @property (strong,nonatomic)NSString *url;
/// 公会邀请处理状态 0未处理 1已通过 2已拒绝
@property (strong,nonatomic)NSString *guild_invited_status;
@property (strong,nonatomic)NSString *room_id; @property (strong,nonatomic)NSString *room_id;
@end @end

View File

@@ -31,6 +31,13 @@ NS_ASSUME_NONNULL_BEGIN
+(void)getMessageWithId:(NSString*)Id +(void)getMessageWithId:(NSString*)Id
successBlock:(void (^)(QXMessageListModel *model))successBlock successBlock:(void (^)(QXMessageListModel *model))successBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock; failBlock:(void (^)(NSError * error, NSString * msg))failBlock;
/**
消息工会邀请处理
*/
+(void)guildInviteApplyHandleWithApplyId:(NSString*)applyId
type:(NSString*)type
successBlock:(void (^)(NSDictionary* dict))successBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock;
@end @end
NS_ASSUME_NONNULL_END NS_ASSUME_NONNULL_END

View File

@@ -48,4 +48,24 @@
failBlock(error,msg); failBlock(error,msg);
}]; }];
} }
/**
*/
+(void)guildInviteApplyHandleWithApplyId:(NSString*)applyId
type:(NSString*)type
successBlock:(void (^)(NSDictionary* dict))successBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock{
NSDictionary *parameters =@{
@"apply_id":applyId?:@"",
@"type":type?type:@""
};
[[QXRequset shareInstance] postWithUrl:QXGuildInviteApplyHandle parameters:parameters needCache:NO success:^(id responseObject) {
if (successBlock) {
successBlock(responseObject[@"data"]);
}
} fail:^(NSError *error, NSString *msg, NSURLSessionDataTask *task) {
failBlock(error,msg);
}];
}
@end @end

View File

@@ -0,0 +1,32 @@
//
// QXSystemMessageHandleCell.h
// QXLive
//
// Created by 启星 on 2025/11/22.
//
#import <UIKit/UIKit.h>
#import "QXMessageModel.h"
NS_ASSUME_NONNULL_BEGIN
@protocol QXSystemMessageHandleCellDelegate <NSObject>
@optional
-(void)handleInviteIsAgree:(BOOL)isAgree message:(QXMessageListModel*)message;
@end
@interface QXSystemMessageHandleCell : UITableViewCell
@property (weak, nonatomic) IBOutlet UILabel *titleLabel;
@property (weak, nonatomic) IBOutlet UIButton *cancelBtn;
@property (weak, nonatomic) IBOutlet UIButton *commitBtn;
@property (weak, nonatomic) IBOutlet UILabel *timeLabel;
@property (weak, nonatomic) IBOutlet UIButton *stateBtn;
@property (weak, nonatomic) IBOutlet UILabel *contentLabel;
@property (weak, nonatomic) id<QXSystemMessageHandleCellDelegate> delegate;
@property (nonatomic,strong)QXMessageListModel *model;
+(instancetype)cellWithTableView:(UITableView *)tableView;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,66 @@
//
// QXSystemMessageHandleCell.m
// QXLive
//
// Created by on 2025/11/22.
//
#import "QXSystemMessageHandleCell.h"
@implementation QXSystemMessageHandleCell
+(instancetype)cellWithTableView:(UITableView *)tableView{
static NSString *cellId = @"QXSystemMessageHandleCell";
QXSystemMessageHandleCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];
if (!cell) {
cell = [[NSBundle mainBundle] loadNibNamed:cellId owner:nil options:nil].lastObject;
cell.backgroundColor = [UIColor clearColor];
}
return cell;
}
-(void)setModel:(QXMessageListModel *)model{
_model = model;
self.contentLabel.text = model.content;
NSDate *date = [NSDate dateWithTimeIntervalSince1970:model.createtime.longLongValue]; //,1000 , 1000
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
NSString*time = [formatter stringFromDate:date];
self.timeLabel.text = time;
if (model.guild_invited_status.intValue == 0) {
self.cancelBtn.hidden = NO;
self.commitBtn.hidden = NO;
self.stateBtn.hidden = YES;
}else if (model.guild_invited_status.intValue == 1){
self.cancelBtn.hidden = YES;
self.commitBtn.hidden = YES;
self.stateBtn.hidden = NO;
self.stateBtn.selected = NO;
}else if (model.guild_invited_status.intValue == 2){
self.cancelBtn.hidden = YES;
self.commitBtn.hidden = YES;
self.stateBtn.hidden = NO;
self.stateBtn.selected = YES;
}
}
- (void)awakeFromNib {
[super awakeFromNib];
// Initialization code
}
- (IBAction)cancelAction:(id)sender {
if (self.delegate && [self.delegate respondsToSelector:@selector(handleInviteIsAgree:message:)]) {
[self.delegate handleInviteIsAgree:NO message:self.model];
}
}
- (IBAction)commitAction:(id)sender {
if (self.delegate && [self.delegate respondsToSelector:@selector(handleInviteIsAgree:message:)]) {
[self.delegate handleInviteIsAgree:YES message:self.model];
}
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
// Configure the view for the selected state
}
@end

View File

@@ -0,0 +1,156 @@
<?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_12" 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"/>
<tableViewCell contentMode="scaleToFill" selectionStyle="none" indentationWidth="10" rowHeight="230" id="KGk-i7-Jjw" customClass="QXSystemMessageHandleCell">
<rect key="frame" x="0.0" y="0.0" width="535" height="230"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM">
<rect key="frame" x="0.0" y="0.0" width="535" height="230"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="2023-12-12 12:11:00" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="k89-mp-kfb">
<rect key="frame" x="16" y="12" width="503" height="18"/>
<constraints>
<constraint firstAttribute="height" constant="18" id="ZLC-vO-7Au"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="12"/>
<color key="textColor" red="0.40000000000000002" green="0.40000000000000002" blue="0.40000000000000002" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="2eO-sZ-nQk">
<rect key="frame" x="16" y="46" width="503" height="184"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="【某某传媒·粉丝狂欢】今晚22点已开启嗨玩三重奏不仅有才艺舞台还有分组pk,粉丝互动环节等你来~" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="xZb-cE-pmT">
<rect key="frame" x="10" y="40" width="483" height="74"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<color key="textColor" red="0.20000001789999999" green="0.20000001789999999" blue="0.20000001789999999" alpha="0.84705883260000003" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="公会通知" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="QNa-NX-Jv7">
<rect key="frame" x="10" y="12" width="483" height="18"/>
<constraints>
<constraint firstAttribute="height" constant="18" id="bP9-Yu-qHk"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<color key="textColor" red="0.20000001789999999" green="0.20000001789999999" blue="0.20000001789999999" alpha="0.84705883260000003" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="TYD-pk-Hrj">
<rect key="frame" x="136.66666666666666" y="130" width="110" height="42"/>
<color key="backgroundColor" red="0.95294117647058818" green="0.95294117647058818" blue="0.95294117647058818" alpha="1" colorSpace="calibratedRGB"/>
<constraints>
<constraint firstAttribute="width" constant="110" id="Och-3b-hUb"/>
<constraint firstAttribute="height" constant="42" id="ivE-DC-HsD"/>
</constraints>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<state key="normal" title="取消">
<color key="titleColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
</state>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="layer.masksToBounds" value="YES"/>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="21"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
<connections>
<action selector="cancelAction:" destination="KGk-i7-Jjw" eventType="touchUpInside" id="iK3-mS-a91"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="sR8-oC-oyN">
<rect key="frame" x="254.66666666666669" y="130" width="110" height="42"/>
<color key="backgroundColor" red="0.22745099663734436" green="0.73725497722625732" blue="0.42745098471641541" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="height" constant="42" id="Zhk-jD-xb4"/>
<constraint firstAttribute="width" constant="110" id="s21-Na-Sk1"/>
</constraints>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<state key="normal" title="确认">
<color key="titleColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
</state>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="layer.masksToBounds" value="YES"/>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="21"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
<connections>
<action selector="commitAction:" destination="KGk-i7-Jjw" eventType="touchUpInside" id="uFS-cO-2IB"/>
</connections>
</button>
<button hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Svn-Qm-TJa">
<rect key="frame" x="196.66666666666666" y="130" width="109.99999999999997" height="42"/>
<color key="backgroundColor" red="0.95294117649999999" green="0.95294117649999999" blue="0.95294117649999999" alpha="1" colorSpace="calibratedRGB"/>
<constraints>
<constraint firstAttribute="height" constant="42" id="TDD-P4-OBJ"/>
<constraint firstAttribute="width" constant="110" id="dqr-GS-Ytb"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="15"/>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<state key="normal" title="已同意">
<color key="titleColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
</state>
<state key="selected" title="已拒绝"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="layer.masksToBounds" value="YES"/>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="21"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</button>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
<constraints>
<constraint firstItem="sR8-oC-oyN" firstAttribute="leading" secondItem="TYD-pk-Hrj" secondAttribute="trailing" constant="8" id="4sX-G8-MLB"/>
<constraint firstAttribute="trailing" secondItem="xZb-cE-pmT" secondAttribute="trailing" constant="10" id="9Cz-Jd-aIT"/>
<constraint firstItem="QNa-NX-Jv7" firstAttribute="leading" secondItem="2eO-sZ-nQk" secondAttribute="leading" constant="10" id="EIT-LE-qbh"/>
<constraint firstItem="Svn-Qm-TJa" firstAttribute="centerY" secondItem="TYD-pk-Hrj" secondAttribute="centerY" id="Edo-KK-EQ7"/>
<constraint firstAttribute="trailing" secondItem="QNa-NX-Jv7" secondAttribute="trailing" constant="10" id="Fe4-Ge-oSe"/>
<constraint firstItem="TYD-pk-Hrj" firstAttribute="top" secondItem="xZb-cE-pmT" secondAttribute="bottom" constant="16" id="GtC-Uu-kKb"/>
<constraint firstItem="sR8-oC-oyN" firstAttribute="centerY" secondItem="TYD-pk-Hrj" secondAttribute="centerY" id="am3-th-Di3"/>
<constraint firstItem="Svn-Qm-TJa" firstAttribute="centerX" secondItem="2eO-sZ-nQk" secondAttribute="centerX" id="kd5-ej-naZ"/>
<constraint firstItem="TYD-pk-Hrj" firstAttribute="centerX" secondItem="2eO-sZ-nQk" secondAttribute="centerX" constant="-60" id="sls-gP-EjX"/>
<constraint firstItem="QNa-NX-Jv7" firstAttribute="top" secondItem="2eO-sZ-nQk" secondAttribute="top" constant="12" id="tP9-5g-9RB"/>
<constraint firstAttribute="bottom" secondItem="TYD-pk-Hrj" secondAttribute="bottom" constant="12" id="uyc-Hk-XVM"/>
<constraint firstItem="xZb-cE-pmT" firstAttribute="top" secondItem="QNa-NX-Jv7" secondAttribute="bottom" constant="10" id="xQu-UD-KuR"/>
<constraint firstItem="xZb-cE-pmT" firstAttribute="leading" secondItem="2eO-sZ-nQk" secondAttribute="leading" constant="10" id="zJN-Y2-dxN"/>
</constraints>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="layer.masksToBounds" value="YES"/>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="8"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</view>
</subviews>
<constraints>
<constraint firstAttribute="bottom" secondItem="2eO-sZ-nQk" secondAttribute="bottom" id="59c-Mm-R9s"/>
<constraint firstItem="2eO-sZ-nQk" firstAttribute="top" secondItem="k89-mp-kfb" secondAttribute="bottom" constant="16" id="8Zq-uc-eqs"/>
<constraint firstItem="k89-mp-kfb" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="16" id="EYh-y9-4Tq"/>
<constraint firstAttribute="trailing" secondItem="k89-mp-kfb" secondAttribute="trailing" constant="16" id="Taz-Qy-KeI"/>
<constraint firstItem="k89-mp-kfb" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" constant="12" id="auE-x8-0Qt"/>
<constraint firstItem="2eO-sZ-nQk" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="16" id="cuK-3y-fHc"/>
<constraint firstAttribute="trailing" secondItem="2eO-sZ-nQk" secondAttribute="trailing" constant="16" id="nFh-Ct-lOl"/>
</constraints>
</tableViewCellContentView>
<viewLayoutGuide key="safeArea" id="aW0-zy-SZf"/>
<connections>
<outlet property="cancelBtn" destination="TYD-pk-Hrj" id="Gac-yn-ujG"/>
<outlet property="commitBtn" destination="sR8-oC-oyN" id="NHC-ja-haS"/>
<outlet property="contentLabel" destination="xZb-cE-pmT" id="uxF-Q5-zRi"/>
<outlet property="stateBtn" destination="Svn-Qm-TJa" id="DmT-JH-rzM"/>
<outlet property="timeLabel" destination="k89-mp-kfb" id="C8p-G4-gfQ"/>
<outlet property="titleLabel" destination="QNa-NX-Jv7" id="9gp-1x-ru9"/>
</connections>
<point key="canvasLocation" x="303.05343511450383" y="85.91549295774648"/>
</tableViewCell>
</objects>
</document>

View File

@@ -36,6 +36,8 @@
#import "QXRoomSingerAuthViewController.h" #import "QXRoomSingerAuthViewController.h"
#import "QXMineSongListViewController.h" #import "QXMineSongListViewController.h"
#import "QXIntimateViewController.h" #import "QXIntimateViewController.h"
#import "QXBodyPriceRuleView.h"
#import "QXFamilyViewController.h"
#import <WXApi.h> #import <WXApi.h>
@interface QXMineViewController ()<UITableViewDelegate,UITableViewDataSource,QXMineServiceCellDelegate,QXMainHeaderViewDelegate> @interface QXMineViewController ()<UITableViewDelegate,UITableViewDataSource,QXMineServiceCellDelegate,QXMainHeaderViewDelegate>
@@ -127,6 +129,12 @@
[self gotoSetting]; [self gotoSetting];
} }
break; break;
case QXMineServiceTypeFamily:{
QXLOG(@"跳转家族");
QXFamilyViewController *vc = [[QXFamilyViewController alloc] init];
[self.navigationController pushViewController:vc animated:YES];
}
break;
case QXMineServiceTypeHelp:{ case QXMineServiceTypeHelp:{
[self gotoService]; [self gotoService];
} }
@@ -223,6 +231,10 @@
[self.navigationController pushViewController:vc animated:YES]; [self.navigationController pushViewController:vc animated:YES];
} }
break; break;
case QXMainHeaderOptionTypeBodyPrice:{
[QXBodyPriceRuleView showInView:self.view];
}
break;
case QXMainHeaderOptionTypeWallet:{ case QXMainHeaderOptionTypeWallet:{
QXLOG(@"跳转钱包"); QXLOG(@"跳转钱包");
BOOL result = [[NSUserDefaults standardUserDefaults] boolForKey:kWalletRuleHide]; BOOL result = [[NSUserDefaults standardUserDefaults] boolForKey:kWalletRuleHide];
@@ -304,7 +316,7 @@
} }
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
if (indexPath.row == 0) { if (indexPath.row == 0) {
return ScaleWidth(110); return ScaleWidth(168);
}else{ }else{
// if (QXGlobal.shareGlobal.isOpenRecharge) { // if (QXGlobal.shareGlobal.isOpenRecharge) {
return ScaleWidth(168); return ScaleWidth(168);

View File

@@ -41,6 +41,7 @@
-(void)viewWillAppear:(BOOL)animated{ -(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated]; [super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:NO animated:YES]; [self.navigationController setNavigationBarHidden:NO animated:YES];
[self.headerView headerStartPlay];
} }
-(void)setNavgationItems{ -(void)setNavgationItems{
[super setNavgationItems]; [super setNavgationItems];
@@ -91,7 +92,9 @@
_pagingView.mainTableView.backgroundColor = [UIColor clearColor]; _pagingView.mainTableView.backgroundColor = [UIColor clearColor];
self.pagingView.backgroundColor = [UIColor clearColor]; self.pagingView.backgroundColor = [UIColor clearColor];
[self.view addSubview:self.pagingView]; [self.view addSubview:self.pagingView];
self.cycleScrollView.hidden = YES;
self.backgourdImageView.hidden = YES;
self.categoryView.hidden = YES;
self.categoryView.listContainer = (id<JXCategoryViewListContainer>)self.pagingView.listContainerView; self.categoryView.listContainer = (id<JXCategoryViewListContainer>)self.pagingView.listContainerView;
// self.navigationController.interactivePopGestureRecognizer.enabled = (self.categoryView.selectedIndex == 0); // self.navigationController.interactivePopGestureRecognizer.enabled = (self.categoryView.selectedIndex == 0);
@@ -120,6 +123,9 @@
weakSelf.headerView.height = 243+ScaleWidth(40)+8; weakSelf.headerView.height = 243+ScaleWidth(40)+8;
} }
[weakSelf.pagingView resizeTableHeaderViewHeightWithAnimatable:NO duration:0.1 curve:UIViewAnimationCurveLinear]; [weakSelf.pagingView resizeTableHeaderViewHeightWithAnimatable:NO duration:0.1 curve:UIViewAnimationCurveLinear];
weakSelf.cycleScrollView.hidden = NO;
weakSelf.backgourdImageView.hidden = NO;
weakSelf.categoryView.hidden = NO;
NSArray *imgs; NSArray *imgs;
if (userModel.home_bgimages.length > 0) { if (userModel.home_bgimages.length > 0) {
imgs = [userModel.home_bgimages componentsSeparatedByString:@","]; imgs = [userModel.home_bgimages componentsSeparatedByString:@","];
@@ -138,7 +144,7 @@
weakSelf.cycleScrollView.imageURLStringsGroup = imgs; weakSelf.cycleScrollView.imageURLStringsGroup = imgs;
} }
} failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) { } failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) {
showToast(msg);
}]; }];
} }
#pragma mark - JXPagingViewDelegate #pragma mark - JXPagingViewDelegate

View File

@@ -10,6 +10,7 @@
#import "QXMineNetwork.h" #import "QXMineNetwork.h"
#import "QXSeatHeaderView.h" #import "QXSeatHeaderView.h"
#import "QXGiftPlayerManager.h" #import "QXGiftPlayerManager.h"
#import "QXCustomAlertView.h"
@interface QXDressSubViewController ()<UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout> @interface QXDressSubViewController ()<UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout>
@property (nonatomic,strong)QXSeatHeaderView *headerImageView; @property (nonatomic,strong)QXSeatHeaderView *headerImageView;
@@ -46,17 +47,20 @@
} }
-(void)getData{ -(void)getData{
MJWeakSelf @weakify(self)
[QXMineNetwork userDressListWithType:self.model.id successBlock:^(NSArray<QXUserDressModel *> * _Nonnull list) { [QXMineNetwork userDressListWithType:self.model.id successBlock:^(NSArray<QXUserDressModel *> * _Nonnull list) {
[weakSelf.dataArray removeAllObjects]; @strongify(self);
[weakSelf.dataArray addObjectsFromArray:list]; [self.dataArray removeAllObjects];
if (list.count > 0 ) { [self.dataArray addObjectsFromArray:list];
QXUserDressModel *model = [[QXUserDressModel alloc] init]; if (![self.model.id isEqualToString:@"12"]) {
model.title = QXText(@"无"); if (list.count > 0 ) {
model.udid = @"-1"; QXUserDressModel *model = [[QXUserDressModel alloc] init];
[weakSelf.dataArray insertObject:model atIndex:0]; model.title = QXText(@"无");
model.udid = @"-1";
[self.dataArray insertObject:model atIndex:0];
}
} }
[weakSelf.collectionView reloadData]; [self.collectionView reloadData];
} failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) { } failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) {
}]; }];
@@ -76,8 +80,8 @@
return cell; return cell;
} }
-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath{ -(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath{
int width = (SCREEN_WIDTH-15*2-22*2-1)/3; int width = (SCREEN_WIDTH-16*2-15*2-1)/3;
return CGSizeMake(width, width/100*120); return CGSizeMake((int)width, ScaleWidth(136));
} }
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{ -(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{
if (indexPath.row == self.selectedIndex) { if (indexPath.row == self.selectedIndex) {
@@ -96,23 +100,45 @@
} }
-(void)commitAction{ -(void)commitAction{
if (self.selectedIndex == -1) {
return;
}
QXUserDressModel *model = self.dataArray[self.selectedIndex]; QXUserDressModel *model = self.dataArray[self.selectedIndex];
if ([self.model.id isEqualToString:@"12"]) {
@weakify(self);
QXCustomAlertView *al = [[QXCustomAlertView alloc] init];
[al showInView:self.view title:@"温馨提示" message:[NSString stringWithFormat:@"亲爱的羽声用户,您好~ 您是否确认使用%@,本次使用后 您的身价会降至原身价的%@%%",model.title,model.ext_value] cancleTitle:@"取消" commitTitle:@"确认"];
al.commitBlock = ^{
@strongify(self);
[self commitNetworkWithModel:model];
};
return;
}
[self commitNetworkWithModel:model];
}
-(void)commitNetworkWithModel:(QXUserDressModel*)model{
BOOL isCancel = NO; BOOL isCancel = NO;
if ([model.udid isEqualToString:@"-1"]) { if ([model.udid isEqualToString:@"-1"]) {
isCancel = YES; isCancel = YES;
}else{ }else{
isCancel = NO; isCancel = NO;
} }
MJWeakSelf @weakify(self);
[QXMineNetwork setUserDressIsCancel:isCancel udid:model.udid type:self.model.id successBlock:^(NSDictionary * _Nonnull dict) { [QXMineNetwork setUserDressIsCancel:isCancel udid:model.udid type:self.model.id successBlock:^(NSDictionary * _Nonnull dict) {
if (weakSelf.model.id.intValue == 1) { @strongify(self);
if (self.model.id.intValue == 1) {
[QXGlobal shareGlobal].loginModel.dress = model.play_image; [QXGlobal shareGlobal].loginModel.dress = model.play_image;
} }
if (weakSelf.model.id.intValue == 9) { if (self.model.id.intValue == 9) {
[QXGlobal shareGlobal].loginModel.chat_bubble = model.base_image; [QXGlobal shareGlobal].loginModel.chat_bubble = model.base_image;
} }
[[QXGlobal shareGlobal] updateUserInfoWithMolde:[QXGlobal shareGlobal].loginModel]; [[QXGlobal shareGlobal] updateUserInfoWithMolde:[QXGlobal shareGlobal].loginModel];
showToast(@"设置成功"); showToast(@"设置成功");
if (self.model.id.intValue == 12) {
[self getData];
}
} failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) { } failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) {
showToast(msg); showToast(msg);
}]; }];
@@ -135,9 +161,9 @@
-(UICollectionView *)collectionView{ -(UICollectionView *)collectionView{
if (!_collectionView) { if (!_collectionView) {
UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
layout.minimumLineSpacing = 22; layout.minimumLineSpacing = 15;
layout.minimumInteritemSpacing = 22; layout.minimumInteritemSpacing = 15;
layout.sectionInset = UIEdgeInsetsMake(0, 15, 0, 15); layout.sectionInset = UIEdgeInsetsMake(0, 16, 0, 16);
_collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, self.headerImageView.bottom+12+12, SCREEN_WIDTH, SCREEN_HEIGHT-NavContentHeight) collectionViewLayout:layout]; _collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, self.headerImageView.bottom+12+12, SCREEN_WIDTH, SCREEN_HEIGHT-NavContentHeight) collectionViewLayout:layout];
_collectionView.delegate = self; _collectionView.delegate = self;
_collectionView.dataSource = self; _collectionView.dataSource = self;

View File

@@ -6,17 +6,240 @@
// //
#import "QXHeartBeatSpaceViewController.h" #import "QXHeartBeatSpaceViewController.h"
#import "QXMineNetwork.h"
#import "QXHeartBeatSpaceRecordCell.h"
#import "QXHeartBeatLevelRuleView.h"
#import "QXUserCpDressView.h"
@interface QXHeartBeatSpaceViewController ()<UITableViewDelegate,UITableViewDataSource>
@property (nonatomic,strong)UIImageView *topImageView;
@property (nonatomic,strong)UIImageView *titleImageView;
@property (nonatomic,strong)UIImageView *flyImageView;
@property (nonatomic,strong)QXSeatHeaderView *leftHeaderView;
@property (nonatomic,strong)UIImageView *heartImageView;
@property (nonatomic,strong)QXSeatHeaderView *rightHeaderView;
@property (nonatomic,strong)UILabel *timeLabel;
@property (nonatomic,strong)UIView *recordContentView;
@property (nonatomic,strong)UIView *expView;
@property (nonatomic,strong)UILabel *expLabel;
@property (nonatomic,strong)UITableView *tableView;
@property (nonatomic,strong)UIImageView *cpDressBgImageView;
@property (nonatomic,strong)QXUserCpDressView *cpDressView;
@interface QXHeartBeatSpaceViewController ()
@end @end
@implementation QXHeartBeatSpaceViewController @implementation QXHeartBeatSpaceViewController
- (void)viewDidLoad { - (void)viewDidLoad {
self.isNoChangeBgImage = YES;
[super viewDidLoad]; [super viewDidLoad];
// Do any additional setup after loading the view. // Do any additional setup after loading the view.
} }
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:NO animated:YES];
}
-(void)setNavgationItems{
[super setNavgationItems];
UIButton*recordBtn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 44, 44)];
[recordBtn setImage:[UIImage imageNamed:@"nobility_help_icon"] forState:(UIControlStateNormal)];
recordBtn.titleLabel.font = [UIFont systemFontOfSize:16];
[recordBtn addTarget:self action:@selector(helpAction) forControlEvents:(UIControlEventTouchUpInside)];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:recordBtn];
}
- (void)initSubViews{
[self updateBackImage:[UIImage imageNamed:@"mine_intimate_back"]];
self.page = 1;
self.view.backgroundColor = RGB16(0xBF8BFA);
self.topImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"user_heart_beat_space_bg"]];
self.topImageView.frame = CGRectMake(0, 0, SCREEN_WIDTH, ScaleWidth(336));
[self.view addSubview:self.topImageView];
self.titleImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"user_heart_beat_title"]];
self.titleImageView.frame = CGRectMake((SCREEN_WIDTH-ScaleWidth(199))/2, ScaleWidth(48), ScaleWidth(199), ScaleWidth(87));
[self.view addSubview:self.titleImageView];
self.flyImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"user_heart_beat_fly"]];
self.flyImageView.frame = CGRectMake((self.view.width-ScaleWidth(328))/2, self.titleImageView.top+ScaleWidth(24), ScaleWidth(328), ScaleWidth(184));
[self.view addSubview:self.flyImageView];
self.leftHeaderView = [[QXSeatHeaderView alloc] initWithFrame:CGRectMake(SCREEN_WIDTH/2-ScaleWidth(72), self.titleImageView.bottom+ScaleWidth(26), ScaleWidth(72), ScaleWidth(72))];
[self.leftHeaderView addRoundedCornersWithRadius:ScaleWidth(36)];
self.leftHeaderView.layer.borderWidth = 2;
self.leftHeaderView.layer.borderColor = RGB16(0xffffff).CGColor;
[self.view addSubview:self.leftHeaderView];
self.rightHeaderView = [[QXSeatHeaderView alloc] initWithFrame:CGRectMake(self.leftHeaderView.right, self.titleImageView.bottom+ScaleWidth(26), ScaleWidth(72), ScaleWidth(72))];
[self.rightHeaderView addRoundedCornersWithRadius:ScaleWidth(36)];
self.rightHeaderView.layer.borderWidth = 2;
self.rightHeaderView.layer.borderColor = RGB16(0xffffff).CGColor;
[self.view addSubview:self.rightHeaderView];
self.heartImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"user_heart_beat_heart_icon"]];
self.heartImageView.frame = CGRectMake(SCREEN_WIDTH/2-ScaleWidth(26/2), 0, ScaleWidth(26), ScaleWidth(26));
[self.view addSubview:self.heartImageView];
self.heartImageView.centerY = self.leftHeaderView.centerY;
self.timeLabel = [[UILabel alloc] init];
self.timeLabel.font = [UIFont systemFontOfSize:14];
self.timeLabel.textColor = RGB16(0xffffff);
self.timeLabel.backgroundColor = RGB16A(0x0300C8,0.35);
[self.timeLabel addRoundedCornersWithRadius:11.5];
[self.view addSubview:self.timeLabel];
self.recordContentView = [[UIView alloc] initWithFrame:CGRectMake(16, self.topImageView.bottom-ScaleWidth(20), SCREEN_WIDTH-32, self.view.height-self.topImageView.bottom-ScaleWidth(20))];
self.recordContentView.backgroundColor = RGB16(0xffffff);
[self.recordContentView addRoundedCornersWithRadius:12];
self.expView = [[UIView alloc] initWithFrame:CGRectMake(14, 14, self.recordContentView.width-28, ScaleWidth(89))];
[self.recordContentView addSubview:self.expView];
UIImageView *expImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"user_heart_beat_exp_bg"]];
expImageView.frame = self.expView.bounds;
[self.expView addSubview:expImageView];
self.expLabel = [[UILabel alloc] initWithFrame:CGRectMake(127, (self.expView.height-32)/2, self.expView.width-127-10, 32)];
self.expLabel.textColor = RGB16(0xffffff);
self.expLabel.font = [UIFont systemFontOfSize:16];
[self.expView addSubview:self.expLabel];
[self.recordContentView addSubview:self.tableView];
[self.view addSubview:self.recordContentView];
// user_heart_beat_exp_bg
self.cpDressBgImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"heart_beat_space_dress_bg"]];
self.cpDressBgImageView.frame = CGRectMake(self.view.width-ScaleWidth(115), 0, ScaleWidth(115), ScaleWidth(210));
[self.view addSubview:self.cpDressBgImageView];
self.cpDressBgImageView.centerY = self.leftHeaderView.centerY;
// [self.cpDressBgImageView mas_makeConstraints:^(MASConstraintMaker *make) {
// make.right.equalTo(self.view);
// make.centerY.equalTo(self.leftHeaderView);
// make.width.mas_equalTo(ScaleWidth(115));
// make.height.mas_equalTo(ScaleWidth(210));
// }];
self.cpDressView = [[QXUserCpDressView alloc] initWithFrame:self.cpDressBgImageView.frame];
[self.cpDressView hideHeader];
[self.view addSubview:self.cpDressView];
// [self.cpDressView mas_makeConstraints:^(MASConstraintMaker *make) {
// make.edges.equalTo(self.cpDressBgImageView);
// }];
self.cpDressView.hidden = YES;
self.cpDressBgImageView.hidden = YES;
}
-(void)helpAction{
QXHeartBeatLevelRuleView *view = [[QXHeartBeatLevelRuleView alloc] init];
NSString *urlStr = [NSString stringWithFormat:@"%@api/Page/page_show?id=31",ServerUrl];
view.rule = urlStr;
[view showInView:self.view];
}
-(void)setUserId:(NSString *)userId{
_userId = userId;
self.page = 1;
[self getList];
}
-(void)getList{
MJWeakSelf
[QXMineNetwork heartBeatUserInfoWithUserId:self.userId page:self.page successBlock:^(QXUserCpInfoModel * _Nonnull model) {
if (weakSelf.page == 1) {
if ([model.user_info1.user_id isEqualToString:weakSelf.userId]) {
[weakSelf.leftHeaderView setHeadIcon:model.user_info1.avatar dress:model.user_info1.dress];
[weakSelf.rightHeaderView setHeadIcon:model.user_info2.avatar dress:model.user_info2.dress];
}else{
[weakSelf.leftHeaderView setHeadIcon:model.user_info2.avatar dress:model.user_info2.dress];
[weakSelf.rightHeaderView setHeadIcon:model.user_info1.avatar dress:model.user_info1.dress];
}
if ([model.pendant isExist]) {
weakSelf.cpDressView.hidden = NO;
weakSelf.cpDressBgImageView.hidden = NO;
weakSelf.cpDressView.model = model;
}
NSTimeInterval currentTime = [[NSDate date] timeIntervalSince1970];
long long milliseconds = (long long)(currentTime);
NSInteger time = milliseconds - model.createtime.longLongValue;
weakSelf.timeLabel.text = [NSString stringWithFormat:@" 我们在一起%@啦 ",[NSString getTimeWithDay:time]];
[weakSelf.timeLabel sizeToFit];
weakSelf.timeLabel.centerX = weakSelf.topImageView.centerX;
weakSelf.timeLabel.height = 21;
weakSelf.timeLabel.top = weakSelf.leftHeaderView.bottom+ScaleWidth(21);
if (model.next_level_exp.integerValue <=0 ) {
weakSelf.expLabel.text = @"当前已是最高等级";
}else{
NSString *expString = [NSString stringWithFormat:@"还需%@经验升级",model.next_level_exp];
NSMutableAttributedString *attr = [[NSMutableAttributedString alloc] initWithString:expString];
[attr yy_setFont:[UIFont fontWithName:@"DIN Condensed" size:32] range:[expString rangeOfString:model.next_level_exp]];
[attr yy_setColor:RGB16(0xFFF022) range:[expString rangeOfString:model.next_level_exp]];
weakSelf.expLabel.attributedText = attr;
}
[weakSelf.dataArray removeAllObjects];
}
[weakSelf.dataArray addObjectsFromArray:model.gift_log];
[weakSelf.tableView reloadData];
if (model.gift_log.count == 0) {
weakSelf.tableView.mj_footer.state = MJRefreshStateNoMoreData;
}else{
[weakSelf.tableView.mj_footer endRefreshing];
}
[weakSelf.tableView.mj_header endRefreshing];
} failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) {
showToast(msg);
[weakSelf.tableView.mj_header endRefreshing];
[weakSelf.tableView.mj_footer endRefreshing];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[weakSelf.navigationController popViewControllerAnimated:YES];
});
}];
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return self.dataArray.count;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
QXHeartBeatSpaceRecordCell *cell = [QXHeartBeatSpaceRecordCell cellWithTableView:tableView];
cell.userId = self.userId;
cell.model = self.dataArray[indexPath.row];
return cell;
}
-(UITableView *)tableView{
if (!_tableView) {
_tableView = [[UITableView alloc] initWithFrame:CGRectMake(14,self.expView.bottom+6,self.recordContentView.width-28,self.recordContentView.height-self.expView.bottom-14-6) style:(UITableViewStylePlain)];
_tableView.dataSource = self;
_tableView.delegate = self;
_tableView.backgroundColor = RGB16(0xF4F4F4);
[_tableView addRoundedCornersWithRadius:12];
_tableView.tableFooterView = [UIView new];
_tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
_tableView.rowHeight = UITableViewAutomaticDimension;
_tableView.showsVerticalScrollIndicator = NO;
_tableView.showsHorizontalScrollIndicator = NO;
if (@available(iOS 15.0, *)) {
_tableView.sectionHeaderTopPadding = 0;
} else {
// Fallback on earlier versions
}
MJWeakSelf
_tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
weakSelf.page = 1;
[weakSelf getList];
}];
_tableView.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingBlock:^{
weakSelf.page++;
[weakSelf getList];
}];
}
return _tableView;
}
@end @end

View File

@@ -14,8 +14,9 @@
#import "QXMoreIntimateViewController.h" #import "QXMoreIntimateViewController.h"
#import "QXIntimateMoreListCell.h" #import "QXIntimateMoreListCell.h"
#import "QXHeartBeatSpaceViewController.h" #import "QXHeartBeatSpaceViewController.h"
#import "QXUserHomePageViewController.h"
@interface QXIntimateViewController ()<UITableViewDataSource,UITableViewDelegate> @interface QXIntimateViewController ()<UITableViewDataSource,UITableViewDelegate,QXUserCpCardViewDelegate,QXIntimateMoreListCellDelegate>
@property (nonatomic,strong)UITableView *tableView; @property (nonatomic,strong)UITableView *tableView;
@property (nonatomic,strong)QXRoomBestFriendModel *model; @property (nonatomic,strong)QXRoomBestFriendModel *model;
@end @end
@@ -79,6 +80,7 @@
QXMoreIntimateViewController *vc = [[QXMoreIntimateViewController alloc] init]; QXMoreIntimateViewController *vc = [[QXMoreIntimateViewController alloc] init];
vc.userId = self.userId; vc.userId = self.userId;
vc.relation_id = md.relation_list.firstObject.relation_id; vc.relation_id = md.relation_list.firstObject.relation_id;
vc.relation_name = md.relation_name;
[self.navigationController pushViewController:vc animated:YES]; [self.navigationController pushViewController:vc animated:YES];
} }
@@ -98,7 +100,9 @@
if (indexPath.section == 0) { if (indexPath.section == 0) {
if (self.model.cp) { if (self.model.cp) {
QXIntimateCpCell *cell = [QXIntimateCpCell cellWithTableView:tableView]; QXIntimateCpCell *cell = [QXIntimateCpCell cellWithTableView:tableView];
cell.userId = self.userId;
cell.model = self.model.cp; cell.model = self.model.cp;
cell.delegate = self;
return cell; return cell;
}else{ }else{
QXIntimateNoCpCell *cell = [QXIntimateNoCpCell cellWithTableView:tableView]; QXIntimateNoCpCell *cell = [QXIntimateNoCpCell cellWithTableView:tableView];
@@ -108,6 +112,7 @@
QXRoomBestFriendListModel *md = self.dataArray[indexPath.section-1]; QXRoomBestFriendListModel *md = self.dataArray[indexPath.section-1];
if (md.relation_list.count > 1) { if (md.relation_list.count > 1) {
QXIntimateListCell*cell = [QXIntimateListCell cellWithTableView:tableView]; QXIntimateListCell*cell = [QXIntimateListCell cellWithTableView:tableView];
cell.userId = self.userId;
if (self.dataArray.count>0) { if (self.dataArray.count>0) {
QXRoomBestFriendListModel *md = self.dataArray[indexPath.section-1]; QXRoomBestFriendListModel *md = self.dataArray[indexPath.section-1];
cell.model = md; cell.model = md;
@@ -116,8 +121,10 @@
}else{ }else{
MJWeakSelf MJWeakSelf
QXIntimateMoreListCell *cell = [QXIntimateMoreListCell cellWithTableView:tableView]; QXIntimateMoreListCell *cell = [QXIntimateMoreListCell cellWithTableView:tableView];
cell.userId = self.userId;
QXRoomBestFriendListModel *md = self.dataArray.firstObject; QXRoomBestFriendListModel *md = self.dataArray.firstObject;
cell.model = md.relation_list.firstObject; cell.model = md.relation_list.firstObject;
cell.delegate = self;
cell.deleteSuccessBlock = ^(QXRelationshipListModel * _Nonnull model) { cell.deleteSuccessBlock = ^(QXRelationshipListModel * _Nonnull model) {
weakSelf.page = 1; weakSelf.page = 1;
[weakSelf getList]; [weakSelf getList];
@@ -184,13 +191,13 @@
} }
}else{ }else{
QXRoomBestFriendListModel *md = self.dataArray[indexPath.section-1]; QXRoomBestFriendListModel *md = self.dataArray[indexPath.section-1];
if (md.relation_list.count > 1) { if (md.relation_list.count == 1) {
return ScaleWidth(92)+18; return ScaleWidth(92)+18;
}else{ }else{
if (md.relation_list.count == 0) { if (md.relation_list.count == 0) {
return 0; return 0;
}else{ }else{
return ScaleWidth(100)+16; return ScaleWidth(125);
} }
} }
@@ -206,14 +213,35 @@
return 15; return 15;
} }
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
if (indexPath.section == 0) { // if (indexPath.section == 0) {
if (self.model.cp) { // if (self.model.cp) {
QXHeartBeatSpaceViewController *vc = [[QXHeartBeatSpaceViewController alloc] init]; // QXHeartBeatSpaceViewController *vc = [[QXHeartBeatSpaceViewController alloc] init];
vc.userId = self.userId; // vc.userId = self.userId;
[self.navigationController pushViewController:vc animated:YES]; // [self.navigationController pushViewController:vc animated:YES];
} // }
// }
}
-(void)didClickHeaderCardViewWithUserId:(NSString *)userId{
if (self.model.cp) {
QXHeartBeatSpaceViewController *vc = [[QXHeartBeatSpaceViewController alloc] init];
vc.userId = self.userId;
[self.navigationController pushViewController:vc animated:YES];
} }
} }
-(void)didClickHeaderViewUserId:(NSString *)userId{
QXUserHomePageViewController *vc = [[QXUserHomePageViewController alloc] init];
vc.user_id = userId;
[self.navigationController pushViewController:vc animated:YES];
}
- (void)didClickHeaderWithUserId:(NSString *)userId{
QXUserHomePageViewController *vc = [[QXUserHomePageViewController alloc] init];
vc.user_id = userId;
[self.navigationController pushViewController:vc animated:YES];
}
-(UITableView *)tableView{ -(UITableView *)tableView{
if (!_tableView) { if (!_tableView) {
_tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, NavContentHeight+ScaleWidth(68), SCREEN_WIDTH, SCREEN_HEIGHT -NavContentHeight-ScaleWidth(68)) style:(UITableViewStyleGrouped)]; _tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, NavContentHeight+ScaleWidth(68), SCREEN_WIDTH, SCREEN_HEIGHT -NavContentHeight-ScaleWidth(68)) style:(UITableViewStyleGrouped)];

View File

@@ -12,6 +12,7 @@ NS_ASSUME_NONNULL_BEGIN
@interface QXMoreIntimateViewController : QXBaseViewController @interface QXMoreIntimateViewController : QXBaseViewController
@property (nonatomic,strong)NSString *userId; @property (nonatomic,strong)NSString *userId;
@property (nonatomic,strong)NSString *relation_id; @property (nonatomic,strong)NSString *relation_id;
@property (nonatomic,strong)NSString *relation_name;
@end @end
NS_ASSUME_NONNULL_END NS_ASSUME_NONNULL_END

View File

@@ -16,9 +16,30 @@
@implementation QXMoreIntimateViewController @implementation QXMoreIntimateViewController
- (void)viewDidLoad { - (void)viewDidLoad {
self.isNoChangeBgImage = YES;
[super viewDidLoad]; [super viewDidLoad];
// Do any additional setup after loading the view. // Do any additional setup after loading the view.
} }
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:NO animated:YES];
}
-(void)initSubViews{
[super initSubViews];
self.page = 1;
[self updateBgImage:@"mine_intimate_bg"];
[self updateBackImage:[UIImage imageNamed:@"mine_intimate_back"]];
UIImageView *titleImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"mine_intimate_title_img"]];
[self.view addSubview:titleImageView];
[titleImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.equalTo(self.view);
make.width.mas_equalTo(ScaleWidth(178));
make.height.mas_equalTo(ScaleWidth(68));
make.top.mas_equalTo(NavContentHeight);
}];
[self.view addSubview:self.tableView];
}
-(void)setUserId:(NSString *)userId{ -(void)setUserId:(NSString *)userId{
_userId = userId; _userId = userId;
} }
@@ -33,6 +54,7 @@
} }
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
QXIntimateMoreListCell *cell = [QXIntimateMoreListCell cellWithTableView:tableView]; QXIntimateMoreListCell *cell = [QXIntimateMoreListCell cellWithTableView:tableView];
cell.userId = self.userId;
cell.model = self.dataArray[indexPath.row]; cell.model = self.dataArray[indexPath.row];
MJWeakSelf MJWeakSelf
cell.topSuccessBlock = ^(QXRelationshipListModel * _Nonnull model) { cell.topSuccessBlock = ^(QXRelationshipListModel * _Nonnull model) {
@@ -46,7 +68,29 @@
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return ScaleWidth(92)+16; return ScaleWidth(92)+16;
} }
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
UIView *header = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.width, 50)];
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"mine_intimate_title_bg"]];
UILabel *titleLabel = [[UILabel alloc] init];
titleLabel.font = [UIFont boldSystemFontOfSize:16];
titleLabel.textColor = RGB16(0xffffff);
[header addSubview:imageView];
[header addSubview:titleLabel];
[imageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.mas_equalTo(132);
make.height.mas_equalTo(36);
make.centerX.centerY.equalTo(header);
}];
[titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.equalTo(header);
make.centerY.equalTo(header).offset(2);
}];
titleLabel.text = self.relation_name;
return header;
}
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
return 50;
}
-(void)getList{ -(void)getList{
MJWeakSelf MJWeakSelf
[QXMineNetwork userBestFriendsMoreListWithUserId:self.userId relation_id:self.relation_id successBlock:^(NSArray<QXRelationshipListModel *> * _Nonnull model) { [QXMineNetwork userBestFriendsMoreListWithUserId:self.userId relation_id:self.relation_id successBlock:^(NSArray<QXRelationshipListModel *> * _Nonnull model) {

View File

@@ -0,0 +1,16 @@
//
// QXFamilyPriceRecordViewController.h
// QXLive
//
// Created by 启星 on 2025/11/26.
//
#import "QXBaseViewController.h"
NS_ASSUME_NONNULL_BEGIN
@interface QXFamilyPriceRecordViewController : QXBaseViewController
@property (nonatomic,strong)NSString *userId;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,129 @@
//
// QXFamilyPriceRecordViewController.m
// QXLive
//
// Created by on 2025/11/26.
//
#import "QXFamilyPriceRecordViewController.h"
#import "QXWalletDateView.h"
#import "QXFamilyPriceRecordCell.h"
#import "QXMineNetwork.h"
@interface QXFamilyPriceRecordViewController ()<QXWalletDateViewDelegate,UITableViewDelegate,UITableViewDataSource>
@property (nonatomic,strong)UIView *contentView;
@property (nonatomic,strong)UITableView *tableView;
@property (nonatomic,strong)QXWalletDateView *dateView;
@property (nonatomic,strong)NSString* startTime;
@property (nonatomic,strong)NSString* endTime;
@end
@implementation QXFamilyPriceRecordViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
}
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:NO animated:YES];
}
-(void)setNavgationItems{
[super setNavgationItems];
self.navigationItem.title = QXText(@"总收益");
}
-(void)initSubViews{
self.page = 1;
UIView *contentView = [[UIView alloc] initWithFrame:CGRectMake(16, NavContentHeight+12, SCREEN_WIDTH-32, SCREEN_HEIGHT-NavContentHeight-12)];
[contentView addRoundedCornersWithRadius:16];
contentView.backgroundColor = RGB16(0xffffff);
self.contentView = contentView;
[self.view addSubview:contentView];
[contentView addSubview:self.dateView];
[contentView addSubview:self.tableView];
}
-(void)setUserId:(NSString *)userId{
_userId = userId;
self.page = 1;
[self getList];
}
-(void)getList{
__weak typeof(self) weakSelf = self;
[QXMineNetwork getFamilyEarningWithUserId:self.userId successBlock:^(NSArray<QXFamilyEarningModel *> * _Nonnull list) {
__strong typeof(weakSelf) strongSelf = weakSelf;
if (!strongSelf) {
NSLog(@"⚠️ self has been deallocated, skipping hide operation");
return;
}
if (strongSelf.page == 1) {
[strongSelf.dataArray removeAllObjects];
}
[strongSelf.dataArray addObjectsFromArray:list];
[strongSelf.tableView reloadData];
if (list.count == 0) {
strongSelf.tableView.mj_footer.state = MJRefreshStateNoMoreData;
}else{
[strongSelf.tableView.mj_footer endRefreshing];
}
[strongSelf.tableView.mj_header endRefreshing];
} failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) {
dispatch_async(dispatch_get_main_queue(), ^{
__strong typeof(weakSelf) strongSelf = weakSelf;
if (strongSelf) {
[strongSelf.tableView.mj_header endRefreshing];
[strongSelf.tableView.mj_footer endRefreshing];
}
});
}];
//
// }];
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return self.dataArray.count;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
QXFamilyPriceRecordCell *cell = [QXFamilyPriceRecordCell cellWithTableView:tableView];
cell.model = self.dataArray[indexPath.row];
return cell;
}
#pragma mark - QXWalletDateViewDelegate
-(void)didSelectedStartDate:(NSString *)startDateString startDate:(NSDate *)startDate endDateString:(NSString *)endDateString endDate:(NSDate *)endDate{
QXLOG(@"开始时间-%@ 结束时间-%@",startDateString,endDateString);
self.startTime = startDateString;
self.endTime = endDateString;
self.page = 1;
[self getList];
}
-(QXWalletDateView *)dateView{
if (!_dateView) {
_dateView = [[QXWalletDateView alloc] initWithFrame:CGRectMake(12, 12, SCREEN_WIDTH-32-24, 38)];
_dateView.delegate = self;
}
return _dateView;
}
-(UITableView *)tableView{
if (!_tableView) {
_tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, self.dateView.bottom+10, SCREEN_WIDTH-32, self.contentView.height - self.dateView.bottom-10) style:(UITableViewStylePlain)];
_tableView.dataSource = self;
_tableView.delegate = self;
_tableView.backgroundColor = [UIColor whiteColor];
_tableView.tableFooterView = [UIView new];
_tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
_tableView.rowHeight = 107;
MJWeakSelf
_tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
weakSelf.page = 1;
[weakSelf getList];
}];
_tableView.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingBlock:^{
weakSelf.page++;
[weakSelf getList];
}];
}
return _tableView;
}
@end

View File

@@ -0,0 +1,17 @@
//
// QXFamilySubViewController.h
// QXLive
//
// Created by 启星 on 2025/11/26.
//
#import "QXBaseViewController.h"
NS_ASSUME_NONNULL_BEGIN
@interface QXFamilySubViewController : QXBaseViewController<JXCategoryListContentViewDelegate>
@property (nonatomic,assign)NSInteger index;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,145 @@
//
// QXFamilySubViewController.m
// QXLive
//
// Created by on 2025/11/26.
//
#import "QXFamilySubViewController.h"
#import "QXFamilyMemberCell.h"
#import "QXFamilyTopCell.h"
#import "QXMineNetwork.h"
@interface QXFamilySubViewController ()<UITableViewDelegate,UITableViewDataSource>
@property (nonatomic,strong)UITableView *tableView;
@property (nonatomic,strong)QXFamilyModel *model;
@end
@implementation QXFamilySubViewController
-(UIView *)listView{
return self.view;
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
}
- (void)initSubViews{
self.bgImageHidden = YES;
self.view.backgroundColor = RGB16(0x102477);
[self.view addSubview:self.tableView];
}
-(void)viewDidLayoutSubviews{
[super viewDidLayoutSubviews];
_tableView.frame = self.view.bounds;
}
-(void)setIndex:(NSInteger)index{
_index = index;
[self getList];
}
-(void)getList{
BOOL isJoin = YES;
if (self.index == 0) {
isJoin = YES;
}else{
isJoin = NO;
}
MJWeakSelf
[QXMineNetwork getMyFamilyIsJoin:isJoin successBlock:^(QXFamilyModel * _Nonnull model) {
weakSelf.model = model;
[weakSelf.tableView reloadData];
[weakSelf.tableView.mj_header endRefreshing];
} failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) {
}];
}
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
if (self.model) {
return 2;
}
return 0;
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
if (section == 0) {
return 1;
}else{
return self.model.group_members_lists.count;
}
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
if (indexPath.section == 0) {
QXFamilyTopCell *cell = [QXFamilyTopCell cellWithTableView:tableView];
cell.model = self.model;
return cell;
}else{
QXFamilyMemberCell *cell = [QXFamilyMemberCell cellWithTableView:tableView];
cell.model = self.model.group_members_lists[indexPath.row];
return cell;
}
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
if (indexPath.section == 0) {
return 180;
}else{
return 176;
}
}
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
if (section == 0) {
return [UIView new];
}else{
UIView *header = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.width, 50)];
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"family_list_section_bg"]];
UILabel *titleLabel = [[UILabel alloc] init];
titleLabel.font = [UIFont boldSystemFontOfSize:16];
titleLabel.textColor = RGB16(0xffffff);
[header addSubview:imageView];
[header addSubview:titleLabel];
[imageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.mas_equalTo(132);
make.height.mas_equalTo(36);
make.centerX.centerY.equalTo(header);
}];
titleLabel.text = @"家族成员";
[titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.equalTo(header);
make.centerY.equalTo(header).offset(2);
}];
return header;
}
}
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
if (section == 0) {
return 0;
}
return 50;
}
-(UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section{
return [UIView new];
}
-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
return 0;
}
-(UITableView *)tableView{
if (!_tableView) {
_tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, self.view.height) style:(UITableViewStyleGrouped)];
_tableView.dataSource = self;
_tableView.delegate = self;
_tableView.backgroundColor = [UIColor clearColor];
_tableView.tableFooterView = [UIView new];
_tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
if (@available(iOS 15.0, *)) {
_tableView.sectionHeaderTopPadding = 0;
} else {
// Fallback on earlier versions
}
MJWeakSelf
_tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
[weakSelf getList];
}];
}
return _tableView;
}
@end

View File

@@ -0,0 +1,16 @@
//
// QXFamilyViewController.h
// QXLive
//
// Created by 启星 on 2025/11/26.
//
#import "QXBaseViewController.h"
NS_ASSUME_NONNULL_BEGIN
@interface QXFamilyViewController : QXBaseViewController
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,88 @@
//
// QXFamilyViewController.m
// QXLive
//
// Created by on 2025/11/26.
//
#import "QXFamilyViewController.h"
#import "QXFamilySubViewController.h"
@interface QXFamilyViewController ()<JXCategoryViewDelegate,JXCategoryListContainerViewDelegate>
@property (nonatomic,strong)UIImageView *topImageView;
@property (nonatomic,strong)JXCategoryTitleView *categoryView;
@property (nonatomic,strong)JXCategoryListContainerView *containerView;
@property (nonatomic,strong)NSMutableArray *titles;
@end
@implementation QXFamilyViewController
- (void)viewDidLoad {
self.isNoChangeBgImage = YES;
[super viewDidLoad];
// Do any additional setup after loading the view.
}
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:NO animated:YES];
self.navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName:RGB16(0xffffff)};
}
-(void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
self.navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName:RGB16(0x000000)};
}
-(void)setNavgationItems{
[super setNavgationItems];
self.navigationItem.title = QXText(@"家族");
self.navigationTintColor = RGB16(0xffffff);
}
- (void)initSubViews{
self.titles = [NSMutableArray arrayWithArray:@[@"我的家族",@"我加入的家族"]];
self.topImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"mine_family_top_bg"]];
self.topImageView.frame = CGRectMake(0, 0, SCREEN_WIDTH, ScaleWidth(435));
[self.view addSubview:self.topImageView];
self.view.backgroundColor = RGB16(0x102477);
self.categoryView = [[JXCategoryTitleView alloc] init];
self.categoryView.frame = CGRectMake((self.view.width-246)/2, NavContentHeight+ScaleWidth(236), 246, 38);
self.categoryView.delegate = self;
self.categoryView.titles = self.titles;
self.categoryView.backgroundColor = RGB16A(0x000000, 0.2);
[self.categoryView addRoundedCornersWithRadius:19];
self.categoryView.titleSelectedColor = [UIColor colorWithHexString:@"#333333"];
self.categoryView.titleColor = [UIColor colorWithHexString:@"#ffffff"];
self.categoryView.cellWidth = 123;
self.categoryView.contentEdgeInsetLeft = 0;
self.categoryView.cellSpacing = 0;
self.categoryView.contentEdgeInsetLeft = 0;
// self.categoryView.titleLabelZoomScale = 1.1;
// self.categoryView.titleLabelZoomEnabled = YES;
self.categoryView.titleFont = [UIFont boldSystemFontOfSize:14];
self.categoryView.titleSelectedFont = [UIFont boldSystemFontOfSize:14];
self.categoryView.averageCellSpacingEnabled = NO;
JXCategoryIndicatorBackgroundView *indicatorView = [[JXCategoryIndicatorBackgroundView alloc] init];
indicatorView.indicatorWidth = 123;
indicatorView.indicatorHeight = 38;
indicatorView.indicatorCornerRadius = 19;
indicatorView.indicatorColor = RGB16(0xA4FFB8);
self.categoryView.indicators = @[indicatorView];
self.containerView = [[JXCategoryListContainerView alloc] initWithType:(JXCategoryListContainerType_CollectionView) delegate:self];
self.containerView.frame = CGRectMake(0, self.categoryView.bottom+8, SCREEN_WIDTH, SCREEN_HEIGHT-self.categoryView.bottom-8);
[self.view addSubview:self.categoryView];
[self.view addSubview:self.containerView];
self.categoryView.listContainer = self.containerView;
}
-(NSInteger)numberOfListsInlistContainerView:(JXCategoryListContainerView *)listContainerView{
return self.titles.count;
}
-(id<JXCategoryListContentViewDelegate>)listContainerView:(JXCategoryListContainerView *)listContainerView initListForIndex:(NSInteger)index{
QXFamilySubViewController *vc = [[QXFamilySubViewController alloc] init];
vc.index = index;
return vc;
}
@end

View File

@@ -57,14 +57,19 @@
[self.navigationController pushViewController:vc animated:YES]; [self.navigationController pushViewController:vc animated:YES];
} }
-(void)getPriceData{ -(void)getPriceData{
MJWeakSelf __weak typeof(self) weakSelf = self;
[QXMineNetwork roomWaterDetailWithRoomId:self.room_id start_time:self.startTime end_time:self.endTime page:self.page type:self.type successBlock:^(QXRoomDetailModel * _Nonnull model) { [QXMineNetwork roomWaterDetailWithRoomId:self.room_id start_time:self.startTime end_time:self.endTime page:self.page type:self.type successBlock:^(QXRoomDetailModel * _Nonnull model) {
weakSelf.headerView.model = model; __strong typeof(weakSelf) strongSelf = weakSelf;
if (weakSelf.page == 1) { if (!strongSelf) {
[weakSelf.dict removeAllObjects]; NSLog(@"⚠️ self has been deallocated, skipping hide operation");
return;
}
strongSelf.headerView.model = model;
if (strongSelf.page == 1) {
[strongSelf.dict removeAllObjects];
} }
NSArray *arr = [weakSelf.dict allKeys]; NSArray *arr = [strongSelf.dict allKeys];
for (QXRoomWaterModel*md in model.list) { for (QXRoomWaterModel*md in model.list) {
BOOL haveKey = NO; BOOL haveKey = NO;
for (NSString *s in arr) { for (NSString *s in arr) {
@@ -75,10 +80,10 @@
} }
if (!haveKey) { if (!haveKey) {
// keyjson // keyjson
[weakSelf.dict setObject:[md yy_modelToJSONString] forKey:md.time]; [strongSelf.dict setObject:[md yy_modelToJSONString] forKey:md.time];
}else{ }else{
// //
NSString *json = [weakSelf.dict objectForKey:md.time]; NSString *json = [strongSelf.dict objectForKey:md.time];
// //
QXRoomWaterModel *m = [QXRoomWaterModel yy_modelWithJSON:json]; QXRoomWaterModel *m = [QXRoomWaterModel yy_modelWithJSON:json];
// //
@@ -88,10 +93,10 @@
// //
m.list = newArr; m.list = newArr;
// //
[weakSelf.dict setObject:[m yy_modelToJSONString] forKey:md.time]; [strongSelf.dict setObject:[m yy_modelToJSONString] forKey:md.time];
} }
} }
NSArray *keys = [weakSelf.dict.allKeys sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) { NSArray *keys = [strongSelf.dict.allKeys sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) {
// NSString *s1 = obj1; // NSString *s1 = obj1;
// NSString *s2 = obj2; // NSString *s2 = obj2;
NSDateFormatter *dateFormatter1 = [[NSDateFormatter alloc] init]; NSDateFormatter *dateFormatter1 = [[NSDateFormatter alloc] init];
@@ -110,18 +115,23 @@
return NSOrderedSame; return NSOrderedSame;
} }
}]; }];
self.allDateArray = [NSMutableArray arrayWithArray:keys]; strongSelf.allDateArray = [NSMutableArray arrayWithArray:keys];
[weakSelf.tableView reloadData]; [strongSelf.tableView reloadData];
[weakSelf.tableView.mj_header endRefreshing]; [strongSelf.tableView.mj_header endRefreshing];
if (model.list.count == 0) { if (model.list.count == 0) {
weakSelf.tableView.mj_footer.state = MJRefreshStateNoMoreData; strongSelf.tableView.mj_footer.state = MJRefreshStateNoMoreData;
}else{ }else{
[weakSelf.tableView.mj_footer endRefreshing]; [strongSelf.tableView.mj_footer endRefreshing];
} }
} failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) { } failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) {
showToast(msg); dispatch_async(dispatch_get_main_queue(), ^{
[weakSelf.tableView.mj_footer endRefreshing]; __strong typeof(weakSelf) strongSelf = weakSelf;
[weakSelf.tableView.mj_header endRefreshing]; if (strongSelf) {
showToast(msg);
[strongSelf.tableView.mj_header endRefreshing];
[strongSelf.tableView.mj_footer endRefreshing];
}
});
}]; }];
} }

View File

@@ -74,15 +74,22 @@
if (self.model == nil) { if (self.model == nil) {
return 0; return 0;
} }
return 3; if (self.model.tasks.teacher_tasks.count > 0) {
return 4;
}else{
return 3;
}
} }
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
if (section == 0) { if (section == 0) {
return self.model.tasks.daily_tasks.count; return self.model.tasks.daily_tasks.count;
}else if(section == 1){ }else if(section == 1){
return self.model.tasks.daily_tasks_special.count; return self.model.tasks.daily_tasks_special.count;
}else{ }else if(section == 2){
return self.model.tasks.usual_tasks.count; return self.model.tasks.usual_tasks.count;
}else{
return self.model.tasks.teacher_tasks.count;
} }
} }
@@ -93,8 +100,10 @@
model = self.model.tasks.daily_tasks[indexPath.row]; model = self.model.tasks.daily_tasks[indexPath.row];
}else if(indexPath.section == 1){ }else if(indexPath.section == 1){
model = self.model.tasks.daily_tasks_special[indexPath.row]; model = self.model.tasks.daily_tasks_special[indexPath.row];
}else{ }else if(indexPath.section == 2){
model = self.model.tasks.usual_tasks[indexPath.row]; model = self.model.tasks.usual_tasks[indexPath.row];
}else{
model = self.model.tasks.teacher_tasks[indexPath.row];
} }
cell.model = model; cell.model = model;
return cell; return cell;
@@ -110,8 +119,10 @@
titleLabel.text = QXText(@"每日任务"); titleLabel.text = QXText(@"每日任务");
}else if(section == 1){ }else if(section == 1){
titleLabel.text = QXText(@"特殊任务"); titleLabel.text = QXText(@"特殊任务");
}else{ }else if(section == 2){
titleLabel.text = QXText(@"平台任务"); titleLabel.text = QXText(@"平台任务");
}else{
titleLabel.text = QXText(@"师徒任务");
} }
[header addSubview:titleLabel]; [header addSubview:titleLabel];
return header; return header;

View File

@@ -40,22 +40,33 @@
// [self.dataArray addObject:@""]; // [self.dataArray addObject:@""];
// [self.tableView reloadData]; // [self.tableView reloadData];
// //
MJWeakSelf __weak typeof(self) weakSelf = self;
[QXMineNetwork roomCoinOrDiamondDetailWithPage:self.page in_out_type:[NSString stringWithFormat:@"%ld",self.type+1] start_time:self.startTime end_time:self.endTime gift_type:[NSString stringWithFormat:@"%ld",self.waterType+1] successBlock:^(NSArray<QXCoinDetailModel *> * _Nonnull list) { [QXMineNetwork roomCoinOrDiamondDetailWithPage:self.page in_out_type:[NSString stringWithFormat:@"%ld",self.type+1] start_time:self.startTime end_time:self.endTime gift_type:[NSString stringWithFormat:@"%ld",self.waterType+1] successBlock:^(NSArray<QXCoinDetailModel *> * _Nonnull list) {
if (weakSelf.page == 1) { __strong typeof(weakSelf) strongSelf = weakSelf;
[weakSelf.dataArray removeAllObjects]; if (!strongSelf) {
NSLog(@"⚠️ self has been deallocated, skipping hide operation");
return;
} }
[weakSelf.dataArray addObjectsFromArray:list]; if (strongSelf.page == 1) {
[weakSelf.tableView reloadData]; [strongSelf.dataArray removeAllObjects];
}
[strongSelf.dataArray addObjectsFromArray:list];
[strongSelf.tableView reloadData];
if (list.count == 0) { if (list.count == 0) {
weakSelf.tableView.mj_footer.state = MJRefreshStateNoMoreData; strongSelf.tableView.mj_footer.state = MJRefreshStateNoMoreData;
}else{ }else{
[weakSelf.tableView.mj_footer endRefreshing]; [strongSelf.tableView.mj_footer endRefreshing];
} }
[weakSelf.tableView.mj_header endRefreshing]; [strongSelf.tableView.mj_header endRefreshing];
} failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) { } failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) {
[weakSelf.tableView.mj_header endRefreshing]; dispatch_async(dispatch_get_main_queue(), ^{
[weakSelf.tableView.mj_footer endRefreshing]; __strong typeof(weakSelf) strongSelf = weakSelf;
if (strongSelf) {
[strongSelf.tableView.mj_header endRefreshing];
[strongSelf.tableView.mj_footer endRefreshing];
}
});
}]; }];
} }
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{

View File

@@ -43,22 +43,32 @@
self.page = 1; self.page = 1;
} }
-(void)getData{ -(void)getData{
MJWeakSelf __weak typeof(self) weakSelf = self;
[QXMineNetwork walletWithDrawRecordWithPage:self.page start_time:self.startTime end_time:self.endTime SuccessBlock:^(NSArray<QXWithDrawRecordModel *> * _Nonnull list) { [QXMineNetwork walletWithDrawRecordWithPage:self.page start_time:self.startTime end_time:self.endTime SuccessBlock:^(NSArray<QXWithDrawRecordModel *> * _Nonnull list) {
if (weakSelf.page == 1) { __strong typeof(weakSelf) strongSelf = weakSelf;
[weakSelf.dataArray removeAllObjects]; if (!strongSelf) {
NSLog(@"⚠️ self has been deallocated, skipping hide operation");
return;
} }
[weakSelf.dataArray addObjectsFromArray:list]; if (strongSelf.page == 1) {
[weakSelf.tableView reloadData]; [strongSelf.dataArray removeAllObjects];
}
[strongSelf.dataArray addObjectsFromArray:list];
[strongSelf.tableView reloadData];
if (list.count == 0) { if (list.count == 0) {
weakSelf.tableView.mj_footer.state = MJRefreshStateNoMoreData; strongSelf.tableView.mj_footer.state = MJRefreshStateNoMoreData;
}else{ }else{
[weakSelf.tableView.mj_footer endRefreshing]; [strongSelf.tableView.mj_footer endRefreshing];
} }
[weakSelf.tableView.mj_header endRefreshing]; [strongSelf.tableView.mj_header endRefreshing];
} failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) { } failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) {
[weakSelf.tableView.mj_header endRefreshing]; dispatch_async(dispatch_get_main_queue(), ^{
[weakSelf.tableView.mj_footer endRefreshing]; __strong typeof(weakSelf) strongSelf = weakSelf;
if (strongSelf) {
[strongSelf.tableView.mj_header endRefreshing];
[strongSelf.tableView.mj_footer endRefreshing];
}
});
}]; }];
} }

View File

@@ -48,6 +48,7 @@ NS_ASSUME_NONNULL_BEGIN
/// 平台任务列表 /// 平台任务列表
@property(nonatomic,strong)NSArray <QXDayTaskListModel*>*usual_tasks; @property(nonatomic,strong)NSArray <QXDayTaskListModel*>*usual_tasks;
@property(nonatomic,strong)NSArray <QXDayTaskListModel*>*teacher_tasks;
@end @end
@@ -74,6 +75,8 @@ NS_ASSUME_NONNULL_BEGIN
@property(nonatomic,strong)NSString *from_id; @property(nonatomic,strong)NSString *from_id;
/// 0 记录次数 1 计时 /// 0 记录次数 1 计时
@property(nonatomic,strong)NSString *is_time; @property(nonatomic,strong)NSString *is_time;
/// 奖励类型 1金币 2钻石
@property(nonatomic,strong)NSString *reward_type;
@end @end

View File

@@ -28,6 +28,7 @@
@"daily_tasks" : @"QXDayTaskListModel", @"daily_tasks" : @"QXDayTaskListModel",
@"usual_tasks" : @"QXDayTaskListModel", @"usual_tasks" : @"QXDayTaskListModel",
@"daily_tasks_special": @"QXDayTaskListModel", @"daily_tasks_special": @"QXDayTaskListModel",
@"teacher_tasks": @"QXDayTaskListModel",
}; };
} }

View File

@@ -0,0 +1,86 @@
//
// QXFamilyModel.h
// QXLive
//
// Created by 启星 on 2025/11/27.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@class QXFamilyMemberModel;
@interface QXFamilyModel : NSObject
/// 群组id
@property(nonatomic,strong)NSString *group_id;
/// 家族名称
@property(nonatomic,strong)NSString *name;
/// 族长id群主id
@property(nonatomic,strong)NSString *user_id;
/// 签约次数(群组人数)
@property(nonatomic,strong)NSString *group_members_num;
/// 总计收益
@property(nonatomic,strong)NSString *group_earnings;
/// 族长信息
@property(nonatomic,strong)QXUserModel *group_owner_info;
/// 家族成员
@property(nonatomic,strong)NSArray<QXFamilyMemberModel*> *group_members_lists;
@end
@interface QXFamilyMemberModel : NSObject
/// 身价
@property(nonatomic,strong)NSString *market_value;
/// 0 离线 1 在线
@property(nonatomic,assign)NSInteger is_online;
/// 昵称
@property(nonatomic,strong)NSString *nickname;
/// 头像
@property(nonatomic,strong)NSString *avatar;
/// 用户code
@property(nonatomic,strong)NSString *user_code;
/// 用户id
@property(nonatomic,strong)NSString *user_id;
/// 剩余多少天
@property(nonatomic,strong)NSString *end_time;
/// 剩余多少天
@property(nonatomic,strong)NSString *end_day;
/// 头像框
@property(nonatomic,strong)NSString *dress;
/// 头像框
@property(nonatomic,strong)NSArray *icon;
/// 麦圈
@property(nonatomic,strong)NSString *mic_cycle;
/// 爵位
@property(nonatomic,strong)NSString *nobility_image;
/// 昵称颜色
@property(nonatomic,strong)NSString *nickname_color;
/// 免费续签次数
@property(nonatomic,strong)NSString *free_renewal;
/// 今日收礼收益
@property(nonatomic,strong)NSString *today_earnings;
/// 昨日收礼收益
@property(nonatomic,strong)NSString *yesterday_earnings;
/// 是否显示续约按钮 1显示 0不显示
@property(nonatomic,strong)NSString *is_show_sign;
@end
@interface QXFamilyEarningModel : NSObject
/// 列表 id
@property(nonatomic,strong)NSString *id;
/// 用户昵称
@property(nonatomic,strong)NSString *nickname;
/// 头像
@property(nonatomic,strong)NSString *avatar;
/// 用户code
@property(nonatomic,strong)NSString *user_code;
/// 收益
@property(nonatomic,strong)NSString *earnings;
/// 时间
@property(nonatomic,strong)NSString *createtime;
/// 礼物名称
@property(nonatomic,strong)NSString *gift_name;
/// 礼物价格
@property(nonatomic,strong)NSString *gift_price;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,31 @@
//
// QXFamilyModel.m
// QXLive
//
// Created by on 2025/11/27.
//
#import "QXFamilyModel.h"
@implementation QXFamilyModel
+(NSDictionary<NSString *,id> *)modelContainerPropertyGenericClass{
return @{
@"group_owner_info" : @"QXFamilyMemberModel",
@"group_members_lists" : @"QXFamilyMemberModel",
};
}
@end
@implementation QXFamilyMemberModel
@end
@implementation QXFamilyEarningModel
@end

View File

@@ -11,7 +11,7 @@
#import "QXUserSongListModel.h" #import "QXUserSongListModel.h"
NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_BEGIN
@class QXRoomInfoModel,QXRoomPitModel,QXRoomOwnerModel,QXHeadLineModel,QXRoomAuction,QXRoomAuctionUser,QXRoomCpUser,QXRoomPkInfo,QXRoomFriendInfo,QXRoomFriendHeartListModel,QXRoomActivitySubModel,QXRoomActivityModel,QXSingerInfo; @class QXRoomInfoModel,QXRoomPitModel,QXRoomOwnerModel,QXHeadLineModel,QXRoomAuction,QXRoomAuctionUser,QXRoomCpUser,QXRoomPkInfo,QXRoomFriendInfo,QXRoomFriendHeartListModel,QXRoomActivitySubModel,QXRoomActivityModel,QXSingerInfo,QXRoomSignInfo;
@interface QXRoomModel : NSObject @interface QXRoomModel : NSObject
/// 房间信息 /// 房间信息
@property (nonatomic,strong)QXRoomInfoModel *room_info; @property (nonatomic,strong)QXRoomInfoModel *room_info;
@@ -33,6 +33,8 @@ NS_ASSUME_NONNULL_BEGIN
@property (nonatomic,strong)QXRoomPkInfo *pk_info; @property (nonatomic,strong)QXRoomPkInfo *pk_info;
/// 交友房信息 /// 交友房信息
@property (nonatomic,strong)QXRoomFriendInfo *friend_info; @property (nonatomic,strong)QXRoomFriendInfo *friend_info;
/// 签约房信息
@property (nonatomic,strong)QXRoomSignInfo *sign_info;
/// k歌麦位 /// k歌麦位
@property (nonatomic,strong)NSArray< QXRoomPitModel*> *song_pit_list; @property (nonatomic,strong)NSArray< QXRoomPitModel*> *song_pit_list;
/// 活动 /// 活动
@@ -385,4 +387,19 @@ NS_ASSUME_NONNULL_BEGIN
@property (nonatomic,strong)QXUserSongListModel *song_info; @property (nonatomic,strong)QXUserSongListModel *song_info;
@property (nonatomic,strong)QXUserSongListModel *next_song_info; @property (nonatomic,strong)QXUserSongListModel *next_song_info;
@end @end
@interface QXRoomSignInfo :NSObject
/// 0 未开始 1进行中
@property (nonatomic,strong)NSString *sign_status;
/// 签约天数
@property (nonatomic,strong)NSString *sign_day;
/// 当前身价
@property (nonatomic,strong)NSString *current_body_value;
/// 倒计时 时间戳
@property (nonatomic,strong)NSString *end_time;
/// 签约场次id
@property (nonatomic,strong)NSString *sign_id;
@end
NS_ASSUME_NONNULL_END NS_ASSUME_NONNULL_END

View File

@@ -22,6 +22,7 @@
@"friend_info":@"QXRoomFriendInfo", @"friend_info":@"QXRoomFriendInfo",
@"gift_cycle":@"QXRoomActivityModel", @"gift_cycle":@"QXRoomActivityModel",
@"singer_info":@"QXSingerInfo", @"singer_info":@"QXSingerInfo",
@"sign_info":@"QXRoomSignInfo",
}; };
} }
@@ -155,4 +156,11 @@
}; };
} }
@end
@implementation QXRoomSignInfo
@end @end

View File

@@ -32,6 +32,10 @@ NS_ASSUME_NONNULL_BEGIN
@property (nonatomic,strong)NSString *type; @property (nonatomic,strong)NSString *type;
/// 剩余时间 (天) /// 剩余时间 (天)
@property (nonatomic,strong)NSString *remaining_day; @property (nonatomic,strong)NSString *remaining_day;
/// 多少个
@property (nonatomic,strong)NSString *num;
/// 降身卡
@property (nonatomic,strong)NSString *ext_value;
@end @end

View File

@@ -7,7 +7,7 @@
#import <Foundation/Foundation.h> #import <Foundation/Foundation.h>
@class QXRelationshipListModel,QXUserCpInfoModel; @class QXRelationshipListModel,QXUserCpInfoModel,QXUserHeartBeatSpaceLogModel;
NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_BEGIN
@interface QXUserModel : NSObject @interface QXUserModel : NSObject
@@ -55,6 +55,8 @@ NS_ASSUME_NONNULL_BEGIN
@property (nonatomic,assign)NSInteger is_can_chat; @property (nonatomic,assign)NSInteger is_can_chat;
/// 需要充值金额 /// 需要充值金额
@property (nonatomic,strong)NSString* can_chat_money; @property (nonatomic,strong)NSString* can_chat_money;
/// 身价
@property (nonatomic,strong)NSString* market_value;
@end @end
@@ -272,11 +274,31 @@ NS_ASSUME_NONNULL_BEGIN
@property (nonatomic,strong)NSString *user_id2; @property (nonatomic,strong)NSString *user_id2;
@property (nonatomic,strong)NSString *level; @property (nonatomic,strong)NSString *level;
@property (nonatomic,strong)NSString *exp; @property (nonatomic,strong)NSString *exp;
@property (nonatomic,strong)NSString *next_level_exp;
@property (nonatomic,strong)NSString *createtime;
/// 挂件(装扮)地址 /// 挂件(装扮)地址
@property (nonatomic,strong)NSString *pendant; @property (nonatomic,strong)NSString *pendant;
/// 挂件上的头像位置0-上1-右上2-右3-右下4-下5-左下6-左7-左上' /// 挂件上的头像位置0-上1-右上2-右3-右下4-下5-左下6-左7-左上'
@property (nonatomic,strong)NSString *direction; @property (nonatomic,strong)NSString *direction;
@property (nonatomic,strong)QXUserModel *user_info1; @property (nonatomic,strong)QXUserModel *user_info1;
@property (nonatomic,strong)QXUserModel *user_info2; @property (nonatomic,strong)QXUserModel *user_info2;
@property (nonatomic,strong)NSArray< QXUserHeartBeatSpaceLogModel *>*gift_log;
@end
@interface QXUserHeartBeatSpaceLogModel : NSObject
@property (nonatomic,strong)NSString *id;
@property (nonatomic,strong)NSString *room_id;
@property (nonatomic,strong)NSString *from_user_id;
@property (nonatomic,strong)NSString *to_user_id;
@property (nonatomic,strong)NSString *gift_id;
@property (nonatomic,strong)NSString *cp_zone_id;
@property (nonatomic,strong)NSString *exp;
@property (nonatomic,strong)NSString *exp_total;
@property (nonatomic,strong)NSString *createtime;
@property (nonatomic,strong)NSString *gift_name;
@property (nonatomic,strong)NSString *num;
@property (nonatomic,strong)NSString *remark;
@property (nonatomic,strong)QXUserModel *from_user_info;
@property (nonatomic,strong)QXUserModel *to_user_info;
@end @end
NS_ASSUME_NONNULL_END NS_ASSUME_NONNULL_END

View File

@@ -93,7 +93,22 @@
// @"zhenai" : @"QXRelationshipListModel" // @"zhenai" : @"QXRelationshipListModel"
@"user_info1": @"QXUserModel", @"user_info1": @"QXUserModel",
@"user_info2": @"QXUserModel", @"user_info2": @"QXUserModel",
@"gift_log" : @"QXUserHeartBeatSpaceLogModel"
}; };
} }
@end
@implementation QXUserHeartBeatSpaceLogModel
+(NSDictionary<NSString *,id> *)modelContainerPropertyGenericClass{
return @{
// @"qinmi" : @"QXRelationshipListModel",
// @"zhenai" : @"QXRelationshipListModel"
@"from_user_info": @"QXUserModel",
@"to_user_info": @"QXUserModel",
};
}
@end @end

View File

@@ -30,6 +30,7 @@
#import "QXNobilityGetPriceModel.h" #import "QXNobilityGetPriceModel.h"
#import "QXUserSongListModel.h" #import "QXUserSongListModel.h"
#import "QXRoomBestFriendModel.h" #import "QXRoomBestFriendModel.h"
#import "QXFamilyModel.h"
NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_BEGIN
@@ -1281,6 +1282,101 @@ NS_ASSUME_NONNULL_BEGIN
successBlock:(void (^)(NSArray< QXRelationshipListModel*>* model))successBlock successBlock:(void (^)(NSArray< QXRelationshipListModel*>* model))successBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock; failBlock:(void (^)(NSError * error, NSString * msg))failBlock;
/**
亲密空间
*/
+(void)heartBeatUserInfoWithUserId:(NSString*)userId
page:(NSInteger)page
successBlock:(void (^)(QXUserCpInfoModel* model))successBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock;
/**
我的家族|我加入的家族
*/
+(void)getMyFamilyIsJoin:(BOOL)isJoin
successBlock:(void (^)(QXFamilyModel* model))successBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock;
/**
家族收益详情
*/
+(void)getFamilyEarningWithUserId:(NSString*)userId
successBlock:(void (^)(NSArray<QXFamilyEarningModel*>* list))successBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock;
/**
签约出价价格列表
userId 当前在签约麦位的用户ID
*/
+(void)signCoinListWithSignId:(NSString*)signId
successBlock:(void (^)(NSArray<NSString*>* list))successBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock;
/**
签约出价
userId 当前在签约麦位的用户ID
sign_value 出价价格
sign_id 场次id
*/
+(void)signCoinWithSign_value:(NSString*)sign_value
sign_id:(NSString*)sign_id
successBlock:(void (^)(NSDictionary* dict))successBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock;
/**
签约开始
userId 当前在签约麦位的用户ID
*/
+(void)signStartWithRoomId:(NSString*)roomId
userId:(NSString*)userId
successBlock:(void (^)(NSDictionary* dict))successBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock;
/**
签约结束
userId 当前在签约麦位的用户ID
signId 场次id
*/
+(void)signEndWithSignId:(NSString*)signId
successBlock:(void (^)(NSDictionary* dict))successBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock;
/**
签约延时
userId 当前在签约麦位的用户ID
signId 场次id
*/
+(void)signDelayWithSignId:(NSString*)signId
successBlock:(void (^)(NSDictionary* dict))successBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock;
/**
才艺列表
*/
+(void)signGeyPlayListSuccessBlock:(void (^)(NSArray* list))successBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock;
/**
免费续约
userId 当前在签约麦位的用户ID
*/
+(void)signFreeResignWithUserId:(NSString*)userId
successBlock:(void (^)(NSDictionary* dict))successBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock;
/**
续签
userId 当前在签约麦位的用户ID
*/
+(void)signCoinResignWithUserId:(NSString*)userId
successBlock:(void (^)(NSDictionary* dict))successBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock;
@end @end

View File

@@ -73,7 +73,7 @@
successBlock:(void (^)(QXUserHomeModel * _Nonnull))successBlock successBlock:(void (^)(QXUserHomeModel * _Nonnull))successBlock
failBlock:(void (^)(NSError * _Nonnull, NSString * _Nonnull))failBlock{ failBlock:(void (^)(NSError * _Nonnull, NSString * _Nonnull))failBlock{
NSDictionary *parameters =@{ NSDictionary *parameters =@{
@"user_id":user_id, @"user_id":user_id?:@"",
}; };
[[QXRequset shareInstance] postWithUrl:QXGetUserInfo parameters:parameters needCache:NO success:^(id responseObject) { [[QXRequset shareInstance] postWithUrl:QXGetUserInfo parameters:parameters needCache:NO success:^(id responseObject) {
if (successBlock) { if (successBlock) {
@@ -285,7 +285,7 @@
successBlock:(void (^)(NSArray<QXDynamicModel *> * _Nonnull))successBlock successBlock:(void (^)(NSArray<QXDynamicModel *> * _Nonnull))successBlock
failBlock:(void (^)(NSError * _Nonnull, NSString * _Nonnull))failBlock{ failBlock:(void (^)(NSError * _Nonnull, NSString * _Nonnull))failBlock{
NSDictionary *parameters =@{ NSDictionary *parameters =@{
@"user_id":user_id, @"user_id":user_id?:@"",
@"page":[NSNumber numberWithInteger:page] @"page":[NSNumber numberWithInteger:page]
}; };
[[QXRequset shareInstance] postWithUrl:QXUserDynamic parameters:parameters needCache:NO success:^(id responseObject) { [[QXRequset shareInstance] postWithUrl:QXUserDynamic parameters:parameters needCache:NO success:^(id responseObject) {
@@ -2544,4 +2544,222 @@
failBlock(error,msg); failBlock(error,msg);
}]; }];
} }
/**
*/
+(void)heartBeatUserInfoWithUserId:(NSString*)userId
page:(NSInteger)page
successBlock:(void (^)(QXUserCpInfoModel* model))successBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock{
NSDictionary *parameters =@{
@"user_id":userId?:@"",
@"page":[NSNumber numberWithInteger:page]
};
[[QXRequset shareInstance] postWithUrl:QXHeartBeatSpace parameters:parameters needCache:NO success:^(id responseObject) {
if (successBlock) {
QXUserCpInfoModel *model = [QXUserCpInfoModel yy_modelWithJSON:responseObject[@"data"]];
successBlock(model);
}
} fail:^(NSError *error, NSString *msg, NSURLSessionDataTask *task) {
failBlock(error,msg);
}];
}
/**
|
*/
+(void)getMyFamilyIsJoin:(BOOL)isJoin
successBlock:(void (^)(QXFamilyModel* model))successBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock{
[[QXRequset shareInstance] getWithUrl:QXMyFamily parameters:@{} needCache:NO success:^(id responseObject) {
if (successBlock) {
QXFamilyModel *model = [QXFamilyModel yy_modelWithJSON:responseObject[@"data"]];
successBlock(model);
}
} fail:^(NSError *error, NSString *msg, NSURLSessionDataTask *task) {
failBlock(error,msg);
}];
}
/**
*/
+(void)getFamilyEarningWithUserId:(NSString*)userId
successBlock:(void (^)(NSArray<QXFamilyEarningModel*>* list))successBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock{
NSDictionary *parameters =@{
@"user_id":userId?:@"",
};
[[QXRequset shareInstance] postWithUrl:QXHeartBeatSpace parameters:parameters needCache:NO success:^(id responseObject) {
if (successBlock) {
NSArray *list = [NSArray yy_modelArrayWithClass:[QXFamilyEarningModel class] json:responseObject[@"data"]];
successBlock(list);
}
} fail:^(NSError *error, NSString *msg, NSURLSessionDataTask *task) {
failBlock(error,msg);
}];
}
/**
userId ID
*/
+(void)signCoinListWithSignId:(NSString *)signId successBlock:(void (^)(NSArray<NSString *> * _Nonnull))successBlock failBlock:(void (^)(NSError * _Nonnull, NSString * _Nonnull))failBlock{
NSDictionary *parameters =@{
@"sign_id":signId?:@"",
};
[[QXRequset shareInstance] postWithUrl:QXSignCoinList parameters:parameters needCache:NO success:^(id responseObject) {
if (successBlock) {
id object = responseObject[@"data"];
if ([object isKindOfClass:[NSArray class]]) {
successBlock(object);
}else{
successBlock([NSArray array]);
}
}
} fail:^(NSError *error, NSString *msg, NSURLSessionDataTask *task) {
failBlock(error,msg);
}];
}
/**
userId ID
sign_value
sign_id id
*/
+(void)signCoinWithSign_value:(NSString*)sign_value
sign_id:(NSString*)sign_id
successBlock:(void (^)(NSDictionary* dict))successBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock{
NSDictionary *parameters =@{
@"sign_value":sign_value?:@"",
@"sign_id":sign_id?:@""
};
[[QXRequset shareInstance] postWithUrl:QXSignSignCoin parameters:parameters needCache:NO success:^(id responseObject) {
if (successBlock) {
successBlock(responseObject[@"data"]);
}
} fail:^(NSError *error, NSString *msg, NSURLSessionDataTask *task) {
failBlock(error,msg);
}];
}
/**
userId ID
*/
+(void)signStartWithRoomId:(NSString*)roomId
userId:(NSString*)userId
successBlock:(void (^)(NSDictionary* dict))successBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock{
NSDictionary *parameters =@{
@"room_id":roomId?:@"",
@"user_id":userId?:@""
};
[[QXRequset shareInstance] postWithUrl:QXSignStartSign parameters:parameters needCache:NO success:^(id responseObject) {
if (successBlock) {
successBlock(responseObject[@"data"]);
}
} fail:^(NSError *error, NSString *msg, NSURLSessionDataTask *task) {
failBlock(error,msg);
}];
}
/**
userId ID
signId id
*/
+(void)signEndWithSignId:(NSString*)signId
successBlock:(void (^)(NSDictionary* dict))successBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock{
NSDictionary *parameters =@{
@"sign_id":signId?:@"",
};
[[QXRequset shareInstance] postWithUrl:QXSignEndSign parameters:parameters needCache:NO success:^(id responseObject) {
if (successBlock) {
successBlock(responseObject[@"data"]);
}
} fail:^(NSError *error, NSString *msg, NSURLSessionDataTask *task) {
failBlock(error,msg);
}];
}
/**
userId ID
signId id
*/
+(void)signDelayWithSignId:(NSString*)signId
successBlock:(void (^)(NSDictionary* dict))successBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock{
NSDictionary *parameters =@{
@"sign_id":signId?:@"",
};
[[QXRequset shareInstance] postWithUrl:QXSignDelaySign parameters:parameters needCache:NO success:^(id responseObject) {
if (successBlock) {
successBlock(responseObject[@"data"]);
}
} fail:^(NSError *error, NSString *msg, NSURLSessionDataTask *task) {
failBlock(error,msg);
}];
}
/**
*/
+(void)signGeyPlayListSuccessBlock:(void (^)(NSArray* list))successBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock{
[[QXRequset shareInstance] getWithUrl:QXSignPlayList parameters:@{} needCache:NO success:^(id responseObject) {
if (successBlock) {
successBlock(responseObject[@"data"]);
}
} fail:^(NSError *error, NSString *msg, NSURLSessionDataTask *task) {
failBlock(error,msg);
}];
}
/**
userId ID
*/
+(void)signFreeResignWithUserId:(NSString*)userId
successBlock:(void (^)(NSDictionary* dict))successBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock{
NSDictionary *parameters =@{
@"user_id":userId?:@"",
};
[[QXRequset shareInstance] postWithUrl:QXSignFreeResign parameters:parameters needCache:NO success:^(id responseObject) {
if (successBlock) {
successBlock(responseObject[@"data"]);
}
} fail:^(NSError *error, NSString *msg, NSURLSessionDataTask *task) {
failBlock(error,msg);
}];
}
/**
userId ID
*/
+(void)signCoinResignWithUserId:(NSString*)userId
successBlock:(void (^)(NSDictionary* dict))successBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock{
NSDictionary *parameters =@{
@"user_id":userId?:@"",
};
[[QXRequset shareInstance] postWithUrl:QXSignCoinResign parameters:parameters needCache:NO success:^(id responseObject) {
if (successBlock) {
successBlock(responseObject[@"data"]);
}
} fail:^(NSError *error, NSString *msg, NSURLSessionDataTask *task) {
failBlock(error,msg);
}];
}
@end @end

View File

@@ -0,0 +1,23 @@
//
// QXBodyPriceRuleView.h
// QXLive
//
// Created by 启星 on 2025/11/25.
//
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface QXBodyPriceRuleView : UIView
@property (weak, nonatomic) IBOutlet UILabel *currentPriceLabel;
@property (weak, nonatomic) IBOutlet UILabel *beyoundPriceLabel;
@property (weak, nonatomic) IBOutlet UILabel *recievePriceLabel;
@property (weak, nonatomic) IBOutlet UILabel *realPriceLabel;
@property (weak, nonatomic) IBOutlet UIButton *commitBtn;
@property (weak, nonatomic) IBOutlet UIButton *closeBtn;
@property (weak, nonatomic) IBOutlet UIView *bgView;
+(void)showInView:(UIView*)view;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,41 @@
//
// QXBodyPriceRuleView.m
// QXLive
//
// Created by on 2025/11/25.
//
#import "QXBodyPriceRuleView.h"
@implementation QXBodyPriceRuleView
+(void)showInView:(UIView*)view{
UINib *nib = [UINib nibWithNibName:@"QXBodyPriceRuleView" bundle:[NSBundle mainBundle]];
QXBodyPriceRuleView *ruleView = [nib instantiateWithOwner:nil options:nil].firstObject;
ruleView.frame = UIScreen.mainScreen.bounds;
ruleView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
ruleView.bgView.alpha = 0;
[view addSubview:ruleView];
[UIView animateWithDuration:0.2 animations:^{
ruleView.bgView.alpha = 1;
}completion:^(BOOL finished) {
}];
}
- (IBAction)closeAction:(id)sender {
[UIView animateWithDuration:0.2 animations:^{
self.bgView.alpha = 0;
}completion:^(BOOL finished) {
[self removeFromSuperview];
}];
}
- (IBAction)commitAction:(id)sender {
[UIView animateWithDuration:0.3 animations:^{
self.bgView.alpha = 0;
}completion:^(BOOL finished) {
[self removeFromSuperview];
}];
}
@end

View File

@@ -0,0 +1,386 @@
<?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_12" 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="System colors in document resources" minToolsVersion="11.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="QXBodyPriceRuleView">
<rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="bjS-Eu-Wht">
<rect key="frame" x="40.666666666666657" y="203.66666666666663" width="312" height="470"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="body_price_rule_bg" translatesAutoresizingMaskIntoConstraints="NO" id="0pu-br-WLc">
<rect key="frame" x="0.0" y="0.0" width="312" height="470"/>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="身价详情" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Cey-rm-4VM">
<rect key="frame" x="124.00000000000001" y="11" width="63.666666666666671" height="24"/>
<constraints>
<constraint firstAttribute="height" constant="24" id="QMU-XW-UiY"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="16"/>
<color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ag3-iq-BzI">
<rect key="frame" x="272" y="2" width="40" height="40"/>
<constraints>
<constraint firstAttribute="width" constant="40" id="1RM-bw-F5f"/>
<constraint firstAttribute="height" constant="40" id="jXb-VG-MeW"/>
</constraints>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<state key="normal" image="wallet_close"/>
<connections>
<action selector="closeAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="Kn0-Ed-x94"/>
</connections>
</button>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="r7a-Qi-IKE">
<rect key="frame" x="16" y="46" width="280" height="113"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="当前身价" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="zaH-Pt-FkB">
<rect key="frame" x="112" y="10.000000000000028" width="56" height="18"/>
<constraints>
<constraint firstAttribute="height" constant="18" id="c6c-Ff-k6z"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<color key="textColor" red="1" green="0.46666666666666667" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="1" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="yoB-8g-xXJ">
<rect key="frame" x="126.33333333333333" y="34.000000000000028" width="9.3333333333333286" height="28"/>
<constraints>
<constraint firstAttribute="height" constant="28" id="ZUT-FY-fDo"/>
</constraints>
<fontDescription key="fontDescription" type="system" weight="medium" pointSize="20"/>
<color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="room_upseat_coin" translatesAutoresizingMaskIntoConstraints="NO" id="yiz-ZZ-xxm">
<rect key="frame" x="137.66666666666669" y="39.000000000000028" width="18" height="18"/>
<constraints>
<constraint firstAttribute="height" constant="18" id="AN3-EC-ehA"/>
<constraint firstAttribute="width" constant="18" id="wI0-ag-JJ4"/>
</constraints>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="注每个用户默认身价是1金币收到礼物后按照比例进行换算身价" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="WwA-Jn-1rz">
<rect key="frame" x="16" y="68.000000000000028" width="248" height="39"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<color key="textColor" red="0.81176470588235294" green="0.61568627450980395" blue="0.25098039215686274" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
<constraints>
<constraint firstItem="zaH-Pt-FkB" firstAttribute="centerX" secondItem="r7a-Qi-IKE" secondAttribute="centerX" id="0oM-i5-9OG"/>
<constraint firstAttribute="bottom" secondItem="WwA-Jn-1rz" secondAttribute="bottom" constant="6" id="71t-4W-LuP"/>
<constraint firstItem="yiz-ZZ-xxm" firstAttribute="leading" secondItem="yoB-8g-xXJ" secondAttribute="trailing" constant="2" id="Ggm-C5-Wcb"/>
<constraint firstAttribute="height" constant="113" id="MH5-pp-kd7"/>
<constraint firstItem="yoB-8g-xXJ" firstAttribute="centerX" secondItem="r7a-Qi-IKE" secondAttribute="centerX" constant="-9" id="Saa-J0-KwU"/>
<constraint firstAttribute="trailing" secondItem="WwA-Jn-1rz" secondAttribute="trailing" constant="16" id="YcU-Q9-sKB"/>
<constraint firstItem="WwA-Jn-1rz" firstAttribute="leading" secondItem="r7a-Qi-IKE" secondAttribute="leading" constant="16" id="auv-o8-JaK"/>
<constraint firstItem="WwA-Jn-1rz" firstAttribute="top" secondItem="yoB-8g-xXJ" secondAttribute="bottom" constant="6" id="m3G-Qk-pBp"/>
<constraint firstItem="zaH-Pt-FkB" firstAttribute="top" secondItem="r7a-Qi-IKE" secondAttribute="top" constant="10" id="maZ-g1-7I4"/>
<constraint firstItem="yiz-ZZ-xxm" firstAttribute="centerY" secondItem="yoB-8g-xXJ" secondAttribute="centerY" id="rIl-iA-pcw"/>
<constraint firstItem="yoB-8g-xXJ" firstAttribute="top" secondItem="zaH-Pt-FkB" secondAttribute="bottom" constant="6" id="ywl-ba-UsO"/>
</constraints>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="layer.masksToBounds" value="YES"/>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="8"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="22W-Pg-BGs">
<rect key="frame" x="16" y="167" width="280" height="229"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="1qh-1U-0g1">
<rect key="frame" x="19.000000000000007" y="25" width="47.999999999999993" height="48"/>
<color key="backgroundColor" red="0.72156862745098038" green="0.92156862745098034" blue="0.97647058823529409" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="height" constant="48" id="Bvl-n0-GY5"/>
<constraint firstAttribute="width" constant="48" id="e9Z-Jy-yV7"/>
</constraints>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="layer.masksToBounds" value="YES"/>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="24"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="竞拍溢价" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="R5s-ew-2ma">
<rect key="frame" x="23.000000000000007" y="31.999999999999996" width="40" height="33.666666666666657"/>
<constraints>
<constraint firstAttribute="width" constant="40" id="55m-tS-xSt"/>
</constraints>
<fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
<color key="textColor" red="0.20392156862745098" green="0.54117647058823526" blue="0.83529411764705885" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="+" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="1nL-zB-s12">
<rect key="frame" x="79" y="35" width="12.666666666666671" height="28"/>
<constraints>
<constraint firstAttribute="height" constant="28" id="Npx-zw-09W"/>
</constraints>
<fontDescription key="fontDescription" type="system" weight="medium" pointSize="20"/>
<color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="pvx-IE-jQQ">
<rect key="frame" x="103.66666666666669" y="25" width="48" height="48"/>
<color key="backgroundColor" red="0.97254901960784312" green="0.90980392156862744" blue="0.78431372549019607" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="height" constant="48" id="9wK-lu-5ww"/>
<constraint firstAttribute="width" constant="48" id="oXU-Bh-nt7"/>
</constraints>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="layer.masksToBounds" value="YES"/>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="24"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="=" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="2Ef-wH-HNE">
<rect key="frame" x="163.66666666666669" y="34" width="12.666666666666657" height="28"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" weight="medium" pointSize="20"/>
<color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="收礼身价" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="FDt-UE-yKg">
<rect key="frame" x="107.66666666666669" y="31.999999999999996" width="40" height="33.666666666666657"/>
<constraints>
<constraint firstAttribute="width" constant="40" id="md1-1F-BXo"/>
</constraints>
<fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
<color key="textColor" red="0.92941176470588238" green="0.66666666666666663" blue="0.098039215686274508" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="TCX-JN-r9B">
<rect key="frame" x="189" y="13" width="72" height="72"/>
<color key="backgroundColor" red="0.6470588235294118" green="1" blue="0.76078431372549016" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="width" constant="72" id="UFB-82-XSq"/>
<constraint firstAttribute="height" constant="72" id="h6t-2i-vCw"/>
</constraints>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="layer.masksToBounds" value="YES"/>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="36"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="实际身价" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="TJG-ml-Bip">
<rect key="frame" x="200.00000000000003" y="27.333333333333314" width="50" height="43"/>
<constraints>
<constraint firstAttribute="width" constant="50" id="Kof-yq-JSa"/>
</constraints>
<fontDescription key="fontDescription" type="system" weight="medium" pointSize="18"/>
<color key="textColor" red="0.0" green="0.53725490196078429" blue="0.15294117647058825" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="dJ6-LR-vgw">
<rect key="frame" x="16" y="98" width="117" height="119"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="1RH-Mf-SWP">
<rect key="frame" x="0.0" y="0.0" width="117" height="24"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="竞拍溢价" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="uK0-7X-IBc">
<rect key="frame" x="34.333333333333329" y="4.3333333333333144" width="48" height="15"/>
<fontDescription key="fontDescription" type="system" pointSize="12"/>
<color key="textColor" red="0.20392156862745098" green="0.54117647058823526" blue="0.83529411764705885" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" red="0.68235294117647061" green="0.92941176470588238" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="height" constant="24" id="8em-ee-gLY"/>
<constraint firstItem="uK0-7X-IBc" firstAttribute="centerY" secondItem="1RH-Mf-SWP" secondAttribute="centerY" id="Q5j-gJ-Sxm"/>
<constraint firstItem="uK0-7X-IBc" firstAttribute="centerX" secondItem="1RH-Mf-SWP" secondAttribute="centerX" id="cha-7w-LSq"/>
</constraints>
</view>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="签约竞拍次数越多,签约成交比签约时身价更高,则竞拍溢价就越高" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="NRs-fX-FIN">
<rect key="frame" x="8" y="32" width="101" height="79"/>
<fontDescription key="fontDescription" type="system" pointSize="12"/>
<color key="textColor" red="0.29411764705882354" green="0.66274509803921566" blue="0.76862745098039209" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" red="0.89803921568627454" green="0.96862745098039216" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="width" constant="117" id="4rA-dE-Rhv"/>
<constraint firstAttribute="trailing" secondItem="1RH-Mf-SWP" secondAttribute="trailing" id="5da-35-QcR"/>
<constraint firstItem="NRs-fX-FIN" firstAttribute="top" secondItem="1RH-Mf-SWP" secondAttribute="bottom" constant="8" id="QTq-Mw-KUH"/>
<constraint firstItem="NRs-fX-FIN" firstAttribute="leading" secondItem="dJ6-LR-vgw" secondAttribute="leading" constant="8" id="Wtk-ZE-Iu3"/>
<constraint firstAttribute="bottom" secondItem="NRs-fX-FIN" secondAttribute="bottom" constant="8" id="YMJ-9a-hmC"/>
<constraint firstItem="1RH-Mf-SWP" firstAttribute="top" secondItem="dJ6-LR-vgw" secondAttribute="top" id="Z3L-1R-FJy"/>
<constraint firstAttribute="trailing" secondItem="NRs-fX-FIN" secondAttribute="trailing" constant="8" id="kfY-Vy-yGv"/>
<constraint firstItem="1RH-Mf-SWP" firstAttribute="leading" secondItem="dJ6-LR-vgw" secondAttribute="leading" id="lmc-Ys-kzq"/>
</constraints>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="layer.masksToBounds" value="YES"/>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="8"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="5QI-g5-Etm">
<rect key="frame" x="144" y="98" width="117" height="119"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="16p-zb-VAB">
<rect key="frame" x="0.0" y="0.0" width="117" height="24"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="竞拍溢价" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="DfF-lh-oXh">
<rect key="frame" x="34.333333333333343" y="4.3333333333333144" width="48" height="15"/>
<fontDescription key="fontDescription" type="system" pointSize="12"/>
<color key="textColor" red="0.72549019607843135" green="0.57647058823529407" blue="0.11372549019607843" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" red="1" green="0.90196078431372551" blue="0.59215686274509804" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="DfF-lh-oXh" firstAttribute="centerY" secondItem="16p-zb-VAB" secondAttribute="centerY" id="6If-AV-pYD"/>
<constraint firstItem="DfF-lh-oXh" firstAttribute="centerX" secondItem="16p-zb-VAB" secondAttribute="centerX" id="8Eb-hb-bCP"/>
<constraint firstAttribute="height" constant="24" id="Oeu-V9-5eq"/>
</constraints>
</view>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="签约竞拍次数越多,签约成交比签约时身价更高,则竞拍溢价就越高" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="M4h-lx-wJ4">
<rect key="frame" x="8" y="32" width="101" height="79"/>
<fontDescription key="fontDescription" type="system" pointSize="12"/>
<color key="textColor" red="0.92941176470588238" green="0.66666666666666663" blue="0.098039215686274508" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" red="0.96470588235294119" green="0.97254901960784312" blue="0.89803921568627454" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="16p-zb-VAB" firstAttribute="leading" secondItem="5QI-g5-Etm" secondAttribute="leading" id="Bbm-E2-7J9"/>
<constraint firstAttribute="bottom" secondItem="M4h-lx-wJ4" secondAttribute="bottom" constant="8" id="GGC-6Y-cpC"/>
<constraint firstItem="M4h-lx-wJ4" firstAttribute="leading" secondItem="5QI-g5-Etm" secondAttribute="leading" constant="8" id="OLC-Xu-jcE"/>
<constraint firstItem="16p-zb-VAB" firstAttribute="top" secondItem="5QI-g5-Etm" secondAttribute="top" id="PQm-S7-LCt"/>
<constraint firstItem="M4h-lx-wJ4" firstAttribute="top" secondItem="16p-zb-VAB" secondAttribute="bottom" constant="8" id="bhY-eL-Te3"/>
<constraint firstAttribute="width" constant="117" id="fPg-ws-iOS"/>
<constraint firstAttribute="trailing" secondItem="16p-zb-VAB" secondAttribute="trailing" id="haZ-oi-Jfa"/>
<constraint firstAttribute="trailing" secondItem="M4h-lx-wJ4" secondAttribute="trailing" constant="8" id="wDq-f5-2aI"/>
</constraints>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="layer.masksToBounds" value="YES"/>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="8"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</view>
</subviews>
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
<constraints>
<constraint firstItem="1qh-1U-0g1" firstAttribute="top" secondItem="22W-Pg-BGs" secondAttribute="top" constant="25" id="5aA-MU-VhR"/>
<constraint firstItem="FDt-UE-yKg" firstAttribute="centerY" secondItem="pvx-IE-jQQ" secondAttribute="centerY" id="729-Vm-24r"/>
<constraint firstAttribute="trailing" secondItem="TCX-JN-r9B" secondAttribute="trailing" constant="19" id="DIH-n9-8BY"/>
<constraint firstItem="TCX-JN-r9B" firstAttribute="centerY" secondItem="1qh-1U-0g1" secondAttribute="centerY" id="IFW-2s-j7V"/>
<constraint firstItem="R5s-ew-2ma" firstAttribute="centerY" secondItem="1qh-1U-0g1" secondAttribute="centerY" id="N9g-k4-GdM"/>
<constraint firstItem="pvx-IE-jQQ" firstAttribute="centerY" secondItem="1qh-1U-0g1" secondAttribute="centerY" id="PI4-ui-iG5"/>
<constraint firstItem="FDt-UE-yKg" firstAttribute="centerX" secondItem="pvx-IE-jQQ" secondAttribute="centerX" id="TPS-17-unD"/>
<constraint firstItem="5QI-g5-Etm" firstAttribute="top" secondItem="dJ6-LR-vgw" secondAttribute="top" id="VnE-Yk-Fs5"/>
<constraint firstItem="dJ6-LR-vgw" firstAttribute="leading" secondItem="22W-Pg-BGs" secondAttribute="leading" constant="16" id="afz-KP-jxq"/>
<constraint firstItem="5QI-g5-Etm" firstAttribute="bottom" secondItem="dJ6-LR-vgw" secondAttribute="bottom" id="cE5-G9-ELY"/>
<constraint firstAttribute="bottom" secondItem="dJ6-LR-vgw" secondAttribute="bottom" constant="12" id="cu7-kg-F1S"/>
<constraint firstItem="TJG-ml-Bip" firstAttribute="centerX" secondItem="TCX-JN-r9B" secondAttribute="centerX" id="dyH-i4-I9s"/>
<constraint firstItem="dJ6-LR-vgw" firstAttribute="top" secondItem="1qh-1U-0g1" secondAttribute="bottom" constant="25" id="e3D-aw-dQb"/>
<constraint firstItem="TJG-ml-Bip" firstAttribute="centerY" secondItem="TCX-JN-r9B" secondAttribute="centerY" id="fAq-7E-JQR"/>
<constraint firstItem="pvx-IE-jQQ" firstAttribute="leading" secondItem="1nL-zB-s12" secondAttribute="trailing" constant="12" id="gvw-jh-Rfk"/>
<constraint firstItem="1qh-1U-0g1" firstAttribute="leading" secondItem="22W-Pg-BGs" secondAttribute="leading" constant="19" id="h6D-gY-uge"/>
<constraint firstItem="1nL-zB-s12" firstAttribute="leading" secondItem="1qh-1U-0g1" secondAttribute="trailing" constant="12" id="tfl-1O-cAo"/>
<constraint firstAttribute="trailing" secondItem="5QI-g5-Etm" secondAttribute="trailing" constant="19" id="tt7-w6-uG8"/>
<constraint firstItem="1nL-zB-s12" firstAttribute="centerY" secondItem="1qh-1U-0g1" secondAttribute="centerY" id="vIW-PX-cda"/>
<constraint firstItem="R5s-ew-2ma" firstAttribute="centerX" secondItem="1qh-1U-0g1" secondAttribute="centerX" id="xP7-mU-bAf"/>
</constraints>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="layer.masksToBounds" value="YES"/>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="8"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</view>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="PHh-tS-kNh">
<rect key="frame" x="27" y="412" width="258" height="42"/>
<color key="backgroundColor" red="0.22745098039215686" green="0.73725490196078436" blue="0.42745098039215684" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="height" constant="42" id="4KY-On-BUi"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<state key="normal" title="确认">
<color key="titleColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="layer.masksToBounds" value="YES"/>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="21"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
<connections>
<action selector="commitAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="mL0-U7-wQJ"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
<constraints>
<constraint firstItem="22W-Pg-BGs" firstAttribute="top" secondItem="r7a-Qi-IKE" secondAttribute="bottom" constant="8" id="33m-VS-2sZ"/>
<constraint firstAttribute="bottom" secondItem="0pu-br-WLc" secondAttribute="bottom" id="4e3-Y4-Tac"/>
<constraint firstAttribute="trailing" secondItem="PHh-tS-kNh" secondAttribute="trailing" constant="27" id="6W3-Sf-nfN"/>
<constraint firstItem="Cey-rm-4VM" firstAttribute="centerX" secondItem="bjS-Eu-Wht" secondAttribute="centerX" id="8p7-Yq-Bsl"/>
<constraint firstItem="22W-Pg-BGs" firstAttribute="trailing" secondItem="r7a-Qi-IKE" secondAttribute="trailing" id="9hR-zr-C7I"/>
<constraint firstItem="0pu-br-WLc" firstAttribute="top" secondItem="bjS-Eu-Wht" secondAttribute="top" id="CAS-bj-ppe"/>
<constraint firstItem="PHh-tS-kNh" firstAttribute="leading" secondItem="bjS-Eu-Wht" secondAttribute="leading" constant="27" id="F9D-GW-pPi"/>
<constraint firstAttribute="trailing" secondItem="r7a-Qi-IKE" secondAttribute="trailing" constant="16" id="Irf-7a-IAZ"/>
<constraint firstAttribute="width" constant="312" id="KlA-b8-6yJ"/>
<constraint firstItem="Cey-rm-4VM" firstAttribute="top" secondItem="bjS-Eu-Wht" secondAttribute="top" constant="11" id="MZ1-ir-rFg"/>
<constraint firstAttribute="bottom" secondItem="PHh-tS-kNh" secondAttribute="bottom" constant="16" id="RnS-Jh-Wrf"/>
<constraint firstItem="r7a-Qi-IKE" firstAttribute="leading" secondItem="bjS-Eu-Wht" secondAttribute="leading" constant="16" id="U7n-mt-ov1"/>
<constraint firstItem="PHh-tS-kNh" firstAttribute="top" secondItem="22W-Pg-BGs" secondAttribute="bottom" constant="16" id="Uie-am-bsR"/>
<constraint firstItem="ag3-iq-BzI" firstAttribute="top" secondItem="bjS-Eu-Wht" secondAttribute="top" constant="2" id="Vyo-LV-CcW"/>
<constraint firstItem="0pu-br-WLc" firstAttribute="leading" secondItem="bjS-Eu-Wht" secondAttribute="leading" id="aL1-WV-fhl"/>
<constraint firstItem="22W-Pg-BGs" firstAttribute="leading" secondItem="r7a-Qi-IKE" secondAttribute="leading" id="hEM-xo-DUO"/>
<constraint firstAttribute="trailing" secondItem="ag3-iq-BzI" secondAttribute="trailing" id="oMO-jd-Kff"/>
<constraint firstAttribute="trailing" secondItem="0pu-br-WLc" secondAttribute="trailing" id="tGt-Bl-B7G"/>
<constraint firstAttribute="height" constant="470" id="tsx-66-top"/>
<constraint firstItem="r7a-Qi-IKE" firstAttribute="top" secondItem="Cey-rm-4VM" secondAttribute="bottom" constant="11" id="wJM-pt-KcG"/>
</constraints>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="layer.masksToBounds" value="YES"/>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="10"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</view>
</subviews>
<viewLayoutGuide key="safeArea" id="vUN-kp-3ea"/>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.29999999999999999" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="bjS-Eu-Wht" firstAttribute="centerY" secondItem="vUN-kp-3ea" secondAttribute="centerY" id="XT7-vk-EsU"/>
<constraint firstItem="bjS-Eu-Wht" firstAttribute="centerX" secondItem="vUN-kp-3ea" secondAttribute="centerX" id="h5o-I1-Iu2"/>
</constraints>
<connections>
<outlet property="bgView" destination="bjS-Eu-Wht" id="7GC-AR-cpg"/>
<outlet property="closeBtn" destination="ag3-iq-BzI" id="a0h-Fk-P2z"/>
<outlet property="commitBtn" destination="PHh-tS-kNh" id="iOS-08-gnl"/>
<outlet property="currentPriceLabel" destination="yoB-8g-xXJ" id="ZmR-gN-kho"/>
</connections>
<point key="canvasLocation" x="139.69465648854961" y="19.718309859154932"/>
</view>
</objects>
<resources>
<image name="body_price_rule_bg" width="312" height="470"/>
<image name="room_upseat_coin" width="16" height="16"/>
<image name="wallet_close" width="11" height="11"/>
<systemColor name="systemBackgroundColor">
<color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</systemColor>
</resources>
</document>

View File

@@ -45,6 +45,8 @@ typedef NS_ENUM(NSInteger) {
QXMainHeaderOptionTypeWallet = 35, QXMainHeaderOptionTypeWallet = 35,
/// 礼物墙 /// 礼物墙
QXMainHeaderOptionTypeGiftWall = 36, QXMainHeaderOptionTypeGiftWall = 36,
/// 身价
QXMainHeaderOptionTypeBodyPrice = 37,
}QXMainHeaderOptionType; }QXMainHeaderOptionType;
@protocol QXMainHeaderViewDelegate <NSObject> @protocol QXMainHeaderViewDelegate <NSObject>

View File

@@ -56,6 +56,11 @@
@property (nonatomic, strong)UILabel *walletMoneyLabel; @property (nonatomic, strong)UILabel *walletMoneyLabel;
@property (nonatomic, strong)UIButton *walletBtn; @property (nonatomic, strong)UIButton *walletBtn;
@property (nonatomic, strong)UIImageView *bodyPriceBgImageView;
@property (nonatomic, strong)UILabel *bodyPriceBottomLabel;
@property (nonatomic, strong)UILabel *bodyPriceMoneyLabel;
@property (nonatomic, strong)UIButton *bodyPriceBtn;
@property (nonatomic, strong)UIImageView *giftWallBgImageView; @property (nonatomic, strong)UIImageView *giftWallBgImageView;
@property (nonatomic, strong)UILabel *giftWallTitleLabel; @property (nonatomic, strong)UILabel *giftWallTitleLabel;
@property (nonatomic, strong)UIButton *giftWallBtn; @property (nonatomic, strong)UIButton *giftWallBtn;
@@ -240,7 +245,7 @@
self.walletTitleLabel.textColor = RGB16(0x929196); self.walletTitleLabel.textColor = RGB16(0x929196);
[self.walletBgView addSubview:self.walletTitleLabel]; [self.walletBgView addSubview:self.walletTitleLabel];
CGFloat walletWidth = (self.topBgView.width - 16*3) / 2; CGFloat walletWidth = (self.topBgView.width - 16*4) / 3;
self.walletBgImageView = [[UIImageView alloc] initWithFrame:CGRectMake(self.topBgView.left, self.walletTitleLabel.bottom+8, walletWidth, 60)]; self.walletBgImageView = [[UIImageView alloc] initWithFrame:CGRectMake(self.topBgView.left, self.walletTitleLabel.bottom+8, walletWidth, 60)];
self.walletBgImageView.backgroundColor = RGB16(0xFFE38E); self.walletBgImageView.backgroundColor = RGB16(0xFFE38E);
[self.walletBgImageView addRoundedCornersWithRadius:8]; [self.walletBgImageView addRoundedCornersWithRadius:8];
@@ -254,15 +259,35 @@
[self.walletBgView addSubview:self.walletBottomLabel]; [self.walletBgView addSubview:self.walletBottomLabel];
self.walletMoneyLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.walletBgImageView.left, self.walletBgImageView.top+11, walletWidth, 25)]; self.walletMoneyLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.walletBgImageView.left, self.walletBgImageView.top+11, walletWidth, 27)];
self.walletMoneyLabel.text = @"0"; self.walletMoneyLabel.text = @"0";
self.walletMoneyLabel.textAlignment = NSTextAlignmentCenter; self.walletMoneyLabel.textAlignment = NSTextAlignmentCenter;
self.walletMoneyLabel.font = [UIFont fontWithName:@"DIN Condensed" size:25]; self.walletMoneyLabel.font = [UIFont fontWithName:@"DIN Condensed" size:25];
self.walletMoneyLabel.textColor = RGB16(0x222222); self.walletMoneyLabel.textColor = RGB16(0x222222);
[self.walletBgView addSubview:self.walletMoneyLabel]; [self.walletBgView addSubview:self.walletMoneyLabel];
self.bodyPriceBgImageView = [[UIImageView alloc] initWithFrame:CGRectMake(self.walletBgImageView.right+16, self.walletBgImageView.top, walletWidth, self.walletBgImageView.height)];
self.bodyPriceBgImageView.backgroundColor = RGB16(0xFFB68F);
[self.bodyPriceBgImageView addRoundedCornersWithRadius:8];
[self.walletBgView addSubview:self.bodyPriceBgImageView];
self.giftWallBgImageView = [[UIImageView alloc] initWithFrame:CGRectMake(self.walletBgImageView.right+16, self.walletBgImageView.top, walletWidth, self.walletBgImageView.height)]; self.bodyPriceBottomLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.bodyPriceBgImageView.left, self.bodyPriceBgImageView.bottom-14-11, walletWidth, 14)];
self.bodyPriceBottomLabel.text = @"身价";
self.bodyPriceBottomLabel.textAlignment = NSTextAlignmentCenter;
self.bodyPriceBottomLabel.font = [UIFont systemFontOfSize:12];
self.bodyPriceBottomLabel.textColor = RGB16(0x333333);
[self.walletBgView addSubview:self.bodyPriceBottomLabel];
self.bodyPriceMoneyLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.bodyPriceBgImageView.left, self.walletBgImageView.top+11, walletWidth, 27)];
self.bodyPriceMoneyLabel.text = @"1";
self.bodyPriceMoneyLabel.textAlignment = NSTextAlignmentCenter;
self.bodyPriceMoneyLabel.font = [UIFont fontWithName:@"DIN Condensed" size:25];
self.bodyPriceMoneyLabel.textColor = RGB16(0x222222);
[self.walletBgView addSubview:self.bodyPriceMoneyLabel];
self.giftWallBgImageView = [[UIImageView alloc] initWithFrame:CGRectMake(self.bodyPriceBgImageView.right+16, self.walletBgImageView.top, walletWidth, self.walletBgImageView.height)];
self.giftWallBgImageView.backgroundColor = RGB16(0xF1B3FF); self.giftWallBgImageView.backgroundColor = RGB16(0xF1B3FF);
[self.giftWallBgImageView addRoundedCornersWithRadius:8]; [self.giftWallBgImageView addRoundedCornersWithRadius:8];
[self.walletBgView addSubview:self.giftWallBgImageView]; [self.walletBgView addSubview:self.giftWallBgImageView];
@@ -281,6 +306,10 @@
self.giftWallBtn = [[UIButton alloc] initWithFrame:self.giftWallBgImageView.frame]; self.giftWallBtn = [[UIButton alloc] initWithFrame:self.giftWallBgImageView.frame];
[self.giftWallBtn addTarget:self action:@selector(giftWalltAction) forControlEvents:(UIControlEventTouchUpInside)]; [self.giftWallBtn addTarget:self action:@selector(giftWalltAction) forControlEvents:(UIControlEventTouchUpInside)];
[self.walletBgView addSubview:self.giftWallBtn]; [self.walletBgView addSubview:self.giftWallBtn];
self.bodyPriceBtn = [[UIButton alloc] initWithFrame:self.bodyPriceBgImageView.frame];
[self.bodyPriceBtn addTarget:self action:@selector(bodyPriceAction) forControlEvents:(UIControlEventTouchUpInside)];
[self.walletBgView addSubview:self.bodyPriceBtn];
} }
-(CGFloat)getHeight{ -(CGFloat)getHeight{
return self.walletBgView.bottom+6; return self.walletBgView.bottom+6;
@@ -359,6 +388,12 @@
} }
} }
-(void)bodyPriceAction{
if (self.delegate && [self.delegate respondsToSelector:@selector(didClickOptionType:)]) {
[self.delegate didClickOptionType:QXMainHeaderOptionTypeBodyPrice];
}
}
-(void)gotoUserHomePageClick{ -(void)gotoUserHomePageClick{
if (self.delegate && [self.delegate respondsToSelector:@selector(didClickOptionType:)]) { if (self.delegate && [self.delegate respondsToSelector:@selector(didClickOptionType:)]) {
@@ -367,6 +402,7 @@
} }
-(void)setUserModel:(QXUserModel *)userModel{ -(void)setUserModel:(QXUserModel *)userModel{
_userModel = userModel; _userModel = userModel;
self.nameLabel.text = userModel.market_value;
[self.userHeaderView setHeadIcon:userModel.avatar dress:userModel.dress]; [self.userHeaderView setHeadIcon:userModel.avatar dress:userModel.dress];
[self.userHeaderView.nobilityImageView sd_setImageWithURL:[NSURL URLWithString:userModel.nobility_image]]; [self.userHeaderView.nobilityImageView sd_setImageWithURL:[NSURL URLWithString:userModel.nobility_image]];
if ([userModel.nickname_color isExist]) { if ([userModel.nickname_color isExist]) {

View File

@@ -17,6 +17,8 @@ typedef NS_ENUM(NSInteger) {
QXMineServiceTypeBackpack = 42, QXMineServiceTypeBackpack = 42,
/// 设置 /// 设置
QXMineServiceTypeSetting = 43, QXMineServiceTypeSetting = 43,
/// 家族
QXMineServiceTypeFamily = 80,
/// 帮助中心 /// 帮助中心
QXMineServiceTypeHelp = 44, QXMineServiceTypeHelp = 44,
/// 邀请 /// 邀请

View File

@@ -165,12 +165,17 @@
md4.icon = @"service_setting"; md4.icon = @"service_setting";
md4.type = QXMineServiceTypeSetting; md4.type = QXMineServiceTypeSetting;
QXServiceModel *md5 = [[QXServiceModel alloc] init];
md5.title = @"家族";
md5.icon = @"service_setting";
md5.type = QXMineServiceTypeFamily;
_serviceArray = [NSMutableArray arrayWithArray:@[ _serviceArray = [NSMutableArray arrayWithArray:@[
md1, md1,
md2, md2,
md3, md3,
md4, md4,
md5
]]; ]];
} }
return _serviceArray; return _serviceArray;

View File

@@ -12,6 +12,7 @@ NS_ASSUME_NONNULL_BEGIN
@interface QXUserHomeHeaderView : UIView @interface QXUserHomeHeaderView : UIView
@property (nonatomic,strong)QXUserHomeModel *model; @property (nonatomic,strong)QXUserHomeModel *model;
@property (nonatomic,strong)NSString *userId; @property (nonatomic,strong)NSString *userId;
-(void)headerStartPlay;
@end @end
@interface QXTagImageCell : UICollectionViewCell @interface QXTagImageCell : UICollectionViewCell

View File

@@ -17,8 +17,10 @@
#import "QXUserCpCardView.h" #import "QXUserCpCardView.h"
#import "QXGiftWallViewController.h" #import "QXGiftWallViewController.h"
#import "QXHeartBeatSpaceViewController.h" #import "QXHeartBeatSpaceViewController.h"
#import "QXUserHomePageViewController.h"
#import "QXHeartBeatSpaceViewController.h"
@interface QXUserHomeHeaderView()<UICollectionViewDelegate,UICollectionViewDataSource> @interface QXUserHomeHeaderView()<UICollectionViewDelegate,UICollectionViewDataSource,QXUserCpCardViewDelegate>
//@property (nonatomic,strong) CKShimmerLabel * tempName; //@property (nonatomic,strong) CKShimmerLabel * tempName;
@property (nonatomic,strong) QXSeatHeaderView* headerView; @property (nonatomic,strong) QXSeatHeaderView* headerView;
@property (nonatomic,strong) UIView * whiteBgView; @property (nonatomic,strong) UIView * whiteBgView;
@@ -57,8 +59,6 @@
self.backgroundColor = [UIColor clearColor]; self.backgroundColor = [UIColor clearColor];
self.headerView = [[QXSeatHeaderView alloc] initWithFrame:CGRectMake(32, 26, 70, 84)]; self.headerView = [[QXSeatHeaderView alloc] initWithFrame:CGRectMake(32, 26, 70, 84)];
[self.headerView addRoundedCornersWithRadius:35];
[self addSubview:self.headerView]; [self addSubview:self.headerView];
[self.headerView mas_makeConstraints:^(MASConstraintMaker *make) { [self.headerView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.mas_equalTo(32); make.left.mas_equalTo(32);
@@ -264,6 +264,7 @@
[self.whiteBgView addSubview:self.cpDressView]; [self.whiteBgView addSubview:self.cpDressView];
self.cpCardView = [[QXUserCpCardView alloc] init]; self.cpCardView = [[QXUserCpCardView alloc] init];
self.cpCardView.delegate = self;
self.cpCardView.hidden = YES; self.cpCardView.hidden = YES;
MJWeakSelf MJWeakSelf
[self.cpCardView addTapBlock:^(id _Nonnull obj) { [self.cpCardView addTapBlock:^(id _Nonnull obj) {
@@ -289,8 +290,15 @@
make.height.mas_equalTo(ScaleWidth(40)); make.height.mas_equalTo(ScaleWidth(40));
make.top.equalTo(self.cpCardView.mas_bottom).offset(8); make.top.equalTo(self.cpCardView.mas_bottom).offset(8);
}]; }];
[self.whiteBgView bringSubviewToFront:self.playBtn];
[self bringSubviewToFront:self.followBtn];
}
-(void)headerStartPlay{
[self.headerView playHWDMP4];
[self.cpCardView headerStartPlay];
[self.cpDressView headerStartPlay];
} }
-(void)giftWallAction{ -(void)giftWallAction{
QXGiftWallViewController *vc = [[QXGiftWallViewController alloc] init]; QXGiftWallViewController *vc = [[QXGiftWallViewController alloc] init];
vc.userId = self.userId; vc.userId = self.userId;
@@ -314,6 +322,21 @@
[[QXGlobal shareGlobal] chatWithUserID:self.model.user_id nickname:self.model.nickname avatar:self.model.avatar navagationController:self.navigationController]; [[QXGlobal shareGlobal] chatWithUserID:self.model.user_id nickname:self.model.nickname avatar:self.model.avatar navagationController:self.navigationController];
} }
} }
-(void)didClickHeaderViewUserId:(NSString*)userId{
if ([userId isEqualToString:self.userId]) {
return;
}
QXUserHomePageViewController *vc = [[QXUserHomePageViewController alloc] init];
vc.user_id = userId;
[self.viewController.navigationController pushViewController:vc animated:YES];
}
-(void)didClickHeaderCardViewWithUserId:(NSString*)userId{
QXHeartBeatSpaceViewController *vc = [[QXHeartBeatSpaceViewController alloc] init];
vc.userId = userId;
[self.viewController.navigationController pushViewController:vc animated:YES];
}
-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{ -(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
if (collectionView == self.collectionView) { if (collectionView == self.collectionView) {
@@ -335,6 +358,10 @@
} }
} }
-(void)setUserId:(NSString *)userId{
_userId = userId;
self.cpCardView.userId = self.userId;
}
-(void)setModel:(QXUserHomeModel *)model{ -(void)setModel:(QXUserHomeModel *)model{
_model = model; _model = model;
// model.nickname = @"大家好撒客户端撒大厦尽快"; // model.nickname = @"大家好撒客户端撒大厦尽快";

View File

@@ -19,7 +19,11 @@
_model = model; _model = model;
self.nameLabel.text = model.title; self.nameLabel.text = model.title;
[self.dressImageView sd_setImageWithURL:[NSURL URLWithString:model.base_image]]; [self.dressImageView sd_setImageWithURL:[NSURL URLWithString:model.base_image]];
self.timeLabel.text = [NSString stringWithFormat:@"%@%@",model.remaining_day,QXText(@"天")]; if ([model.type isEqualToString:@"12"]) {
self.timeLabel.text = [NSString stringWithFormat:@"x%@",model.num];
}else{
self.timeLabel.text = [NSString stringWithFormat:@"%@%@",model.remaining_day,QXText(@"天")];
}
// if (model.is_using.intValue == 1) { // if (model.is_using.intValue == 1) {
// self.selecteBtn.selected = NO; // self.selecteBtn.selected = NO;
// }else{ // }else{

View File

@@ -11,21 +11,21 @@
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/> <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" id="gTV-IL-0wX" customClass="QXDressCell"> <collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" id="gTV-IL-0wX" customClass="QXDressCell">
<rect key="frame" x="0.0" y="0.0" width="254" height="313"/> <rect key="frame" x="0.0" y="0.0" width="104" height="137"/>
<autoresizingMask key="autoresizingMask"/> <autoresizingMask key="autoresizingMask"/>
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center"> <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
<rect key="frame" x="0.0" y="0.0" width="254" height="313"/> <rect key="frame" x="0.0" y="0.0" width="104" height="137"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews> <subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="n0W-rO-R0R"> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="n0W-rO-R0R">
<rect key="frame" x="0.0" y="0.0" width="254" height="313"/> <rect key="frame" x="0.0" y="0.0" width="104" height="137"/>
<subviews> <subviews>
<button opaque="NO" userInteractionEnabled="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Gk9-jf-oXA"> <button opaque="NO" userInteractionEnabled="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Gk9-jf-oXA">
<rect key="frame" x="0.0" y="0.0" width="254" height="313"/> <rect key="frame" x="0.0" y="0.0" width="104" height="137"/>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
</button> </button>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="i9y-iF-N7k"> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="i9y-iF-N7k">
<rect key="frame" x="10" y="281" width="234" height="21"/> <rect key="frame" x="10" y="105" width="84" height="21"/>
<constraints> <constraints>
<constraint firstAttribute="height" constant="21" id="rrg-mb-mKp"/> <constraint firstAttribute="height" constant="21" id="rrg-mb-mKp"/>
</constraints> </constraints>
@@ -34,7 +34,7 @@
<nil key="highlightedColor"/> <nil key="highlightedColor"/>
</label> </label>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="dze-FS-DlP"> <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="dze-FS-DlP">
<rect key="frame" x="10" y="25" width="234" height="246"/> <rect key="frame" x="10" y="25" width="84" height="70"/>
</imageView> </imageView>
</subviews> </subviews>
<constraints> <constraints>
@@ -58,9 +58,9 @@
</userDefinedRuntimeAttributes> </userDefinedRuntimeAttributes>
</view> </view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Jon-rv-RWs"> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Jon-rv-RWs">
<rect key="frame" x="213.66666666666666" y="0.0" width="40.333333333333343" height="15"/> <rect key="frame" x="63.666666666666657" y="0.0" width="40.333333333333343" height="15"/>
<subviews> <subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="gift_number_bg" translatesAutoresizingMaskIntoConstraints="NO" id="acA-Gl-J3f"> <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="gift_number_bg" translatesAutoresizingMaskIntoConstraints="NO" id="acA-Gl-J3f">
<rect key="frame" x="0.0" y="0.0" width="40.333333333333336" height="15"/> <rect key="frame" x="0.0" y="0.0" width="40.333333333333336" height="15"/>
</imageView> </imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="30天" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="fQr-Il-R17"> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="30天" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="fQr-Il-R17">
@@ -107,6 +107,6 @@
</collectionViewCell> </collectionViewCell>
</objects> </objects>
<resources> <resources>
<image name="gift_number_bg" width="35" height="13"/> <image name="gift_number_bg" width="34" height="16"/>
</resources> </resources>
</document> </document>

View File

@@ -0,0 +1,17 @@
//
// QXHeartBeatLevelRuleView.h
// QXLive
//
// Created by 启星 on 2025/11/22.
//
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface QXHeartBeatLevelRuleView : UIView
@property (nonatomic,strong)NSString*rule;
-(void)showInView:(UIView *)view;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,123 @@
//
// QXHeartBeatLevelRuleView.m
// QXLive
//
// Created by on 2025/11/22.
//
#import "QXHeartBeatLevelRuleView.h"
#import <WebKit/WebKit.h>
@interface QXHeartBeatLevelRuleView()
@property(nonatomic,strong)WKWebView *contentWebView;
@property(nonatomic,strong)UIView* bgView;
@property(nonatomic,strong)UIButton* closeBtn;
@end
@implementation QXHeartBeatLevelRuleView
- (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.3];
self.bgView = [[UIView alloc] initWithFrame:CGRectMake((self.width-ScaleWidth(312))/2, (self.height-ScaleWidth(492))/2-40, ScaleWidth(312), ScaleWidth(492))];
[self.bgView addRoundedCornersWithRadius:16 byRoundingCorners:(UIRectCornerTopLeft|UIRectCornerTopRight)];
[self addSubview:self.bgView];
[self.bgView addSubview:self.contentWebView];
self.closeBtn = [[UIButton alloc] initWithFrame:CGRectMake((self.width-40)/2, self.bgView.bottom+10, 40, 40)];
[self.closeBtn setBackgroundImage:[UIImage imageNamed:@"home_white_close"] forState:(UIControlStateNormal)];
[self.closeBtn addTarget:self action:@selector(closeAction) forControlEvents:(UIControlEventTouchUpInside)];
[self addSubview:self.closeBtn];
[self.closeBtn mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.height.mas_equalTo(40);
make.centerX.equalTo(self);
make.top.mas_equalTo(self.bgView.bottom+10);
}];
}
-(void)setRule:(NSString *)rule{
_rule = rule;
[self loadData];
}
- (void)loadData {
NSURL* url=[NSURL URLWithString:self.rule];
NSURLRequest *request =[NSURLRequest requestWithURL:url];
[self.contentWebView loadRequest:request];
}
-(void)closeAction{
[self hide];
}
#pragma mark - getters and setters
- (WKWebView *)contentWebView {
if (!_contentWebView) {
//
WKWebViewConfiguration * configuration = [[WKWebViewConfiguration alloc]init];
//
configuration.selectionGranularity = YES;
// webpr
configuration.processPool = [[WKProcessPool alloc] init];
//, jsoc(OCURL)
WKUserContentController * UserContentController = [[WKUserContentController alloc]init];
//
configuration.suppressesIncrementalRendering = NO;
//
configuration.preferences.javaScriptEnabled = YES;
configuration.preferences.javaScriptCanOpenWindowsAutomatically = YES;
configuration.userContentController = UserContentController;
// iOS9iOS8
if ([[UIDevice currentDevice].systemVersion floatValue] >= 9.0) {
//
configuration.allowsAirPlayForMediaPlayback = YES;
// 线
configuration.allowsInlineMediaPlayback = YES;
// NOios8
_contentWebView.allowsBackForwardNavigationGestures = YES;
}
_contentWebView = [[WKWebView alloc] initWithFrame:CGRectMake(0, 0, self.bgView.width, self.bgView.height) configuration:configuration];
_contentWebView.backgroundColor = UIColor.clearColor;
[_contentWebView addRoundedCornersWithRadius:6];
_contentWebView.opaque = NO;
//
[_contentWebView sizeToFit];
_contentWebView.scrollView.showsVerticalScrollIndicator = NO;
_contentWebView.scrollView.backgroundColor = [UIColor clearColor];
_contentWebView.scrollView.bounces = NO;
//
}
return _contentWebView;
}
-(void)showInView:(UIView *)view{
self.bgView.y = -SCREEN_HEIGHT;
[view addSubview:self];
[UIView animateWithDuration:0.3 animations:^{
self.bgView.y = (self.height-ScaleWidth(492))/2-40;
} completion:^(BOOL finished) {
self.closeBtn.hidden = NO;
}];
}
-(void)hide{
self.closeBtn.hidden = YES;
[UIView animateWithDuration:0.3 animations:^{
self.bgView.y = SCREEN_HEIGHT;
} completion:^(BOOL finished) {
[self removeFromSuperview];
}];
}
@end

View File

@@ -0,0 +1,22 @@
//
// QXHeartBeatSpaceRecordCell.h
// QXLive
//
// Created by 启星 on 2025/11/22.
//
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface QXHeartBeatSpaceRecordCell : UITableViewCell
@property (weak, nonatomic) IBOutlet QXSeatHeaderView *headerView;
@property (weak, nonatomic) IBOutlet UILabel *nameLabel;
@property (weak, nonatomic) IBOutlet UILabel *timeLabel;
@property (weak, nonatomic) IBOutlet UILabel *contentLabel;
@property (strong, nonatomic)QXUserHeartBeatSpaceLogModel *model;
@property (strong, nonatomic)NSString *userId;
+(instancetype)cellWithTableView:(UITableView *)tableView;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,59 @@
//
// QXHeartBeatSpaceRecordCell.m
// QXLive
//
// Created by on 2025/11/22.
//
#import "QXHeartBeatSpaceRecordCell.h"
@implementation QXHeartBeatSpaceRecordCell
+(instancetype)cellWithTableView:(UITableView *)tableView{
static NSString *cellId = @"QXHeartBeatSpaceRecordCell";
QXHeartBeatSpaceRecordCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];
if (!cell) {
cell = [[NSBundle mainBundle] loadNibNamed:cellId owner:nil options:nil].lastObject;
cell.backgroundColor = [UIColor clearColor];
cell.contentView.backgroundColor = [UIColor clearColor];
}
return cell;
}
-(void)setUserId:(NSString *)userId{
_userId = userId;
}
-(void)setModel:(QXUserHeartBeatSpaceLogModel *)model{
_model = model;
[self.headerView setHeadIcon:model.from_user_info.avatar dress:model.from_user_info.dress];
NSDate *date = [NSDate dateWithTimeIntervalSince1970:model.createtime.longLongValue]; //,1000 , 1000
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
NSString*time = [formatter stringFromDate:date];
self.timeLabel.text = time;
self.nameLabel.text = model.from_user_info.nickname;
UIColor *nameColor = RGB16(0xFF53CC);
UIColor *contentNameColor = RGB16(0x4A89FF);
NSString *content = [NSString stringWithFormat:@"%@",model.remark];
NSMutableAttributedString *attr = [[NSMutableAttributedString alloc] initWithString:content];
if ([model.from_user_id isEqualToString:self.userId] ) {
self.nameLabel.textColor = nameColor;
[attr yy_setColor:contentNameColor range:[content rangeOfString:model.to_user_info.nickname]];
}else{
self.nameLabel.textColor = contentNameColor;
[attr yy_setColor:nameColor range:[content rangeOfString:model.to_user_info.nickname]];
}
self.contentLabel.attributedText = attr;
}
- (void)awakeFromNib {
[super awakeFromNib];
// Initialization code
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
// Configure the view for the selected state
}
@end

View File

@@ -0,0 +1,86 @@
<?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_12" 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"/>
<tableViewCell contentMode="scaleToFill" selectionStyle="none" indentationWidth="10" rowHeight="307" id="KGk-i7-Jjw" customClass="QXHeartBeatSpaceRecordCell">
<rect key="frame" x="0.0" y="0.0" width="516" height="307"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM">
<rect key="frame" x="0.0" y="0.0" width="516" height="307"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="kDB-P0-eAc" customClass="QXSeatHeaderView">
<rect key="frame" x="16" y="16" width="48" height="48"/>
<constraints>
<constraint firstAttribute="width" constant="48" id="2z8-8O-4vb"/>
<constraint firstAttribute="height" constant="48" id="aX5-8B-RZa"/>
</constraints>
</view>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ZRa-V2-B3h">
<rect key="frame" x="72" y="20" width="35.333333333333343" height="20"/>
<constraints>
<constraint firstAttribute="height" constant="20" id="2S3-wj-dYF"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<color key="textColor" red="1" green="0.32549019607843138" blue="0.80000000000000004" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="uCL-M4-5Hx">
<rect key="frame" x="72" y="68" width="408" height="223"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="3qb-wi-G90">
<rect key="frame" x="16" y="306" width="484" height="1"/>
<color key="backgroundColor" red="0.81568627450980391" green="0.81568627450980391" blue="0.81568627450980391" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="height" constant="1" id="wlx-KN-3DQ"/>
</constraints>
</view>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="AYF-oO-8tq">
<rect key="frame" x="72" y="43" width="428" height="17"/>
<constraints>
<constraint firstAttribute="height" constant="17" id="B9l-Hd-p4f"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="12"/>
<color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<constraints>
<constraint firstAttribute="trailing" secondItem="3qb-wi-G90" secondAttribute="trailing" constant="16" id="91k-0N-Wpr"/>
<constraint firstItem="ZRa-V2-B3h" firstAttribute="top" secondItem="kDB-P0-eAc" secondAttribute="top" constant="4" id="Bny-jR-cys"/>
<constraint firstAttribute="bottom" secondItem="uCL-M4-5Hx" secondAttribute="bottom" constant="16" id="CrK-CK-4Hs"/>
<constraint firstItem="uCL-M4-5Hx" firstAttribute="leading" secondItem="ZRa-V2-B3h" secondAttribute="leading" id="P89-5y-Jqq"/>
<constraint firstAttribute="trailingMargin" secondItem="uCL-M4-5Hx" secondAttribute="trailing" constant="16" id="VUI-pF-Aev"/>
<constraint firstItem="kDB-P0-eAc" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="16" id="Xor-lq-pkP"/>
<constraint firstItem="uCL-M4-5Hx" firstAttribute="top" secondItem="AYF-oO-8tq" secondAttribute="bottom" constant="8" id="XuR-uq-ICR"/>
<constraint firstAttribute="bottom" secondItem="3qb-wi-G90" secondAttribute="bottom" id="YpW-IW-hTe"/>
<constraint firstAttribute="trailing" secondItem="AYF-oO-8tq" secondAttribute="trailing" constant="16" id="fAd-RQ-39L"/>
<constraint firstItem="kDB-P0-eAc" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" constant="16" id="h9b-b5-5UI"/>
<constraint firstItem="ZRa-V2-B3h" firstAttribute="leading" secondItem="kDB-P0-eAc" secondAttribute="trailing" constant="8" id="hLc-EK-j17"/>
<constraint firstItem="AYF-oO-8tq" firstAttribute="leading" secondItem="ZRa-V2-B3h" secondAttribute="leading" id="jhq-zF-K72"/>
<constraint firstItem="3qb-wi-G90" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="16" id="sub-hr-L9S"/>
<constraint firstItem="AYF-oO-8tq" firstAttribute="bottom" secondItem="kDB-P0-eAc" secondAttribute="bottom" constant="-4" id="u8f-kW-vSK"/>
</constraints>
</tableViewCellContentView>
<viewLayoutGuide key="safeArea" id="aW0-zy-SZf"/>
<connections>
<outlet property="contentLabel" destination="uCL-M4-5Hx" id="Tco-Mw-PN0"/>
<outlet property="headerView" destination="kDB-P0-eAc" id="qMe-nZ-45F"/>
<outlet property="nameLabel" destination="ZRa-V2-B3h" id="uYk-gZ-QRb"/>
<outlet property="timeLabel" destination="AYF-oO-8tq" id="WLP-Ta-oye"/>
</connections>
<point key="canvasLocation" x="287.02290076335879" y="112.32394366197184"/>
</tableViewCell>
</objects>
</document>

View File

@@ -119,6 +119,7 @@
-(void)setUserId:(NSString *)userId{ -(void)setUserId:(NSString *)userId{
_userId = userId; _userId = userId;
self.cpCardView.userId = userId;
self.page = 1; self.page = 1;
[self getList]; [self getList];
} }
@@ -159,6 +160,7 @@
QXMoreIntimateViewController *vc = [[QXMoreIntimateViewController alloc] init]; QXMoreIntimateViewController *vc = [[QXMoreIntimateViewController alloc] init];
vc.userId = self.userId; vc.userId = self.userId;
vc.relation_id = md.relation_list.firstObject.relation_id; vc.relation_id = md.relation_list.firstObject.relation_id;
vc.relation_name = md.relation_name;
[self.viewController.navigationController pushViewController:vc animated:YES]; [self.viewController.navigationController pushViewController:vc animated:YES];
} }
@@ -175,11 +177,13 @@
if (md.relation_list.count > 1) { if (md.relation_list.count > 1) {
QXIntimateListCell*cell = [QXIntimateListCell cellWithTableView:tableView]; QXIntimateListCell*cell = [QXIntimateListCell cellWithTableView:tableView];
QXRoomBestFriendListModel *md = self.dataArray[indexPath.section]; QXRoomBestFriendListModel *md = self.dataArray[indexPath.section];
cell.userId = self.userId;
cell.model = md; cell.model = md;
return cell; return cell;
}else{ }else{
MJWeakSelf MJWeakSelf
QXIntimateMoreListCell *cell = [QXIntimateMoreListCell cellWithTableView:tableView]; QXIntimateMoreListCell *cell = [QXIntimateMoreListCell cellWithTableView:tableView];
cell.userId = self.userId;
cell.model = md.relation_list.firstObject; cell.model = md.relation_list.firstObject;
cell.deleteSuccessBlock = ^(QXRelationshipListModel * _Nonnull model) { cell.deleteSuccessBlock = ^(QXRelationshipListModel * _Nonnull model) {
weakSelf.page = 1; weakSelf.page = 1;
@@ -235,7 +239,7 @@
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
QXRoomBestFriendListModel *md = self.dataArray[indexPath.section]; QXRoomBestFriendListModel *md = self.dataArray[indexPath.section];
if (md.relation_list.count > 1) { if (md.relation_list.count == 1) {
return ScaleWidth(92)+18; return ScaleWidth(92)+18;
}else{ }else{
if (md.relation_list.count == 0) { if (md.relation_list.count == 0) {

View File

@@ -6,11 +6,13 @@
// //
#import <UIKit/UIKit.h> #import <UIKit/UIKit.h>
#import "QXUserCpCardView.h"
NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_BEGIN
@interface QXIntimateCpCell : UITableViewCell @interface QXIntimateCpCell : UITableViewCell
@property (nonatomic,strong)QXUserCpInfoModel *model; @property (nonatomic,strong)QXUserCpInfoModel *model;
@property (nonatomic,strong)NSString *userId;
@property (nonatomic,weak)id<QXUserCpCardViewDelegate>delegate;
+(instancetype)cellWithTableView:(UITableView *)tableView; +(instancetype)cellWithTableView:(UITableView *)tableView;
@end @end

View File

@@ -6,8 +6,8 @@
// //
#import "QXIntimateCpCell.h" #import "QXIntimateCpCell.h"
#import "QXUserCpCardView.h"
@interface QXIntimateCpCell() @interface QXIntimateCpCell()<QXUserCpCardViewDelegate>
@property (nonatomic,strong)QXUserCpCardView *cardView; @property (nonatomic,strong)QXUserCpCardView *cardView;
@end @end
@implementation QXIntimateCpCell @implementation QXIntimateCpCell
@@ -34,9 +34,13 @@
_model = model; _model = model;
self.cardView.model = model; self.cardView.model = model;
} }
-(void)setUserId:(NSString *)userId{
_userId = userId;
self.cardView.userId = self.userId;
}
-(void)initSubviews{ -(void)initSubviews{
self.cardView = [[QXUserCpCardView alloc] init]; self.cardView = [[QXUserCpCardView alloc] init];
self.cardView.delegate = self;
[self.contentView addSubview:self.cardView]; [self.contentView addSubview:self.cardView];
[self.cardView mas_makeConstraints:^(MASConstraintMaker *make) { [self.cardView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.mas_equalTo(24); make.left.mas_equalTo(24);
@@ -44,6 +48,17 @@
make.top.bottom.equalTo(self.contentView); make.top.bottom.equalTo(self.contentView);
}]; }];
} }
-(void)didClickHeaderCardViewWithUserId:(NSString *)userId{
if (self.delegate && [self.delegate respondsToSelector:@selector(didClickHeaderCardViewWithUserId:)]) {
[self.delegate didClickHeaderCardViewWithUserId:userId];
}
}
-(void)didClickHeaderViewUserId:(NSString *)userId{
if (self.delegate && [self.delegate respondsToSelector:@selector(didClickHeaderViewUserId:)]) {
[self.delegate didClickHeaderViewUserId:userId];
}
}
- (void)awakeFromNib { - (void)awakeFromNib {
[super awakeFromNib]; [super awakeFromNib];
// Initialization code // Initialization code

View File

@@ -11,6 +11,7 @@ NS_ASSUME_NONNULL_BEGIN
@interface QXIntimateListCell : UITableViewCell @interface QXIntimateListCell : UITableViewCell
@property (nonatomic,strong)QXRoomBestFriendListModel *model; @property (nonatomic,strong)QXRoomBestFriendListModel *model;
@property (nonatomic,strong)NSString *userId;
+(instancetype)cellWithTableView:(UITableView *)tableView; +(instancetype)cellWithTableView:(UITableView *)tableView;
@end @end

View File

@@ -7,7 +7,7 @@
#import "QXIntimateListCell.h" #import "QXIntimateListCell.h"
#import "QXIntimateUserCell.h" #import "QXIntimateUserCell.h"
#import "QXUserHomePageViewController.h"
@interface QXIntimateListCell()<UICollectionViewDataSource,UICollectionViewDelegate> @interface QXIntimateListCell()<UICollectionViewDataSource,UICollectionViewDelegate>
@property (nonatomic,strong)UICollectionView *collectionView; @property (nonatomic,strong)UICollectionView *collectionView;
@end @end
@@ -68,9 +68,22 @@
} }
-(__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{ -(__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
QXIntimateUserCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"QXIntimateUserCell" forIndexPath:indexPath]; QXIntimateUserCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"QXIntimateUserCell" forIndexPath:indexPath];
cell.userId = self.userId;
cell.model = self.model.relation_list[indexPath.row]; cell.model = self.model.relation_list[indexPath.row];
return cell; return cell;
} }
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{
QXRelationshipListModel *md = self.model.relation_list[indexPath.row];
NSString *userId = @"";
if ([md.user_id1 isEqualToString:self.userId]) {
userId = md.user_id2;
}else{
userId = md.user_id1;
}
QXUserHomePageViewController *vc = [[QXUserHomePageViewController alloc] init];
vc.user_id = userId;
[self.viewController.navigationController pushViewController:vc animated:YES];
}
- (void)awakeFromNib { - (void)awakeFromNib {
[super awakeFromNib]; [super awakeFromNib];
// Initialization code // Initialization code

View File

@@ -8,7 +8,12 @@
#import <UIKit/UIKit.h> #import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_BEGIN
@protocol QXIntimateMoreListCellDelegate <NSObject>
@optional
-(void)didClickHeaderWithUserId:(NSString*)userId;
@end
@interface QXIntimateMoreListCell : UITableViewCell @interface QXIntimateMoreListCell : UITableViewCell
@property (weak, nonatomic) IBOutlet QXSeatHeaderView *leftHeaderView; @property (weak, nonatomic) IBOutlet QXSeatHeaderView *leftHeaderView;
@property (weak, nonatomic) IBOutlet UIImageView *leftSexImageView; @property (weak, nonatomic) IBOutlet UIImageView *leftSexImageView;
@@ -18,8 +23,10 @@ NS_ASSUME_NONNULL_BEGIN
@property (weak, nonatomic) IBOutlet UILabel *rightNameLabel; @property (weak, nonatomic) IBOutlet UILabel *rightNameLabel;
@property (weak, nonatomic) IBOutlet UILabel *timeLabel; @property (weak, nonatomic) IBOutlet UILabel *timeLabel;
@property (nonatomic,strong)QXRelationshipListModel *model; @property (nonatomic,strong)QXRelationshipListModel *model;
@property (nonatomic,strong)NSString *userId;
@property (nonatomic,copy)void(^topSuccessBlock)(QXRelationshipListModel*model); @property (nonatomic,copy)void(^topSuccessBlock)(QXRelationshipListModel*model);
@property (nonatomic,copy)void(^deleteSuccessBlock)(QXRelationshipListModel*model); @property (nonatomic,copy)void(^deleteSuccessBlock)(QXRelationshipListModel*model);
@property (nonatomic,weak)id<QXIntimateMoreListCellDelegate>delegate;
+(instancetype)cellWithTableView:(UITableView *)tableView; +(instancetype)cellWithTableView:(UITableView *)tableView;
@end @end

View File

@@ -67,25 +67,41 @@
}]; }];
} }
- (IBAction)leftAction:(id)sender {
if (self.delegate && [self.delegate respondsToSelector:@selector(didClickHeaderWithUserId:)]) {
[self.delegate didClickHeaderWithUserId:self.userId];
}
}
- (IBAction)rightAction:(id)sender {
NSString *userId = @"";
if ([self.model.user_id1 isEqualToString:self.userId]) {
userId = self.model.user_id2;
}else{
userId = self.model.user_id1;
}
if (self.delegate && [self.delegate respondsToSelector:@selector(didClickHeaderWithUserId:)]) {
[self.delegate didClickHeaderWithUserId:userId];
}
}
-(void)setModel:(QXRelationshipListModel *)model{ -(void)setModel:(QXRelationshipListModel *)model{
_model = model; _model = model;
if ([model.user_id1 isEqualToString:QXGlobal.shareGlobal.loginModel.user_id]) { if ([model.user_id1 isEqualToString:self.userId]) {
[self.leftHeaderView setHeadIcon:model.avatar2 dress:@""];
self.leftNameLabel.text = model.nickname2;
self.leftSexImageView.image = [UIImage imageNamed:model.sex2.intValue == 1?@"user_sex_boy":@"user_sex_girl"];
[self.rightHeaderView setHeadIcon:model.avatar1 dress:@""];
self.rightNameLabel.text = model.nickname1;
self.rightSexImageView.image = [UIImage imageNamed:model.sex1.intValue == 1?@"user_sex_boy":@"user_sex_girl"];
}else{
[self.leftHeaderView setHeadIcon:model.avatar1 dress:@""]; [self.leftHeaderView setHeadIcon:model.avatar1 dress:@""];
self.leftNameLabel.text = model.nickname1; self.leftNameLabel.text = model.nickname1;
self.leftSexImageView.image = [UIImage imageNamed:model.sex1.intValue == 1?@"user_sex_boy":@"user_sex_girl"]; self.leftSexImageView.image = [UIImage imageNamed:model.sex1.intValue == 1?@"user_sex_boy":@"user_sex_girl"];
[self.rightHeaderView setHeadIcon:model.avatar2 dress:@""]; [self.rightHeaderView setHeadIcon:model.avatar2 dress:@""];
self.rightNameLabel.text = model.nickname2; self.rightNameLabel.text = model.nickname2;
self.rightSexImageView.image = [UIImage imageNamed:model.sex2.intValue == 1?@"user_sex_boy":@"user_sex_girl"]; self.rightSexImageView.image = [UIImage imageNamed:model.sex2.intValue == 1?@"user_sex_boy":@"user_sex_girl"];
}else{
[self.leftHeaderView setHeadIcon:model.avatar2 dress:@""];
self.leftNameLabel.text = model.nickname2;
self.leftSexImageView.image = [UIImage imageNamed:model.sex2.intValue == 1?@"user_sex_boy":@"user_sex_girl"];
[self.rightHeaderView setHeadIcon:model.avatar1 dress:@""];
self.rightNameLabel.text = model.nickname1;
self.rightSexImageView.image = [UIImage imageNamed:model.sex2.intValue == 1?@"user_sex_boy":@"user_sex_girl"];
} }
NSTimeInterval currentTime = [[NSDate date] timeIntervalSince1970]; NSTimeInterval currentTime = [[NSDate date] timeIntervalSince1970];
long long milliseconds = (long long)(currentTime); long long milliseconds = (long long)(currentTime);

View File

@@ -30,6 +30,19 @@
<constraint firstAttribute="width" constant="50" id="f4E-eT-Fu8"/> <constraint firstAttribute="width" constant="50" id="f4E-eT-Fu8"/>
</constraints> </constraints>
</view> </view>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="eAs-09-73J">
<rect key="frame" x="46.666666666666671" y="66" width="33" height="16"/>
<fontDescription key="fontDescription" type="system" pointSize="13"/>
<color key="textColor" red="0.36078431372549019" green="0.16470588235294117" blue="0.44313725490196076" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="xap-Up-DHk">
<rect key="frame" x="38" y="12" width="50" height="70"/>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<connections>
<action selector="leftAction:" destination="KGk-i7-Jjw" eventType="touchUpInside" id="r31-OZ-CWl"/>
</connections>
</button>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="fJj-mx-2yM"> <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="fJj-mx-2yM">
<rect key="frame" x="72" y="46" width="16" height="16"/> <rect key="frame" x="72" y="46" width="16" height="16"/>
<constraints> <constraints>
@@ -70,35 +83,44 @@
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/> <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/> <nil key="highlightedColor"/>
</label> </label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="eAs-09-73J">
<rect key="frame" x="46.666666666666671" y="66" width="33" height="16"/>
<fontDescription key="fontDescription" type="system" pointSize="13"/>
<color key="textColor" red="0.36078431372549019" green="0.16470588235294117" blue="0.44313725490196076" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="tuv-zg-sBW"> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="tuv-zg-sBW">
<rect key="frame" x="343.66666666666669" y="66" width="33" height="16"/> <rect key="frame" x="343.66666666666669" y="66" width="33" height="16"/>
<fontDescription key="fontDescription" type="system" pointSize="13"/> <fontDescription key="fontDescription" type="system" pointSize="13"/>
<color key="textColor" red="0.36078431372549019" green="0.16470588235294117" blue="0.44313725490196076" alpha="1" colorSpace="calibratedRGB"/> <color key="textColor" red="0.36078431372549019" green="0.16470588235294117" blue="0.44313725490196076" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/> <nil key="highlightedColor"/>
</label> </label>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="SsY-uu-WFL">
<rect key="frame" x="335" y="12" width="50" height="70"/>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<connections>
<action selector="rightAction:" destination="KGk-i7-Jjw" eventType="touchUpInside" id="c6p-5f-wxW"/>
</connections>
</button>
</subviews> </subviews>
<constraints> <constraints>
<constraint firstItem="50s-uU-EKD" firstAttribute="centerY" secondItem="pS6-S4-a2G" secondAttribute="centerY" id="5g4-vp-EYv"/> <constraint firstItem="50s-uU-EKD" firstAttribute="centerY" secondItem="pS6-S4-a2G" secondAttribute="centerY" id="5g4-vp-EYv"/>
<constraint firstItem="SsY-uu-WFL" firstAttribute="top" secondItem="50s-uU-EKD" secondAttribute="top" id="8be-wg-JP2"/>
<constraint firstItem="8wc-ZY-rQa" firstAttribute="top" secondItem="dAK-uZ-bVb" secondAttribute="bottom" constant="5" id="8rk-dg-kaQ"/> <constraint firstItem="8wc-ZY-rQa" firstAttribute="top" secondItem="dAK-uZ-bVb" secondAttribute="bottom" constant="5" id="8rk-dg-kaQ"/>
<constraint firstItem="fJj-mx-2yM" firstAttribute="trailing" secondItem="pS6-S4-a2G" secondAttribute="trailing" id="BEj-jg-gAB"/> <constraint firstItem="fJj-mx-2yM" firstAttribute="trailing" secondItem="pS6-S4-a2G" secondAttribute="trailing" id="BEj-jg-gAB"/>
<constraint firstItem="dAK-uZ-bVb" firstAttribute="top" secondItem="9uF-c2-o0x" secondAttribute="top" constant="24" id="D9p-BA-KBw"/> <constraint firstItem="dAK-uZ-bVb" firstAttribute="top" secondItem="9uF-c2-o0x" secondAttribute="top" constant="24" id="D9p-BA-KBw"/>
<constraint firstItem="6nc-bo-ejr" firstAttribute="bottom" secondItem="50s-uU-EKD" secondAttribute="bottom" id="FGe-n1-Wks"/> <constraint firstItem="6nc-bo-ejr" firstAttribute="bottom" secondItem="50s-uU-EKD" secondAttribute="bottom" id="FGe-n1-Wks"/>
<constraint firstItem="pS6-S4-a2G" firstAttribute="leading" secondItem="9uF-c2-o0x" secondAttribute="leading" constant="38" id="H5c-Mz-Qma"/> <constraint firstItem="pS6-S4-a2G" firstAttribute="leading" secondItem="9uF-c2-o0x" secondAttribute="leading" constant="38" id="H5c-Mz-Qma"/>
<constraint firstItem="SsY-uu-WFL" firstAttribute="leading" secondItem="50s-uU-EKD" secondAttribute="leading" id="Rl2-c0-BBe"/>
<constraint firstItem="dAK-uZ-bVb" firstAttribute="centerX" secondItem="9uF-c2-o0x" secondAttribute="centerX" id="VG0-8q-Lrq"/> <constraint firstItem="dAK-uZ-bVb" firstAttribute="centerX" secondItem="9uF-c2-o0x" secondAttribute="centerX" id="VG0-8q-Lrq"/>
<constraint firstAttribute="trailing" secondItem="50s-uU-EKD" secondAttribute="trailing" constant="38" id="Wh8-QI-j4t"/> <constraint firstAttribute="trailing" secondItem="50s-uU-EKD" secondAttribute="trailing" constant="38" id="Wh8-QI-j4t"/>
<constraint firstItem="xap-Up-DHk" firstAttribute="leading" secondItem="pS6-S4-a2G" secondAttribute="leading" id="YQL-gI-xBB"/>
<constraint firstItem="pS6-S4-a2G" firstAttribute="top" secondItem="9uF-c2-o0x" secondAttribute="top" constant="12" id="YtX-oa-Z5o"/> <constraint firstItem="pS6-S4-a2G" firstAttribute="top" secondItem="9uF-c2-o0x" secondAttribute="top" constant="12" id="YtX-oa-Z5o"/>
<constraint firstItem="SsY-uu-WFL" firstAttribute="bottom" secondItem="tuv-zg-sBW" secondAttribute="bottom" id="a00-qT-gYV"/>
<constraint firstItem="fJj-mx-2yM" firstAttribute="bottom" secondItem="pS6-S4-a2G" secondAttribute="bottom" id="a5l-4I-UsC"/> <constraint firstItem="fJj-mx-2yM" firstAttribute="bottom" secondItem="pS6-S4-a2G" secondAttribute="bottom" id="a5l-4I-UsC"/>
<constraint firstItem="tuv-zg-sBW" firstAttribute="centerX" secondItem="50s-uU-EKD" secondAttribute="centerX" id="eA4-hx-xId"/> <constraint firstItem="tuv-zg-sBW" firstAttribute="centerX" secondItem="50s-uU-EKD" secondAttribute="centerX" id="eA4-hx-xId"/>
<constraint firstItem="eAs-09-73J" firstAttribute="top" secondItem="pS6-S4-a2G" secondAttribute="bottom" constant="4" id="inp-kG-exH"/> <constraint firstItem="eAs-09-73J" firstAttribute="top" secondItem="pS6-S4-a2G" secondAttribute="bottom" constant="4" id="inp-kG-exH"/>
<constraint firstItem="6nc-bo-ejr" firstAttribute="trailing" secondItem="50s-uU-EKD" secondAttribute="trailing" id="j7A-eO-KSJ"/> <constraint firstItem="6nc-bo-ejr" firstAttribute="trailing" secondItem="50s-uU-EKD" secondAttribute="trailing" id="j7A-eO-KSJ"/>
<constraint firstItem="xap-Up-DHk" firstAttribute="top" secondItem="pS6-S4-a2G" secondAttribute="top" id="k1J-S0-BPd"/>
<constraint firstItem="SsY-uu-WFL" firstAttribute="trailing" secondItem="50s-uU-EKD" secondAttribute="trailing" id="rQE-om-5xf"/>
<constraint firstItem="eAs-09-73J" firstAttribute="centerX" secondItem="pS6-S4-a2G" secondAttribute="centerX" id="smC-jH-4iI"/> <constraint firstItem="eAs-09-73J" firstAttribute="centerX" secondItem="pS6-S4-a2G" secondAttribute="centerX" id="smC-jH-4iI"/>
<constraint firstItem="xap-Up-DHk" firstAttribute="bottom" secondItem="eAs-09-73J" secondAttribute="bottom" id="ssk-yf-L3c"/>
<constraint firstItem="8wc-ZY-rQa" firstAttribute="centerX" secondItem="9uF-c2-o0x" secondAttribute="centerX" id="uKd-PA-s9w"/> <constraint firstItem="8wc-ZY-rQa" firstAttribute="centerX" secondItem="9uF-c2-o0x" secondAttribute="centerX" id="uKd-PA-s9w"/>
<constraint firstItem="xap-Up-DHk" firstAttribute="trailing" secondItem="pS6-S4-a2G" secondAttribute="trailing" id="v5j-a8-69s"/>
<constraint firstItem="tuv-zg-sBW" firstAttribute="top" secondItem="50s-uU-EKD" secondAttribute="bottom" constant="4" id="yjp-7F-Gwe"/> <constraint firstItem="tuv-zg-sBW" firstAttribute="top" secondItem="50s-uU-EKD" secondAttribute="bottom" constant="4" id="yjp-7F-Gwe"/>
</constraints> </constraints>
</view> </view>

View File

@@ -14,6 +14,7 @@ NS_ASSUME_NONNULL_BEGIN
@property (weak, nonatomic) IBOutlet UILabel *nameLabel; @property (weak, nonatomic) IBOutlet UILabel *nameLabel;
@property (weak, nonatomic) IBOutlet QXSeatHeaderView *headerView; @property (weak, nonatomic) IBOutlet QXSeatHeaderView *headerView;
@property (weak, nonatomic) IBOutlet UIImageView *sexImageView; @property (weak, nonatomic) IBOutlet UIImageView *sexImageView;
@property (nonatomic,strong)NSString* userId;
@property (nonatomic,strong)QXRelationshipListModel *model; @property (nonatomic,strong)QXRelationshipListModel *model;
@end @end

View File

@@ -10,7 +10,7 @@
@implementation QXIntimateUserCell @implementation QXIntimateUserCell
-(void)setModel:(QXRelationshipListModel *)model{ -(void)setModel:(QXRelationshipListModel *)model{
_model = model; _model = model;
if ([model.user_id1 isEqualToString:QXGlobal.shareGlobal.loginModel.user_id]) { if ([model.user_id1 isEqualToString:self.userId]) {
[self.headerView setHeadIcon:model.avatar2 dress:@""]; [self.headerView setHeadIcon:model.avatar2 dress:@""];
self.nameLabel.text = model.nickname2; self.nameLabel.text = model.nickname2;
self.sexImageView.image = [UIImage imageNamed:model.sex2.intValue == 1?@"user_sex_boy":@"user_sex_girl"]; self.sexImageView.image = [UIImage imageNamed:model.sex2.intValue == 1?@"user_sex_boy":@"user_sex_girl"];
@@ -19,9 +19,15 @@
self.nameLabel.text = model.nickname1; self.nameLabel.text = model.nickname1;
self.sexImageView.image = [UIImage imageNamed:model.sex1.intValue == 1?@"user_sex_boy":@"user_sex_girl"]; self.sexImageView.image = [UIImage imageNamed:model.sex1.intValue == 1?@"user_sex_boy":@"user_sex_girl"];
} }
self.timeLabel.text = [NSString getTimeWithSecond:model.end_time.longLongValue]; NSTimeInterval currentTime = [[NSDate date] timeIntervalSince1970];
long long milliseconds = (long long)(currentTime);
NSInteger time = model.end_time.longLongValue - milliseconds;
self.timeLabel.text = [NSString stringWithFormat:@" %@ ",[NSString getTimeWithSecond:time]];
} }
-(void)setUserId:(NSString *)userId{
_userId = userId;
}
- (void)awakeFromNib { - (void)awakeFromNib {
[super awakeFromNib]; [super awakeFromNib];
// Initialization code // Initialization code

View File

@@ -0,0 +1,29 @@
//
// QXFamilyMemberCell.h
// QXLive
//
// Created by 启星 on 2025/11/26.
//
#import <UIKit/UIKit.h>
#import "QXFamilyModel.h"
NS_ASSUME_NONNULL_BEGIN
@interface QXFamilyMemberCell : UITableViewCell
@property (weak, nonatomic) IBOutlet QXSeatHeaderView *headerView;
@property (weak, nonatomic) IBOutlet UICollectionView *collectionView;
@property (weak, nonatomic) IBOutlet UICollectionViewFlowLayout *flowLayout;
@property (weak, nonatomic) IBOutlet UILabel *dayLabel;
@property (weak, nonatomic) IBOutlet UILabel *nameLabel;
@property (weak, nonatomic) IBOutlet UILabel *timesLabel;
@property (weak, nonatomic) IBOutlet UIButton *priceBtn;
@property (weak, nonatomic) IBOutlet UILabel *onlineLabel;
@property (weak, nonatomic) IBOutlet UIButton *todayPriceBtn;
@property (weak, nonatomic) IBOutlet UIButton *yestodayPriceBtn;
@property (weak, nonatomic) IBOutlet UIButton *continueBtn;
@property (strong, nonatomic) QXFamilyMemberModel *model;
+(instancetype)cellWithTableView:(UITableView *)tableView;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,82 @@
//
// QXFamilyMemberCell.m
// QXLive
//
// Created by on 2025/11/26.
//
#import "QXFamilyMemberCell.h"
#import "QXUserHomeHeaderView.h"
#import "QXCustomAlertView.h"
@interface QXFamilyMemberCell()<UICollectionViewDataSource,UICollectionViewDelegate>
@end
@implementation QXFamilyMemberCell
+(instancetype)cellWithTableView:(UITableView *)tableView{
static NSString *cellId = @"QXFamilyMemberCell";
QXFamilyMemberCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];
if (!cell) {
cell = [[NSBundle mainBundle] loadNibNamed:cellId owner:nil options:nil].lastObject;
cell.flowLayout.itemSize = CGSizeMake(UserIconWidth, UserIconHeight);
cell.flowLayout.minimumLineSpacing = 7;
cell.flowLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
cell.collectionView.dataSource = cell;
cell.collectionView.delegate = cell;
cell.collectionView.backgroundColor = UIColor.clearColor;
[cell.collectionView registerClass:[QXTagImageCell class] forCellWithReuseIdentifier:@"QXTagImageCell"];
cell.backgroundColor = [UIColor clearColor];
cell.contentView.backgroundColor = [UIColor clearColor];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
}
return cell;
}
- (void)awakeFromNib {
[super awakeFromNib];
// Initialization code
}
-(void)setModel:(QXFamilyMemberModel *)model{
_model = model;
[self.headerView setHeadIcon:model.nickname dress:model.dress];
[self.headerView.nobilityImageView sd_setImageWithURL:[NSURL URLWithString:model.nobility_image]];
self.dayLabel.text = [NSString stringWithFormat:@"剩余租期:%@",model.end_day];
self.timesLabel.text = [NSString stringWithFormat:@"免费续约次数:%@",model.free_renewal];
self.nameLabel.text = model.nickname;
[self.todayPriceBtn setTitle:model.today_earnings forState:(UIControlStateNormal)];
[self.yestodayPriceBtn setTitle:model.yesterday_earnings forState:(UIControlStateNormal)];
[self.priceBtn setTitle:model.market_value forState:(UIControlStateNormal)];
self.onlineLabel.text = model.is_online==1?@"当前在线":@"当前离线";
self.continueBtn.hidden = model.is_show_sign.intValue==1?NO:YES;
}
- (IBAction)continueAction:(id)sender {
QXCustomAlertView *al = [[QXCustomAlertView alloc] init];
al.title = @"续约提示";
al.message = @"尊敬的用户:  您的徒弟【夏沫】当前为首次签约的 免费续约期。续约后徒弟合约将延长7天您剩余的免费续约次数1次";
al.cancleTitle = @"取消";
al.commitTitle = @"确认续约";
al.isFromController = YES;
al.cancelBlock = ^{
[[QXGlobal shareGlobal] hideViewBlock:nil];
};
al.commitBlock = ^{
[[QXGlobal shareGlobal] hideViewBlock:nil];
};
[QXGlobal.shareGlobal showView:al popType:(PopViewTypeTopToCenter) tapDismiss:NO finishBlock:nil];
// [al showInView:self.viewController.view title:@"续约提示" message:@"尊敬的用户:  您的徒弟【夏沫】当前为首次签约的 免费续约期。续约后徒弟合约将延长7天您剩余的免费续约次数1次" cancleTitle:@"取消" commitTitle:@"确认续约"];
}
-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
if (self.model==nil) {
return 0;
}
return self.model.icon.count;
}
-(__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
QXTagImageCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"QXTagImageCell" forIndexPath:indexPath];
cell.imageUrl = self.model.icon[indexPath.row];
return cell;
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
// Configure the view for the selected state
}
@end

View File

@@ -0,0 +1,267 @@
<?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_12" 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"/>
<tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" rowHeight="178" id="KGk-i7-Jjw" customClass="QXFamilyMemberCell">
<rect key="frame" x="0.0" y="0.0" width="375" height="178"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM">
<rect key="frame" x="0.0" y="0.0" width="375" height="178"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="iH0-Pj-t8s">
<rect key="frame" x="16" y="6" width="343" height="166"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="family_top_member_bg" translatesAutoresizingMaskIntoConstraints="NO" id="Msn-nc-t9D">
<rect key="frame" x="0.0" y="0.0" width="343" height="166"/>
</imageView>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="uXg-p7-J2S" customClass="QXSeatHeaderView">
<rect key="frame" x="18" y="12" width="52" height="68"/>
<constraints>
<constraint firstAttribute="height" constant="68" id="bCB-eE-Zr3"/>
<constraint firstAttribute="width" constant="52" id="h5x-rL-px2"/>
</constraints>
</view>
<collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" dataMode="none" translatesAutoresizingMaskIntoConstraints="NO" id="Xpt-NC-KbR">
<rect key="frame" x="90" y="14" width="242" height="19"/>
<constraints>
<constraint firstAttribute="height" constant="19" id="mpP-Tm-mjr"/>
</constraints>
<collectionViewFlowLayout key="collectionViewLayout" scrollDirection="horizontal" minimumLineSpacing="10" minimumInteritemSpacing="10" id="ErA-Km-MvK">
<size key="itemSize" width="128" height="128"/>
<size key="headerReferenceSize" width="0.0" height="0.0"/>
<size key="footerReferenceSize" width="0.0" height="0.0"/>
<inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/>
</collectionViewFlowLayout>
<connections>
<outlet property="dataSource" destination="-1" id="neF-wi-DOJ"/>
<outlet property="delegate" destination="-1" id="JgI-Be-tW3"/>
</connections>
</collectionView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="剩余租期5天" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="3c8-yw-ZcY">
<rect key="frame" x="90" y="43" width="80.666666666666686" height="14.333333333333336"/>
<fontDescription key="fontDescription" type="system" pointSize="12"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="张三张三张三" textAlignment="center" lineBreakMode="clip" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="AEg-Tu-ye6">
<rect key="frame" x="8" y="88" width="72" height="19.333333333333329"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="16"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="免费续约次数3次" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="D6h-bE-tlh">
<rect key="frame" x="90" y="65.333333333333329" width="104.66666666666669" height="14.333333333333329"/>
<fontDescription key="fontDescription" type="system" pointSize="12"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="BVQ-z4-fHs">
<rect key="frame" x="26" y="111.33333333333333" width="36" height="19.999999999999986"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<state key="normal" title="10" image="mine_recharge_corn">
<color key="titleColor" red="1" green="0.15294117647058825" blue="0.15294117647058825" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
</button>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="当前在线" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="cha-OZ-i3U">
<rect key="frame" x="20" y="136.33333333333334" width="48" height="15"/>
<fontDescription key="fontDescription" type="system" pointSize="12"/>
<color key="textColor" red="0.22745098039215686" green="0.73725490196078436" blue="0.42745098039215684" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="VGe-Cc-S6Q">
<rect key="frame" x="90" y="87.666666666666686" width="85" height="66.333333333333314"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="今日" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="fxt-Ok-e8L">
<rect key="frame" x="30.666666666666657" y="4" width="24" height="17"/>
<constraints>
<constraint firstAttribute="height" constant="17" id="xrg-jZ-zdc"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="12"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="收礼盈利" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="9wb-6a-aQt">
<rect key="frame" x="18.666666666666671" y="23" width="48" height="17"/>
<constraints>
<constraint firstAttribute="height" constant="17" id="AoH-Ct-GM9"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="12"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="dpa-gV-fxG">
<rect key="frame" x="2" y="41.999999999999986" width="81" height="22.333333333333329"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<state key="normal" title="10" image="family_diamond">
<color key="titleColor" red="1" green="0.1529411765" blue="0.1529411765" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
</button>
</subviews>
<color key="backgroundColor" red="0.85490196078431369" green="1" blue="0.88627450980392153" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="fxt-Ok-e8L" firstAttribute="centerX" secondItem="VGe-Cc-S6Q" secondAttribute="centerX" id="2pr-cg-4QY"/>
<constraint firstAttribute="width" constant="85" id="FPA-42-3py"/>
<constraint firstItem="9wb-6a-aQt" firstAttribute="top" secondItem="fxt-Ok-e8L" secondAttribute="bottom" constant="2" id="RzV-mu-ufj"/>
<constraint firstAttribute="bottom" secondItem="dpa-gV-fxG" secondAttribute="bottom" constant="2" id="dtB-XL-hOC"/>
<constraint firstItem="fxt-Ok-e8L" firstAttribute="top" secondItem="VGe-Cc-S6Q" secondAttribute="top" constant="4" id="ef4-nR-Mji"/>
<constraint firstItem="9wb-6a-aQt" firstAttribute="centerX" secondItem="VGe-Cc-S6Q" secondAttribute="centerX" id="iSE-Sg-0b1"/>
<constraint firstItem="dpa-gV-fxG" firstAttribute="top" secondItem="9wb-6a-aQt" secondAttribute="bottom" constant="2" id="ruM-mP-Gsq"/>
<constraint firstItem="dpa-gV-fxG" firstAttribute="leading" secondItem="VGe-Cc-S6Q" secondAttribute="leading" constant="2" id="wGY-6r-6Bn"/>
<constraint firstAttribute="trailing" secondItem="dpa-gV-fxG" secondAttribute="trailing" constant="2" id="xBG-GO-NWJ"/>
</constraints>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="layer.masksToBounds" value="YES"/>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="4"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="oGH-dJ-lZy">
<rect key="frame" x="179" y="87.666666666666686" width="85" height="66.333333333333314"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="昨日" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="KF6-Jg-pqn">
<rect key="frame" x="30.666666666666657" y="4" width="24" height="17"/>
<constraints>
<constraint firstAttribute="height" constant="17" id="2Du-Vr-MGL"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="12"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="收礼盈利" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Rjt-H4-heD">
<rect key="frame" x="18.666666666666657" y="23" width="48" height="17"/>
<constraints>
<constraint firstAttribute="height" constant="17" id="nAr-LR-mvb"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="12"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="3Ml-mg-Cxw">
<rect key="frame" x="2" y="41.999999999999986" width="81" height="22.333333333333329"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<state key="normal" title="10" image="family_diamond">
<color key="titleColor" red="1" green="0.1529411765" blue="0.1529411765" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
</button>
</subviews>
<color key="backgroundColor" red="0.85490196080000003" green="1" blue="0.8862745098" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="trailing" secondItem="3Ml-mg-Cxw" secondAttribute="trailing" constant="2" id="4Wk-yD-BbV"/>
<constraint firstItem="Rjt-H4-heD" firstAttribute="top" secondItem="KF6-Jg-pqn" secondAttribute="bottom" constant="2" id="F2T-k5-Kgv"/>
<constraint firstAttribute="bottom" secondItem="3Ml-mg-Cxw" secondAttribute="bottom" constant="2" id="LJz-rW-T02"/>
<constraint firstItem="Rjt-H4-heD" firstAttribute="centerX" secondItem="oGH-dJ-lZy" secondAttribute="centerX" id="O15-tt-LOO"/>
<constraint firstAttribute="width" constant="85" id="bmv-lS-3aZ"/>
<constraint firstItem="3Ml-mg-Cxw" firstAttribute="leading" secondItem="oGH-dJ-lZy" secondAttribute="leading" constant="2" id="g7c-ng-N2i"/>
<constraint firstItem="3Ml-mg-Cxw" firstAttribute="top" secondItem="Rjt-H4-heD" secondAttribute="bottom" constant="2" id="jfG-L6-goi"/>
<constraint firstItem="KF6-Jg-pqn" firstAttribute="top" secondItem="oGH-dJ-lZy" secondAttribute="top" constant="4" id="udE-f7-Bn7"/>
<constraint firstItem="KF6-Jg-pqn" firstAttribute="centerX" secondItem="oGH-dJ-lZy" secondAttribute="centerX" id="xZZ-80-b2m"/>
</constraints>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="layer.masksToBounds" value="YES"/>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="4"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</view>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="v1E-D6-JeF">
<rect key="frame" x="278" y="126" width="60" height="28"/>
<color key="backgroundColor" red="0.22745098039215686" green="0.73725490196078436" blue="0.42745098039215684" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="height" constant="28" id="C6z-41-oB8"/>
<constraint firstAttribute="width" constant="60" id="Qmm-ha-usv"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="13"/>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<state key="normal" title="续租"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="layer.masksToBounds" value="YES"/>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="14"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
<connections>
<action selector="continueAction:" destination="KGk-i7-Jjw" eventType="touchUpInside" id="0Dk-bG-uLt"/>
</connections>
</button>
</subviews>
<constraints>
<constraint firstItem="VGe-Cc-S6Q" firstAttribute="top" secondItem="D6h-bE-tlh" secondAttribute="bottom" constant="8" id="0xl-vd-Eab"/>
<constraint firstItem="Xpt-NC-KbR" firstAttribute="top" secondItem="iH0-Pj-t8s" secondAttribute="top" constant="14" id="0yY-Uq-uIw"/>
<constraint firstItem="uXg-p7-J2S" firstAttribute="top" secondItem="iH0-Pj-t8s" secondAttribute="top" constant="12" id="3Up-H8-deH"/>
<constraint firstItem="BVQ-z4-fHs" firstAttribute="top" secondItem="AEg-Tu-ye6" secondAttribute="bottom" constant="4" id="45o-bc-VTo"/>
<constraint firstItem="3c8-yw-ZcY" firstAttribute="leading" secondItem="Xpt-NC-KbR" secondAttribute="leading" id="7he-6a-LQn"/>
<constraint firstAttribute="bottom" secondItem="VGe-Cc-S6Q" secondAttribute="bottom" constant="12" id="87e-jS-o6v"/>
<constraint firstItem="D6h-bE-tlh" firstAttribute="top" secondItem="3c8-yw-ZcY" secondAttribute="bottom" constant="8" id="GX3-ge-Kid"/>
<constraint firstItem="AEg-Tu-ye6" firstAttribute="leading" secondItem="uXg-p7-J2S" secondAttribute="leading" constant="-10" id="Ggr-Ur-BTo"/>
<constraint firstAttribute="trailing" secondItem="Xpt-NC-KbR" secondAttribute="trailing" constant="11" id="IrF-U1-Mro"/>
<constraint firstItem="AEg-Tu-ye6" firstAttribute="top" secondItem="uXg-p7-J2S" secondAttribute="bottom" constant="8" id="J9W-JM-n7A"/>
<constraint firstItem="VGe-Cc-S6Q" firstAttribute="leading" secondItem="Xpt-NC-KbR" secondAttribute="leading" id="Jsy-KK-zrr"/>
<constraint firstItem="Msn-nc-t9D" firstAttribute="top" secondItem="iH0-Pj-t8s" secondAttribute="top" id="Rk3-kc-29m"/>
<constraint firstItem="D6h-bE-tlh" firstAttribute="leading" secondItem="Xpt-NC-KbR" secondAttribute="leading" id="WX5-EF-GjZ"/>
<constraint firstItem="v1E-D6-JeF" firstAttribute="bottom" secondItem="VGe-Cc-S6Q" secondAttribute="bottom" id="Xhb-uf-REu"/>
<constraint firstItem="oGH-dJ-lZy" firstAttribute="top" secondItem="VGe-Cc-S6Q" secondAttribute="top" id="bvy-kk-VyI"/>
<constraint firstItem="oGH-dJ-lZy" firstAttribute="bottom" secondItem="VGe-Cc-S6Q" secondAttribute="bottom" id="fer-eg-Q8u"/>
<constraint firstAttribute="trailing" secondItem="Msn-nc-t9D" secondAttribute="trailing" id="gQ1-bd-h8C"/>
<constraint firstItem="uXg-p7-J2S" firstAttribute="leading" secondItem="iH0-Pj-t8s" secondAttribute="leading" constant="18" id="jUx-NP-cQj"/>
<constraint firstItem="AEg-Tu-ye6" firstAttribute="trailing" secondItem="uXg-p7-J2S" secondAttribute="trailing" constant="10" id="nNH-Kq-QmX"/>
<constraint firstItem="Xpt-NC-KbR" firstAttribute="leading" secondItem="uXg-p7-J2S" secondAttribute="trailing" constant="20" id="p9M-CF-kU5"/>
<constraint firstItem="oGH-dJ-lZy" firstAttribute="leading" secondItem="VGe-Cc-S6Q" secondAttribute="trailing" constant="4" id="qvY-IN-Sh2"/>
<constraint firstItem="cha-OZ-i3U" firstAttribute="centerX" secondItem="uXg-p7-J2S" secondAttribute="centerX" id="r8z-sa-uZA"/>
<constraint firstItem="cha-OZ-i3U" firstAttribute="top" secondItem="BVQ-z4-fHs" secondAttribute="bottom" constant="5" id="ri0-KS-mht"/>
<constraint firstAttribute="trailing" secondItem="v1E-D6-JeF" secondAttribute="trailing" constant="5" id="t3Y-Ci-cqO"/>
<constraint firstAttribute="bottom" secondItem="Msn-nc-t9D" secondAttribute="bottom" id="vAB-on-UgX"/>
<constraint firstItem="3c8-yw-ZcY" firstAttribute="top" secondItem="Xpt-NC-KbR" secondAttribute="bottom" constant="10" id="vo1-0c-qqk"/>
<constraint firstItem="Msn-nc-t9D" firstAttribute="leading" secondItem="iH0-Pj-t8s" secondAttribute="leading" id="xki-e1-3Kn"/>
<constraint firstItem="BVQ-z4-fHs" firstAttribute="centerX" secondItem="uXg-p7-J2S" secondAttribute="centerX" id="zMn-Oa-xMf"/>
</constraints>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="layer.masksToBounds" value="YES"/>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="12"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</view>
</subviews>
<constraints>
<constraint firstItem="iH0-Pj-t8s" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" constant="6" id="Qrb-JX-7dX"/>
<constraint firstItem="iH0-Pj-t8s" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="16" id="VM1-pJ-dqP"/>
<constraint firstAttribute="trailing" secondItem="iH0-Pj-t8s" secondAttribute="trailing" constant="16" id="ng7-pJ-1Mx"/>
<constraint firstAttribute="bottom" secondItem="iH0-Pj-t8s" secondAttribute="bottom" constant="6" id="qzE-xj-NKp"/>
</constraints>
</tableViewCellContentView>
<viewLayoutGuide key="safeArea" id="aW0-zy-SZf"/>
<connections>
<outlet property="collectionView" destination="Xpt-NC-KbR" id="pmE-BS-kUl"/>
<outlet property="continueBtn" destination="v1E-D6-JeF" id="Srn-jh-maM"/>
<outlet property="dayLabel" destination="3c8-yw-ZcY" id="MbY-ho-AdO"/>
<outlet property="flowLayout" destination="ErA-Km-MvK" id="hkS-jB-9fF"/>
<outlet property="headerView" destination="uXg-p7-J2S" id="P7X-to-hlT"/>
<outlet property="nameLabel" destination="AEg-Tu-ye6" id="mys-qk-wdQ"/>
<outlet property="onlineLabel" destination="cha-OZ-i3U" id="CqR-eC-65V"/>
<outlet property="priceBtn" destination="BVQ-z4-fHs" id="CwE-cf-JVh"/>
<outlet property="timesLabel" destination="D6h-bE-tlh" id="Npo-LQ-mYv"/>
<outlet property="todayPriceBtn" destination="dpa-gV-fxG" id="tLX-md-1HV"/>
<outlet property="yestodayPriceBtn" destination="3Ml-mg-Cxw" id="kIm-ei-YWd"/>
</connections>
<point key="canvasLocation" x="257.25190839694653" y="66.901408450704224"/>
</tableViewCell>
</objects>
<resources>
<image name="family_diamond" width="14" height="14"/>
<image name="family_top_member_bg" width="343" height="164"/>
<image name="mine_recharge_corn" width="20" height="20"/>
</resources>
</document>

View File

@@ -0,0 +1,22 @@
//
// QXFamilyPriceRecordCell.h
// QXLive
//
// Created by 启星 on 2025/11/26.
//
#import <UIKit/UIKit.h>
#import "QXFamilyModel.h"
NS_ASSUME_NONNULL_BEGIN
@interface QXFamilyPriceRecordCell : UITableViewCell
@property (weak, nonatomic) IBOutlet UILabel *nameLabel;
@property (weak, nonatomic) IBOutlet UILabel *giftLabel;
@property (weak, nonatomic) IBOutlet UILabel *giftPriceLabel;
@property (weak, nonatomic) IBOutlet UILabel *timeLabel;
@property (weak, nonatomic) IBOutlet UILabel *moneyLabel;
@property (strong, nonatomic) QXFamilyEarningModel *model;
+(instancetype)cellWithTableView:(UITableView *)tableView;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,45 @@
//
// QXFamilyPriceRecordCell.m
// QXLive
//
// Created by on 2025/11/26.
//
#import "QXFamilyPriceRecordCell.h"
@implementation QXFamilyPriceRecordCell
+(instancetype)cellWithTableView:(UITableView *)tableView{
static NSString *cellId = @"QXFamilyPriceRecordCell";
QXFamilyPriceRecordCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];
if (!cell) {
cell = [[NSBundle mainBundle] loadNibNamed:cellId owner:nil options:nil].lastObject;
cell.backgroundColor = [UIColor clearColor];
cell.contentView.backgroundColor = [UIColor clearColor];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
}
return cell;
}
-(void)setModel:(QXFamilyEarningModel *)model{
_model = model;
self.nameLabel.text = model.nickname;
self.giftLabel.text = [NSString stringWithFormat:@"礼物名称:%@",model.gift_name];
self.giftPriceLabel.text = [NSString stringWithFormat:@"礼物金额:%@",model.gift_price];
NSDate *date = [NSDate dateWithTimeIntervalSince1970:model.createtime.longLongValue]; //,1000 , 1000
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
NSString*time = [formatter stringFromDate:date];
self.timeLabel.text = time;
self.moneyLabel.text = [NSString stringWithFormat:@"+%@",model.earnings];
}
- (void)awakeFromNib {
[super awakeFromNib];
// Initialization code
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
// Configure the view for the selected state
}
@end

View File

@@ -0,0 +1,109 @@
<?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_12" 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"/>
<tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" rowHeight="115" id="KGk-i7-Jjw" customClass="QXFamilyPriceRecordCell">
<rect key="frame" x="0.0" y="0.0" width="437" height="115"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM">
<rect key="frame" x="0.0" y="0.0" width="437" height="115"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="夏末" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="qhY-xK-j4V">
<rect key="frame" x="16" y="12" width="28" height="20"/>
<constraints>
<constraint firstAttribute="height" constant="20" id="yEo-s3-dl7"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="礼物名称:娃哈哈" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="HJ8-fz-wWx">
<rect key="frame" x="16" y="36" width="87" height="17"/>
<constraints>
<constraint firstAttribute="height" constant="17" id="9Tr-bc-dxx"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="12"/>
<color key="textColor" red="0.65098039215686276" green="0.65098039215686276" blue="0.65098039215686276" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="礼物金额:2.00" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="1Ye-0Q-Ars">
<rect key="frame" x="16" y="57" width="76.666666666666671" height="17"/>
<constraints>
<constraint firstAttribute="height" constant="17" id="D9K-U1-SJT"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="12"/>
<color key="textColor" red="0.65098039220000004" green="0.65098039220000004" blue="0.65098039220000004" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="时间:2024.12.14 11:21:45" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="K90-F2-gDK">
<rect key="frame" x="16" y="78" width="138.66666666666666" height="17"/>
<constraints>
<constraint firstAttribute="height" constant="17" id="NXB-k6-bcp"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="12"/>
<color key="textColor" red="0.65098039220000004" green="0.65098039220000004" blue="0.65098039220000004" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="flF-ys-FmL">
<rect key="frame" x="0.0" y="114" width="437" height="1"/>
<color key="backgroundColor" red="0.94509803921568625" green="0.94901960784313721" blue="0.95294117647058818" alpha="1" colorSpace="calibratedRGB"/>
<constraints>
<constraint firstAttribute="height" constant="1" id="Je4-fq-8DP"/>
</constraints>
</view>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="family_diamond" translatesAutoresizingMaskIntoConstraints="NO" id="Epl-Tk-yAO">
<rect key="frame" x="405" y="16" width="16" height="16"/>
<constraints>
<constraint firstAttribute="width" constant="16" id="8jn-qK-laY"/>
<constraint firstAttribute="height" constant="16" id="yT0-QV-hOt"/>
</constraints>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="+10" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ykc-S1-6gP">
<rect key="frame" x="375" y="14.333333333333334" width="29" height="19.333333333333329"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="16"/>
<color key="textColor" red="1" green="0.15294117647058825" blue="0.15294117647058825" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<constraints>
<constraint firstAttribute="trailing" secondItem="flF-ys-FmL" secondAttribute="trailing" id="1jc-En-ojk"/>
<constraint firstItem="Epl-Tk-yAO" firstAttribute="leading" secondItem="ykc-S1-6gP" secondAttribute="trailing" constant="1" id="41O-42-s4J"/>
<constraint firstItem="qhY-xK-j4V" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" constant="12" id="4ZR-PO-QSD"/>
<constraint firstItem="Epl-Tk-yAO" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" constant="16" id="51M-Qu-JSa"/>
<constraint firstItem="ykc-S1-6gP" firstAttribute="centerY" secondItem="Epl-Tk-yAO" secondAttribute="centerY" id="CuU-6Q-HHr"/>
<constraint firstItem="flF-ys-FmL" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" id="RIQ-sW-mWT"/>
<constraint firstAttribute="trailing" secondItem="Epl-Tk-yAO" secondAttribute="trailing" constant="16" id="RW9-oL-s1o"/>
<constraint firstItem="K90-F2-gDK" firstAttribute="top" secondItem="1Ye-0Q-Ars" secondAttribute="bottom" constant="4" id="Z6j-2T-Z0T"/>
<constraint firstItem="1Ye-0Q-Ars" firstAttribute="leading" secondItem="qhY-xK-j4V" secondAttribute="leading" id="ZCB-0t-61d"/>
<constraint firstItem="1Ye-0Q-Ars" firstAttribute="top" secondItem="HJ8-fz-wWx" secondAttribute="bottom" constant="4" id="bzk-lp-22S"/>
<constraint firstItem="qhY-xK-j4V" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="16" id="eQd-xw-aT2"/>
<constraint firstItem="HJ8-fz-wWx" firstAttribute="top" secondItem="qhY-xK-j4V" secondAttribute="bottom" constant="4" id="gJu-uP-c6T"/>
<constraint firstAttribute="bottom" secondItem="flF-ys-FmL" secondAttribute="bottom" id="jeJ-ag-rT0"/>
<constraint firstItem="HJ8-fz-wWx" firstAttribute="leading" secondItem="qhY-xK-j4V" secondAttribute="leading" id="tTq-x2-K3e"/>
<constraint firstItem="K90-F2-gDK" firstAttribute="leading" secondItem="qhY-xK-j4V" secondAttribute="leading" id="z1r-cR-lZo"/>
</constraints>
</tableViewCellContentView>
<viewLayoutGuide key="safeArea" id="aW0-zy-SZf"/>
<connections>
<outlet property="giftLabel" destination="HJ8-fz-wWx" id="pkM-L4-ZWQ"/>
<outlet property="giftPriceLabel" destination="1Ye-0Q-Ars" id="0fu-nF-wy3"/>
<outlet property="moneyLabel" destination="ykc-S1-6gP" id="1sU-VR-dQw"/>
<outlet property="nameLabel" destination="qhY-xK-j4V" id="cTI-xo-aUG"/>
<outlet property="timeLabel" destination="K90-F2-gDK" id="57k-vs-LDq"/>
</connections>
<point key="canvasLocation" x="228.24427480916029" y="44.718309859154935"/>
</tableViewCell>
</objects>
<resources>
<image name="family_diamond" width="14" height="14"/>
</resources>
</document>

View File

@@ -0,0 +1,22 @@
//
// QXFamilyTopCell.h
// QXLive
//
// Created by 启星 on 2025/11/26.
//
#import <UIKit/UIKit.h>
#import "QXFamilyModel.h"
NS_ASSUME_NONNULL_BEGIN
@interface QXFamilyTopCell : UITableViewCell
@property (weak, nonatomic) IBOutlet QXSeatHeaderView *headerView;
@property (weak, nonatomic) IBOutlet UILabel *nameLabel;
@property (weak, nonatomic) IBOutlet UILabel *IdLabel;
@property (weak, nonatomic) IBOutlet UILabel *priceLabel;
@property (weak, nonatomic) IBOutlet UIButton *timesBtn;
@property (strong, nonatomic) QXFamilyModel *model;
+(instancetype)cellWithTableView:(UITableView *)tableView;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,55 @@
//
// QXFamilyTopCell.m
// QXLive
//
// Created by on 2025/11/26.
//
#import "QXFamilyTopCell.h"
#import "QXFamilyPriceRecordViewController.h"
@implementation QXFamilyTopCell
+(instancetype)cellWithTableView:(UITableView *)tableView{
static NSString *cellId = @"QXFamilyTopCell";
QXFamilyTopCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];
if (!cell) {
cell = [[NSBundle mainBundle] loadNibNamed:cellId owner:nil options:nil].lastObject;
cell.backgroundColor = [UIColor clearColor];
cell.contentView.backgroundColor = [UIColor clearColor];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
}
return cell;
}
- (void)awakeFromNib {
[super awakeFromNib];
// Initialization code
}
- (IBAction)familyGroupAction:(id)sender {
if (self.model.group_members_lists.count == 0) {
showToast(@"家族群至少需要签约一位徒弟");
}else{
[[QXGlobal shareGlobal] chatWithGroupId:self.model.group_id cover:self.model.group_owner_info.avatar name:[NSString stringWithFormat:@"%@的家族",self.model.group_owner_info.nickname] navagationController:self.viewController.navigationController];
}
}
-(void)setModel:(QXFamilyModel *)model{
_model = model;
[self.headerView setHeadIcon:model.group_owner_info.avatar dress:model.group_owner_info.dress];
[self.headerView.nobilityImageView sd_setImageWithURL:[NSURL URLWithString:model.group_owner_info.nobility_image]];
self.nameLabel.text = model.group_owner_info.nickname;
self.IdLabel.text = [NSString stringWithFormat:@"ID:%@",model.group_owner_info.user_code];
self.priceLabel.text = model.group_earnings;
[self.timesBtn setTitle:[NSString stringWithFormat:@"签约次数:%@",model.group_members_num] forState:(UIControlStateNormal)];
}
- (IBAction)moreAction:(id)sender {
QXFamilyPriceRecordViewController *vc = [[QXFamilyPriceRecordViewController alloc] init];
[self.viewController.navigationController pushViewController:vc animated:YES];
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
// Configure the view for the selected state
}
@end

View File

@@ -0,0 +1,194 @@
<?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_12" 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="System colors in document resources" minToolsVersion="11.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"/>
<tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" rowHeight="151" id="KGk-i7-Jjw" customClass="QXFamilyTopCell">
<rect key="frame" x="0.0" y="0.0" width="450" height="166"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM">
<rect key="frame" x="0.0" y="0.0" width="450" height="166"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="3BO-xe-hek">
<rect key="frame" x="16" y="6" width="418" height="154"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="family_top_card_bg" translatesAutoresizingMaskIntoConstraints="NO" id="GHu-EJ-Wbd">
<rect key="frame" x="0.0" y="0.0" width="418" height="154"/>
</imageView>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="e13-1K-ekR" customClass="QXSeatHeaderView">
<rect key="frame" x="12" y="12" width="52" height="68"/>
<constraints>
<constraint firstAttribute="width" constant="52" id="ANo-cs-wER"/>
<constraint firstAttribute="height" constant="68" id="XBq-sk-iDv"/>
</constraints>
</view>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="张三" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="TkV-BL-yL5">
<rect key="frame" x="70" y="18" width="32" height="20"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="16"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="ID:000" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="z3B-k1-NTB">
<rect key="frame" x="70" y="48" width="41" height="16"/>
<fontDescription key="fontDescription" type="system" pointSize="13"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.65000000000000002" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="PyP-w3-ARC">
<rect key="frame" x="347" y="34" width="59" height="24"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="width" constant="59" id="YPA-f2-6hz"/>
<constraint firstAttribute="height" constant="24" id="us6-M5-pLx"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<state key="normal" title="家族群">
<color key="titleColor" red="0.22745098039215686" green="0.73725490196078436" blue="0.42745098039215684" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="layer.masksToBounds" value="YES"/>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="12"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
<connections>
<action selector="familyGroupAction:" destination="KGk-i7-Jjw" eventType="touchUpInside" id="kgd-1Q-MnU"/>
</connections>
</button>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="family_top_money_bg" translatesAutoresizingMaskIntoConstraints="NO" id="7nK-sc-Xb1">
<rect key="frame" x="12" y="90" width="394" height="34"/>
<constraints>
<constraint firstAttribute="height" constant="34" id="8p3-Y6-R2b"/>
</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="e4c-SV-262">
<rect key="frame" x="20" y="97.333333333333329" width="71.666666666666671" height="19.333333333333329"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="16"/>
<color key="textColor" red="1" green="0.15294117647058825" blue="0.15294117647058825" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="10" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="3Oj-ZZ-dJY">
<rect key="frame" x="115.66666666666666" y="97" width="19" height="20"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="16"/>
<color key="textColor" red="1" green="0.1529411765" blue="0.1529411765" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="wallet_diamond" translatesAutoresizingMaskIntoConstraints="NO" id="cTA-sK-hax">
<rect key="frame" x="93.666666666666671" y="97" width="20" height="20"/>
<constraints>
<constraint firstAttribute="height" constant="20" id="DQX-KA-pkE"/>
<constraint firstAttribute="width" constant="20" id="NPS-q0-41H"/>
</constraints>
</imageView>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="p1I-Q6-afr">
<rect key="frame" x="12" y="118" width="95" height="24"/>
<color key="backgroundColor" red="0.73333333333333328" green="0.63529411764705879" blue="0.99607843137254903" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="width" constant="95" id="9QQ-oj-Ef7"/>
<constraint firstAttribute="height" constant="24" id="fqd-hY-yNf"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="13"/>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<state key="normal" title="签约次数2"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="layer.masksToBounds" value="YES"/>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="12"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="0gn-8b-lI6">
<rect key="frame" x="303" y="90" width="95" height="34"/>
<constraints>
<constraint firstAttribute="width" constant="95" id="s59-iI-L71"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="13"/>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<state key="normal" title="查看更多">
<color key="titleColor" red="0.0" green="0.0" blue="0.0" alpha="0.48999999999999999" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="layer.masksToBounds" value="YES"/>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="12"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
<connections>
<action selector="moreAction:" destination="KGk-i7-Jjw" eventType="touchUpInside" id="VfQ-Au-zQr"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
<constraints>
<constraint firstAttribute="trailing" secondItem="GHu-EJ-Wbd" secondAttribute="trailing" id="0jE-EF-hX0"/>
<constraint firstItem="TkV-BL-yL5" firstAttribute="top" secondItem="e13-1K-ekR" secondAttribute="top" constant="6" id="75K-gp-Cgc"/>
<constraint firstAttribute="bottom" secondItem="p1I-Q6-afr" secondAttribute="bottom" constant="12" id="8lM-bl-kBQ"/>
<constraint firstAttribute="trailing" secondItem="7nK-sc-Xb1" secondAttribute="trailing" constant="12" id="9sa-qm-BwO"/>
<constraint firstAttribute="trailing" secondItem="PyP-w3-ARC" secondAttribute="trailing" constant="12" id="ArF-ga-7Pc"/>
<constraint firstItem="e4c-SV-262" firstAttribute="centerY" secondItem="7nK-sc-Xb1" secondAttribute="centerY" id="Fet-Ld-aPl"/>
<constraint firstItem="0gn-8b-lI6" firstAttribute="top" secondItem="7nK-sc-Xb1" secondAttribute="top" id="JhD-54-GuB"/>
<constraint firstItem="e13-1K-ekR" firstAttribute="top" secondItem="3BO-xe-hek" secondAttribute="top" constant="12" id="K3Q-PA-aBG"/>
<constraint firstItem="GHu-EJ-Wbd" firstAttribute="top" secondItem="3BO-xe-hek" secondAttribute="top" id="NnM-R4-vuZ"/>
<constraint firstItem="PyP-w3-ARC" firstAttribute="centerY" secondItem="e13-1K-ekR" secondAttribute="centerY" id="PaC-cQ-ZGg"/>
<constraint firstItem="e13-1K-ekR" firstAttribute="leading" secondItem="3BO-xe-hek" secondAttribute="leading" constant="12" id="SL7-K7-CzP"/>
<constraint firstItem="7nK-sc-Xb1" firstAttribute="top" secondItem="e13-1K-ekR" secondAttribute="bottom" constant="10" id="The-Fm-7EX"/>
<constraint firstItem="z3B-k1-NTB" firstAttribute="leading" secondItem="TkV-BL-yL5" secondAttribute="leading" id="TmM-oO-jaK"/>
<constraint firstAttribute="trailing" secondItem="0gn-8b-lI6" secondAttribute="trailing" constant="20" id="U3O-kJ-MpN"/>
<constraint firstItem="TkV-BL-yL5" firstAttribute="leading" secondItem="e13-1K-ekR" secondAttribute="trailing" constant="6" id="VM4-zX-a10"/>
<constraint firstItem="cTA-sK-hax" firstAttribute="leading" secondItem="e4c-SV-262" secondAttribute="trailing" constant="2" id="ZQc-Hs-BIy"/>
<constraint firstItem="cTA-sK-hax" firstAttribute="centerY" secondItem="7nK-sc-Xb1" secondAttribute="centerY" id="cPp-hD-TGb"/>
<constraint firstItem="7nK-sc-Xb1" firstAttribute="leading" secondItem="3BO-xe-hek" secondAttribute="leading" constant="12" id="cbo-tO-HwG"/>
<constraint firstItem="3Oj-ZZ-dJY" firstAttribute="centerY" secondItem="7nK-sc-Xb1" secondAttribute="centerY" id="iaD-sN-p3Y"/>
<constraint firstItem="e4c-SV-262" firstAttribute="leading" secondItem="7nK-sc-Xb1" secondAttribute="leading" constant="8" id="j67-lX-4D3"/>
<constraint firstItem="p1I-Q6-afr" firstAttribute="leading" secondItem="e13-1K-ekR" secondAttribute="leading" id="jgY-0h-fIK"/>
<constraint firstItem="3Oj-ZZ-dJY" firstAttribute="leading" secondItem="cTA-sK-hax" secondAttribute="trailing" constant="2" id="lNr-Lh-ws1"/>
<constraint firstItem="0gn-8b-lI6" firstAttribute="bottom" secondItem="7nK-sc-Xb1" secondAttribute="bottom" id="sfq-af-C6B"/>
<constraint firstAttribute="bottom" secondItem="GHu-EJ-Wbd" secondAttribute="bottom" id="srm-KP-Woe"/>
<constraint firstItem="GHu-EJ-Wbd" firstAttribute="leading" secondItem="3BO-xe-hek" secondAttribute="leading" id="tYV-M9-uBA"/>
<constraint firstItem="z3B-k1-NTB" firstAttribute="top" secondItem="TkV-BL-yL5" secondAttribute="bottom" constant="10" id="w2f-jH-NvI"/>
</constraints>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="layer.masksToBounds" value="YES"/>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="12"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</view>
</subviews>
<constraints>
<constraint firstItem="3BO-xe-hek" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="16" id="4fs-bY-gK5"/>
<constraint firstAttribute="trailing" secondItem="3BO-xe-hek" secondAttribute="trailing" constant="16" id="iQP-Gx-B1k"/>
<constraint firstItem="3BO-xe-hek" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" constant="6" id="o1N-M7-JGZ"/>
<constraint firstAttribute="bottom" secondItem="3BO-xe-hek" secondAttribute="bottom" constant="6" id="whe-CV-i6e"/>
</constraints>
</tableViewCellContentView>
<viewLayoutGuide key="safeArea" id="aW0-zy-SZf"/>
<connections>
<outlet property="IdLabel" destination="z3B-k1-NTB" id="boA-R9-9hQ"/>
<outlet property="headerView" destination="e13-1K-ekR" id="Oho-Pf-Go7"/>
<outlet property="nameLabel" destination="TkV-BL-yL5" id="4va-BZ-DuQ"/>
<outlet property="priceLabel" destination="3Oj-ZZ-dJY" id="7EC-Hv-Xv0"/>
<outlet property="timesBtn" destination="p1I-Q6-afr" id="N9W-RK-ulb"/>
</connections>
<point key="canvasLocation" x="238.1679389312977" y="57.04225352112676"/>
</tableViewCell>
</objects>
<resources>
<image name="family_top_card_bg" width="343" height="154"/>
<image name="family_top_money_bg" width="319" height="34"/>
<image name="wallet_diamond" width="28" height="28"/>
<systemColor name="systemBackgroundColor">
<color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</systemColor>
</resources>
</document>

View File

@@ -21,7 +21,12 @@
-(void)setModel:(QXDayTaskListModel *)model{ -(void)setModel:(QXDayTaskListModel *)model{
_model = model; _model = model;
self.titleLabel.text = model.task_name; self.titleLabel.text = model.task_name;
NSString*subTitle = [NSString stringWithFormat:@"金币+%@",model.gold_reward]; NSString*subTitle = @"";
if (model.reward_type.intValue == 1) {
subTitle = [NSString stringWithFormat:@"金币+%@",model.gold_reward];
}else{
subTitle = [NSString stringWithFormat:@"钻石+%@",model.gold_reward];
}
NSMutableAttributedString *attr = [[NSMutableAttributedString alloc] initWithString:subTitle]; NSMutableAttributedString *attr = [[NSMutableAttributedString alloc] initWithString:subTitle];
[attr yy_setColor:RGB16(0xFF8827) range:[subTitle rangeOfString:[NSString stringWithFormat:@"+%@",model.gold_reward]]]; [attr yy_setColor:RGB16(0xFF8827) range:[subTitle rangeOfString:[NSString stringWithFormat:@"+%@",model.gold_reward]]];
self.subTitleLabel.attributedText = attr; self.subTitleLabel.attributedText = attr;

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 611 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 252 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 300 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 455 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 983 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 827 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 263 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 551 KiB

View File

@@ -0,0 +1,6 @@
{
"info" : {
"author" : "xcode",
"version" : 1
}
}

Some files were not shown because too many files have changed in this diff Show More