爵位完成
@@ -787,7 +787,7 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"$(SDKROOT)/usr/lib/swift",
|
"$(SDKROOT)/usr/lib/swift",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.1.2;
|
MARKETING_VERSION = 1.1.3;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.qxcm.qxlive;
|
PRODUCT_BUNDLE_IDENTIFIER = com.qxcm.qxlive;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
@@ -853,7 +853,7 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"$(SDKROOT)/usr/lib/swift",
|
"$(SDKROOT)/usr/lib/swift",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.1.2;
|
MARKETING_VERSION = 1.1.3;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.qxcm.qxlive;
|
PRODUCT_BUNDLE_IDENTIFIER = com.qxcm.qxlive;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
|
|||||||
@@ -157,9 +157,9 @@
|
|||||||
itemH = (SCREEN_WIDTH-15-15-15)/2 + 94;
|
itemH = (SCREEN_WIDTH-15-15-15)/2 + 94;
|
||||||
}else if(imgArr.count > 1){
|
}else if(imgArr.count > 1){
|
||||||
if (imgArr.count > 3) {
|
if (imgArr.count > 3) {
|
||||||
itemH = (SCREEN_WIDTH-16*2-12*2-10*2)/3*2+10+94;
|
itemH = (SCREEN_WIDTH-16*2-12*2-10*2)/3*2+10+94+ScaleWidth(10);
|
||||||
}else{
|
}else{
|
||||||
itemH = (SCREEN_WIDTH-16*2-12*2-10*2)/3+94;
|
itemH = (SCREEN_WIDTH-16*2-12*2-10*2)/3+94+ScaleWidth(10);
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
itemH = 94;
|
itemH = 94;
|
||||||
|
|||||||
@@ -49,6 +49,16 @@
|
|||||||
-(void)setModel:(QXUserHomeModel *)model{
|
-(void)setModel:(QXUserHomeModel *)model{
|
||||||
_model = model;
|
_model = model;
|
||||||
[self.avatarImgV setHeadIcon:model.avatar dress:@""];
|
[self.avatarImgV setHeadIcon:model.avatar dress:@""];
|
||||||
|
if ([model.nobility_image isExist]) {
|
||||||
|
[self.avatarImgV.nobilityImageView sd_setImageWithURL:[NSURL URLWithString:model.nobility_image]];
|
||||||
|
}else{
|
||||||
|
self.avatarImgV.nobilityImageView.image = nil;
|
||||||
|
}
|
||||||
|
if ([model.nickname_color isExist]) {
|
||||||
|
self.nicknameLab.textColor = [UIColor colorWithHexString:model.nickname_color];
|
||||||
|
}else{
|
||||||
|
self.nicknameLab.textColor = RGB16(0x212121);
|
||||||
|
}
|
||||||
self.nicknameLab.text = model.nickname;
|
self.nicknameLab.text = model.nickname;
|
||||||
self.ageLabel.text = [NSString stringWithFormat:@"%ld岁 ip属地: %@",[model.birthday ageWithDateOfBirth],model.loginip];
|
self.ageLabel.text = [NSString stringWithFormat:@"%ld岁 ip属地: %@",[model.birthday ageWithDateOfBirth],model.loginip];
|
||||||
CGFloat imgWidth = (SCREEN_WIDTH-16*2-12*2-10*2)/3;
|
CGFloat imgWidth = (SCREEN_WIDTH-16*2-12*2-10*2)/3;
|
||||||
|
|||||||
@@ -20,9 +20,9 @@
|
|||||||
<rect key="frame" x="16" y="6" width="339" height="83"/>
|
<rect key="frame" x="16" y="6" width="339" height="83"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="ij8-0l-yjh">
|
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="ij8-0l-yjh">
|
||||||
<rect key="frame" x="12" y="12" width="50" height="50"/>
|
<rect key="frame" x="12" y="12" width="50" height="60"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="height" constant="50" id="Aa4-FN-u4i"/>
|
<constraint firstAttribute="width" secondItem="ij8-0l-yjh" secondAttribute="height" multiplier="50:60" id="6E5-lr-xCi"/>
|
||||||
<constraint firstAttribute="width" constant="50" id="b1V-LD-cvU"/>
|
<constraint firstAttribute="width" constant="50" id="b1V-LD-cvU"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
<userDefinedRuntimeAttributes>
|
<userDefinedRuntimeAttributes>
|
||||||
@@ -33,10 +33,10 @@
|
|||||||
</userDefinedRuntimeAttributes>
|
</userDefinedRuntimeAttributes>
|
||||||
</imageView>
|
</imageView>
|
||||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="SRz-S8-eVY" customClass="QXSeatHeaderView">
|
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="SRz-S8-eVY" customClass="QXSeatHeaderView">
|
||||||
<rect key="frame" x="12" y="12" width="50" height="50"/>
|
<rect key="frame" x="12" y="12" width="50" height="60"/>
|
||||||
</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="8cq-E3-DvJ">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="8cq-E3-DvJ">
|
||||||
<rect key="frame" x="72" y="19" width="40" height="18"/>
|
<rect key="frame" x="93" y="20" width="40" height="18"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="height" constant="18" id="qwD-PD-2sr"/>
|
<constraint firstAttribute="height" constant="18" id="qwD-PD-2sr"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
@@ -45,14 +45,14 @@
|
|||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<imageView hidden="YES" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="gIi-P2-Y9S">
|
<imageView hidden="YES" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="gIi-P2-Y9S">
|
||||||
<rect key="frame" x="118" y="20" width="42" height="16"/>
|
<rect key="frame" x="139" y="21" width="42" height="16"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="width" constant="42" id="Pa0-JD-WZI"/>
|
<constraint firstAttribute="width" constant="42" id="Pa0-JD-WZI"/>
|
||||||
<constraint firstAttribute="height" constant="16" id="nev-GJ-TTd"/>
|
<constraint firstAttribute="height" constant="16" id="nev-GJ-TTd"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
</imageView>
|
</imageView>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="SfJ-0f-fTV">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="SfJ-0f-fTV">
|
||||||
<rect key="frame" x="72" y="45" width="31.666666666666671" height="14.666666666666664"/>
|
<rect key="frame" x="72" y="46" width="31.666666666666671" height="14.666666666666664"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="height" constant="14.67" id="ZBE-6b-COh"/>
|
<constraint firstAttribute="height" constant="14.67" id="ZBE-6b-COh"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
@@ -65,7 +65,7 @@
|
|||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
</button>
|
</button>
|
||||||
<button opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="WzX-5h-Rjx">
|
<button opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="WzX-5h-Rjx">
|
||||||
<rect key="frame" x="254" y="24" width="73" height="26"/>
|
<rect key="frame" x="254" y="29" width="73" height="26"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="width" constant="73" id="xrz-si-tcM"/>
|
<constraint firstAttribute="width" constant="73" id="xrz-si-tcM"/>
|
||||||
<constraint firstAttribute="height" constant="26" id="zly-Ov-2fX"/>
|
<constraint firstAttribute="height" constant="26" id="zly-Ov-2fX"/>
|
||||||
@@ -83,14 +83,14 @@
|
|||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="aff-rQ-ltL">
|
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="aff-rQ-ltL">
|
||||||
<rect key="frame" x="12" y="71" width="315" height="0.0"/>
|
<rect key="frame" x="12" y="81" width="315" height="0.0"/>
|
||||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="height" id="HM6-cc-JXk"/>
|
<constraint firstAttribute="height" id="HM6-cc-JXk"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
</view>
|
</view>
|
||||||
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="rE2-Ub-cG3">
|
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="rE2-Ub-cG3">
|
||||||
<rect key="frame" x="46" y="46" width="16" height="16"/>
|
<rect key="frame" x="72" y="21" width="16" height="16"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="width" constant="16" id="hDn-pN-Z1j"/>
|
<constraint firstAttribute="width" constant="16" id="hDn-pN-Z1j"/>
|
||||||
<constraint firstAttribute="height" constant="16" id="txd-O6-q3p"/>
|
<constraint firstAttribute="height" constant="16" id="txd-O6-q3p"/>
|
||||||
@@ -106,18 +106,18 @@
|
|||||||
<constraint firstItem="gIi-P2-Y9S" firstAttribute="leading" secondItem="8cq-E3-DvJ" secondAttribute="trailing" constant="6" id="9a3-JM-DNn"/>
|
<constraint firstItem="gIi-P2-Y9S" firstAttribute="leading" secondItem="8cq-E3-DvJ" secondAttribute="trailing" constant="6" id="9a3-JM-DNn"/>
|
||||||
<constraint firstItem="SfJ-0f-fTV" firstAttribute="leading" secondItem="ij8-0l-yjh" secondAttribute="trailing" constant="10" id="LpR-OW-ApF"/>
|
<constraint firstItem="SfJ-0f-fTV" firstAttribute="leading" secondItem="ij8-0l-yjh" secondAttribute="trailing" constant="10" id="LpR-OW-ApF"/>
|
||||||
<constraint firstItem="SRz-S8-eVY" firstAttribute="bottom" secondItem="ij8-0l-yjh" secondAttribute="bottom" id="PL9-sW-Etp"/>
|
<constraint firstItem="SRz-S8-eVY" firstAttribute="bottom" secondItem="ij8-0l-yjh" secondAttribute="bottom" id="PL9-sW-Etp"/>
|
||||||
<constraint firstItem="8cq-E3-DvJ" firstAttribute="top" secondItem="d7u-yz-ciJ" secondAttribute="top" constant="19" id="QB4-FR-hQC"/>
|
|
||||||
<constraint firstAttribute="trailing" secondItem="aff-rQ-ltL" secondAttribute="trailing" constant="12" id="UJy-KH-Me6"/>
|
<constraint firstAttribute="trailing" secondItem="aff-rQ-ltL" secondAttribute="trailing" constant="12" id="UJy-KH-Me6"/>
|
||||||
<constraint firstItem="rE2-Ub-cG3" firstAttribute="trailing" secondItem="SRz-S8-eVY" secondAttribute="trailing" id="Us7-e2-feo"/>
|
|
||||||
<constraint firstItem="ij8-0l-yjh" firstAttribute="leading" secondItem="d7u-yz-ciJ" secondAttribute="leading" constant="12" id="VNZ-KS-lUT"/>
|
<constraint firstItem="ij8-0l-yjh" firstAttribute="leading" secondItem="d7u-yz-ciJ" secondAttribute="leading" constant="12" id="VNZ-KS-lUT"/>
|
||||||
<constraint firstItem="rE2-Ub-cG3" firstAttribute="bottom" secondItem="SRz-S8-eVY" secondAttribute="bottom" id="Wkl-qB-guz"/>
|
<constraint firstItem="rE2-Ub-cG3" firstAttribute="leading" secondItem="ij8-0l-yjh" secondAttribute="trailing" constant="10" id="Vpj-sb-ZIl"/>
|
||||||
<constraint firstItem="aff-rQ-ltL" firstAttribute="top" secondItem="ij8-0l-yjh" secondAttribute="bottom" constant="9" id="gpK-ex-dHB"/>
|
<constraint firstItem="aff-rQ-ltL" firstAttribute="top" secondItem="ij8-0l-yjh" secondAttribute="bottom" constant="9" id="gpK-ex-dHB"/>
|
||||||
<constraint firstItem="WzX-5h-Rjx" firstAttribute="centerY" secondItem="ij8-0l-yjh" secondAttribute="centerY" id="lzk-gK-Xr5"/>
|
<constraint firstItem="WzX-5h-Rjx" firstAttribute="centerY" secondItem="ij8-0l-yjh" secondAttribute="centerY" id="lzk-gK-Xr5"/>
|
||||||
|
<constraint firstItem="8cq-E3-DvJ" firstAttribute="centerY" secondItem="rE2-Ub-cG3" secondAttribute="centerY" id="mVr-ao-77e"/>
|
||||||
<constraint firstItem="SfJ-0f-fTV" firstAttribute="top" secondItem="8cq-E3-DvJ" secondAttribute="bottom" constant="8" symbolic="YES" id="pb7-FA-QT6"/>
|
<constraint firstItem="SfJ-0f-fTV" firstAttribute="top" secondItem="8cq-E3-DvJ" secondAttribute="bottom" constant="8" symbolic="YES" id="pb7-FA-QT6"/>
|
||||||
<constraint firstItem="gIi-P2-Y9S" firstAttribute="centerY" secondItem="8cq-E3-DvJ" secondAttribute="centerY" id="qez-UP-KMH"/>
|
<constraint firstItem="gIi-P2-Y9S" firstAttribute="centerY" secondItem="8cq-E3-DvJ" secondAttribute="centerY" id="qez-UP-KMH"/>
|
||||||
<constraint firstItem="SRz-S8-eVY" firstAttribute="trailing" secondItem="ij8-0l-yjh" secondAttribute="trailing" id="sL4-bA-4lX"/>
|
<constraint firstItem="SRz-S8-eVY" firstAttribute="trailing" secondItem="ij8-0l-yjh" secondAttribute="trailing" id="sL4-bA-4lX"/>
|
||||||
<constraint firstItem="8cq-E3-DvJ" firstAttribute="leading" secondItem="ij8-0l-yjh" secondAttribute="trailing" constant="10" id="xsB-a1-v4y"/>
|
<constraint firstItem="8cq-E3-DvJ" firstAttribute="leading" secondItem="rE2-Ub-cG3" secondAttribute="trailing" constant="5" id="xsB-a1-v4y"/>
|
||||||
<constraint firstAttribute="trailing" secondItem="WzX-5h-Rjx" secondAttribute="trailing" constant="12" id="yE0-Ql-MBm"/>
|
<constraint firstAttribute="trailing" secondItem="WzX-5h-Rjx" secondAttribute="trailing" constant="12" id="yE0-Ql-MBm"/>
|
||||||
|
<constraint firstItem="ij8-0l-yjh" firstAttribute="top" secondItem="rE2-Ub-cG3" secondAttribute="bottom" constant="-25" id="yi3-el-D4c"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
<userDefinedRuntimeAttributes>
|
<userDefinedRuntimeAttributes>
|
||||||
<userDefinedRuntimeAttribute type="boolean" keyPath="layer.masksToBounds" value="YES"/>
|
<userDefinedRuntimeAttribute type="boolean" keyPath="layer.masksToBounds" value="YES"/>
|
||||||
|
|||||||
@@ -821,6 +821,10 @@
|
|||||||
}
|
}
|
||||||
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{
|
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{
|
||||||
QXGiftModel *model = self.dataArray[indexPath.row];
|
QXGiftModel *model = self.dataArray[indexPath.row];
|
||||||
|
if (model.is_lock.intValue == 1) {
|
||||||
|
showToast(@"请先开通爵位");
|
||||||
|
return;
|
||||||
|
}
|
||||||
if ([model.activities_id isEqualToString:@"5"]) {
|
if ([model.activities_id isEqualToString:@"5"]) {
|
||||||
/// 要进入活动
|
/// 要进入活动
|
||||||
if (self.selectetGiftBlock) {
|
if (self.selectetGiftBlock) {
|
||||||
|
|||||||
@@ -416,7 +416,7 @@
|
|||||||
}
|
}
|
||||||
-(void)getBanner{
|
-(void)getBanner{
|
||||||
@weakify(self)
|
@weakify(self)
|
||||||
[QXHomePageNetwork homeBannerSuccessBlock:^(NSArray<QXBanner *> * _Nonnull list) {
|
[QXHomePageNetwork homeBannerWithType:@"3" successBlock:^(NSArray<QXBanner *> * _Nonnull list) {
|
||||||
@strongify(self)
|
@strongify(self)
|
||||||
NSMutableArray *arr = [NSMutableArray array];
|
NSMutableArray *arr = [NSMutableArray array];
|
||||||
for (QXBanner *banner in list) {
|
for (QXBanner *banner in list) {
|
||||||
|
|||||||
@@ -34,7 +34,8 @@ NS_ASSUME_NONNULL_BEGIN
|
|||||||
/**
|
/**
|
||||||
首页banner
|
首页banner
|
||||||
*/
|
*/
|
||||||
+(void)homeBannerSuccessBlock:(void (^)(NSArray<QXBanner*>* list))successBlock
|
+(void)homeBannerWithType:(NSString*)type
|
||||||
|
successBlock:(void (^)(NSArray<QXBanner*>* list))successBlock
|
||||||
failBlock:(void (^)(NSError * error, NSString * msg))failBlock;
|
failBlock:(void (^)(NSError * error, NSString * msg))failBlock;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -35,9 +35,10 @@
|
|||||||
failBlock(error,msg);
|
failBlock(error,msg);
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
+(void)homeBannerSuccessBlock:(void (^)(NSArray<QXBanner*>* list))successBlock
|
+(void)homeBannerWithType:(NSString*)type
|
||||||
|
successBlock:(void (^)(NSArray<QXBanner*>* list))successBlock
|
||||||
failBlock:(void (^)(NSError * error, NSString * msg))failBlock{
|
failBlock:(void (^)(NSError * error, NSString * msg))failBlock{
|
||||||
[[QXRequset shareInstance] getWithUrl:QXHomeBanner parameters:@{@"type":@"3"} needCache:NO success:^(id responseObject) {
|
[[QXRequset shareInstance] getWithUrl:QXHomeBanner parameters:@{@"type":type?:@"3"} needCache:NO success:^(id responseObject) {
|
||||||
if (successBlock) {
|
if (successBlock) {
|
||||||
NSArray *list = [NSArray yy_modelArrayWithClass:[QXBanner class] json:responseObject[@"data"]];
|
NSArray *list = [NSArray yy_modelArrayWithClass:[QXBanner class] json:responseObject[@"data"]];
|
||||||
successBlock(list);
|
successBlock(list);
|
||||||
|
|||||||
@@ -36,6 +36,14 @@ NS_ASSUME_NONNULL_BEGIN
|
|||||||
@property (nonatomic,strong)NSString *dress;
|
@property (nonatomic,strong)NSString *dress;
|
||||||
/// 聊天气泡
|
/// 聊天气泡
|
||||||
@property (nonatomic,strong)NSString *chat_bubble;
|
@property (nonatomic,strong)NSString *chat_bubble;
|
||||||
|
/// 爵位图片
|
||||||
|
@property (nonatomic,strong)NSString *nobility_image;
|
||||||
|
/// 昵称颜色
|
||||||
|
@property (nonatomic,strong)NSString *nickname_color;
|
||||||
|
/// 是否可以设置隐身进入的状态:0-不行,1-可以
|
||||||
|
@property (nonatomic,strong)NSString *is_hide;
|
||||||
|
/// 当前状态:0-取消隐身,1-隐身进入
|
||||||
|
@property (nonatomic,strong)NSString *hide_status;
|
||||||
/// 各种卡片
|
/// 各种卡片
|
||||||
@property (nonatomic,strong)NSArray *icon;
|
@property (nonatomic,strong)NSArray *icon;
|
||||||
/// 1 能聊天 0不能聊天
|
/// 1 能聊天 0不能聊天
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
#import "QXGiftDisplayManager.h"
|
#import "QXGiftDisplayManager.h"
|
||||||
#import <AgoraRtcKit/AgoraRtcEngineKit.h>
|
#import <AgoraRtcKit/AgoraRtcEngineKit.h>
|
||||||
#import "TUIChatConfig.h"
|
#import "TUIChatConfig.h"
|
||||||
|
#import "QXDrifNobilityJoinRoomView.h"
|
||||||
|
|
||||||
@interface QXRoomMessageManager() <V2TIMGroupListener,V2TIMSimpleMsgListener,V2TIMAdvancedMsgListener>
|
@interface QXRoomMessageManager() <V2TIMGroupListener,V2TIMSimpleMsgListener,V2TIMAdvancedMsgListener>
|
||||||
@property (nonatomic,strong)NSString *groupId;
|
@property (nonatomic,strong)NSString *groupId;
|
||||||
@@ -109,6 +110,9 @@
|
|||||||
// md.play_image = jia_jia;
|
// md.play_image = jia_jia;
|
||||||
[[QXGiftPlayerManager shareManager] displayChatEffectView:jia_jia];
|
[[QXGiftPlayerManager shareManager] displayChatEffectView:jia_jia];
|
||||||
}
|
}
|
||||||
|
if ([model.FromUserInfo.enter_image isExist]) {
|
||||||
|
[[QXDrifNobilityJoinRoomView shareView] addNobilityUserModel:model];
|
||||||
|
}
|
||||||
if (self.delegate && [self.delegate respondsToSelector:@selector(didInsertMessge:)]) {
|
if (self.delegate && [self.delegate respondsToSelector:@selector(didInsertMessge:)]) {
|
||||||
[self.delegate didInsertMessge:model];
|
[self.delegate didInsertMessge:model];
|
||||||
}
|
}
|
||||||
@@ -743,6 +747,8 @@
|
|||||||
@"avatar":[QXGlobal shareGlobal].loginModel.avatar?[QXGlobal shareGlobal].loginModel.avatar:@"",
|
@"avatar":[QXGlobal shareGlobal].loginModel.avatar?[QXGlobal shareGlobal].loginModel.avatar:@"",
|
||||||
@"icon":[QXGlobal shareGlobal].loginModel.icon?[QXGlobal shareGlobal].loginModel.icon:@"",
|
@"icon":[QXGlobal shareGlobal].loginModel.icon?[QXGlobal shareGlobal].loginModel.icon:@"",
|
||||||
@"chat_bubble":[QXGlobal shareGlobal].loginModel.chat_bubble?:@"",
|
@"chat_bubble":[QXGlobal shareGlobal].loginModel.chat_bubble?:@"",
|
||||||
|
@"nobility_image":[QXGlobal shareGlobal].loginModel.nobility_image?:@"",
|
||||||
|
@"nickname_color":[QXGlobal shareGlobal].loginModel.nickname_color?:@"",
|
||||||
},
|
},
|
||||||
@"text":message
|
@"text":message
|
||||||
}
|
}
|
||||||
@@ -756,6 +762,8 @@
|
|||||||
userInfo.user_id = [QXGlobal shareGlobal].loginModel.user_id;
|
userInfo.user_id = [QXGlobal shareGlobal].loginModel.user_id;
|
||||||
userInfo.icon = [QXGlobal shareGlobal].loginModel.icon;
|
userInfo.icon = [QXGlobal shareGlobal].loginModel.icon;
|
||||||
userInfo.chat_bubble = [QXGlobal shareGlobal].loginModel.chat_bubble;
|
userInfo.chat_bubble = [QXGlobal shareGlobal].loginModel.chat_bubble;
|
||||||
|
userInfo.nobility_image = [QXGlobal shareGlobal].loginModel.nobility_image;
|
||||||
|
userInfo.nickname_color = [QXGlobal shareGlobal].loginModel.nickname_color;
|
||||||
model.FromUserInfo = userInfo;
|
model.FromUserInfo = userInfo;
|
||||||
model.messageType = QXRoomChatMessageTypeChat;
|
model.messageType = QXRoomChatMessageTypeChat;
|
||||||
if (self.delegate && [self.delegate respondsToSelector:@selector(didInsertMessge:)]) {
|
if (self.delegate && [self.delegate respondsToSelector:@selector(didInsertMessge:)]) {
|
||||||
@@ -783,6 +791,8 @@
|
|||||||
@"avatar":[QXGlobal shareGlobal].loginModel.avatar?[QXGlobal shareGlobal].loginModel.avatar:@"",
|
@"avatar":[QXGlobal shareGlobal].loginModel.avatar?[QXGlobal shareGlobal].loginModel.avatar:@"",
|
||||||
@"icon":[QXGlobal shareGlobal].loginModel.icon?[QXGlobal shareGlobal].loginModel.icon:@"",
|
@"icon":[QXGlobal shareGlobal].loginModel.icon?[QXGlobal shareGlobal].loginModel.icon:@"",
|
||||||
@"chat_bubble":[QXGlobal shareGlobal].loginModel.chat_bubble?:@"",
|
@"chat_bubble":[QXGlobal shareGlobal].loginModel.chat_bubble?:@"",
|
||||||
|
@"nobility_image":[QXGlobal shareGlobal].loginModel.nobility_image?:@"",
|
||||||
|
@"nickname_color":[QXGlobal shareGlobal].loginModel.nickname_color?:@"",
|
||||||
},
|
},
|
||||||
@"emoji":@{
|
@"emoji":@{
|
||||||
@"image":emoji.image?:@"",
|
@"image":emoji.image?:@"",
|
||||||
@@ -799,6 +809,8 @@
|
|||||||
userInfo.user_id = [QXGlobal shareGlobal].loginModel.user_id;
|
userInfo.user_id = [QXGlobal shareGlobal].loginModel.user_id;
|
||||||
userInfo.icon = [QXGlobal shareGlobal].loginModel.icon;
|
userInfo.icon = [QXGlobal shareGlobal].loginModel.icon;
|
||||||
userInfo.chat_bubble = [QXGlobal shareGlobal].loginModel.chat_bubble;
|
userInfo.chat_bubble = [QXGlobal shareGlobal].loginModel.chat_bubble;
|
||||||
|
userInfo.nobility_image = [QXGlobal shareGlobal].loginModel.nobility_image;
|
||||||
|
userInfo.nickname_color = [QXGlobal shareGlobal].loginModel.nickname_color;
|
||||||
model.FromUserInfo = userInfo;
|
model.FromUserInfo = userInfo;
|
||||||
model.messageType = QXRoomChatMessageTypeEmoji;
|
model.messageType = QXRoomChatMessageTypeEmoji;
|
||||||
model.emoji = emoji;
|
model.emoji = emoji;
|
||||||
|
|||||||
@@ -31,6 +31,8 @@
|
|||||||
#import "QXWalletRuleView.h"
|
#import "QXWalletRuleView.h"
|
||||||
#import "QXRechargeViewcController.h"
|
#import "QXRechargeViewcController.h"
|
||||||
#import "QXGiftWallViewController.h"
|
#import "QXGiftWallViewController.h"
|
||||||
|
#import "QXNobilityViewController.h"
|
||||||
|
#import "QXHomePageNetwork.h"
|
||||||
#import <WXApi.h>
|
#import <WXApi.h>
|
||||||
|
|
||||||
@interface QXMineViewController ()<UITableViewDelegate,UITableViewDataSource,QXMineServiceCellDelegate,QXMainHeaderViewDelegate>
|
@interface QXMineViewController ()<UITableViewDelegate,UITableViewDataSource,QXMineServiceCellDelegate,QXMainHeaderViewDelegate>
|
||||||
@@ -40,6 +42,7 @@
|
|||||||
//@property (nonatomic,strong)UIButton *serviceBtn;
|
//@property (nonatomic,strong)UIButton *serviceBtn;
|
||||||
//@property (nonatomic,strong)UIButton *settingBtn;
|
//@property (nonatomic,strong)UIButton *settingBtn;
|
||||||
@property (nonatomic,strong)QXUserModel *userModel;
|
@property (nonatomic,strong)QXUserModel *userModel;
|
||||||
|
@property (nonatomic,strong)NSMutableArray *bannerArry;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation QXMineViewController
|
@implementation QXMineViewController
|
||||||
@@ -81,6 +84,7 @@
|
|||||||
// make.centerY.width.height.equalTo(self.settingBtn);
|
// make.centerY.width.height.equalTo(self.settingBtn);
|
||||||
// }];
|
// }];
|
||||||
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(passwordDidChanged) name:noticeChangePassword object:nil];
|
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(passwordDidChanged) name:noticeChangePassword object:nil];
|
||||||
|
[self getBanner];
|
||||||
}
|
}
|
||||||
-(void)getUserInfo{
|
-(void)getUserInfo{
|
||||||
MJWeakSelf
|
MJWeakSelf
|
||||||
@@ -167,7 +171,8 @@
|
|||||||
break;
|
break;
|
||||||
case QXMainHeaderOptionTypeNobility:{
|
case QXMainHeaderOptionTypeNobility:{
|
||||||
QXLOG(@"跳转贵族");
|
QXLOG(@"跳转贵族");
|
||||||
|
QXNobilityViewController *vc = [[QXNobilityViewController alloc] init];
|
||||||
|
[self.navigationController pushViewController:vc animated:YES];
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case QXMainHeaderOptionTypeRecharge:{
|
case QXMainHeaderOptionTypeRecharge:{
|
||||||
@@ -290,9 +295,18 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
-(void)getBanner{
|
||||||
|
MJWeakSelf
|
||||||
|
[QXHomePageNetwork homeBannerWithType:@"6" successBlock:^(NSArray<QXBanner *> * _Nonnull list) {
|
||||||
|
weakSelf.tableHeaderView.bannerArray = list;
|
||||||
|
} failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) {
|
||||||
|
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
-(void)gotoSetting{
|
-(void)gotoSetting{
|
||||||
QXSettingViewController *vc = [[QXSettingViewController alloc] init];
|
QXSettingViewController *vc = [[QXSettingViewController alloc] init];
|
||||||
|
vc.haveNobility = self.userModel.is_hide.intValue == 1;
|
||||||
MJWeakSelf
|
MJWeakSelf
|
||||||
vc.logOutBlock = ^(BOOL isCancel) {
|
vc.logOutBlock = ^(BOOL isCancel) {
|
||||||
if (isCancel) {
|
if (isCancel) {
|
||||||
@@ -361,6 +375,12 @@
|
|||||||
}
|
}
|
||||||
return _tableView;
|
return _tableView;
|
||||||
}
|
}
|
||||||
|
-(NSMutableArray *)bannerArry{
|
||||||
|
if (!_bannerArry) {
|
||||||
|
_bannerArry = [NSMutableArray array];
|
||||||
|
}
|
||||||
|
return _bannerArry;
|
||||||
|
}
|
||||||
//-(UIButton *)settingBtn{
|
//-(UIButton *)settingBtn{
|
||||||
// if (!_settingBtn) {
|
// if (!_settingBtn) {
|
||||||
// _settingBtn = [[UIButton alloc] init];
|
// _settingBtn = [[UIButton alloc] init];
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
//
|
||||||
|
// QXBuyNobilitySuccessViewController.h
|
||||||
|
// QXLive
|
||||||
|
//
|
||||||
|
// Created by 启星 on 2025/11/10.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "QXBaseViewController.h"
|
||||||
|
#import "QXNobilityGetPriceModel.h"
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
@interface QXBuyNobilitySuccessViewController : QXBaseViewController
|
||||||
|
@property (nonatomic,strong)QXNobilityGetPriceModel *model;
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
||||||
@@ -0,0 +1,142 @@
|
|||||||
|
//
|
||||||
|
// QXBuyNobilitySuccessViewController.m
|
||||||
|
// QXLive
|
||||||
|
//
|
||||||
|
// Created by 启星 on 2025/11/10.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "QXBuyNobilitySuccessViewController.h"
|
||||||
|
#import "QXNobilityBuyDesCell.h"
|
||||||
|
|
||||||
|
@interface QXBuyNobilitySuccessViewController ()<UITableViewDelegate,UITableViewDataSource>
|
||||||
|
@property (nonatomic,strong)UITableView *tableView;
|
||||||
|
@property (nonatomic,strong)UIView *headerView;
|
||||||
|
@property (nonatomic,strong)UIImageView *resultImageView;
|
||||||
|
@property (nonatomic,strong)UILabel *resultLabel;
|
||||||
|
@property (nonatomic,strong)UILabel *titleLabel;
|
||||||
|
@property (nonatomic,strong)UIImageView *nobilityImageView;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation QXBuyNobilitySuccessViewController
|
||||||
|
|
||||||
|
- (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)viewWillDisappear:(BOOL)animated{
|
||||||
|
[super viewWillDisappear:animated];
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)initSubViews{
|
||||||
|
self.titleLabel.text = [NSString stringWithFormat:@"恭喜您已经成功开通%@爵位",self.model.nobility_name];
|
||||||
|
[self.nobilityImageView sd_setImageWithURL:[NSURL URLWithString:self.model.nobility_image]];
|
||||||
|
self.tableView.tableHeaderView = self.headerView;
|
||||||
|
[self.view addSubview:self.tableView];
|
||||||
|
}
|
||||||
|
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
|
||||||
|
return self.model.power_list.count;
|
||||||
|
}
|
||||||
|
|
||||||
|
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
|
||||||
|
QXNobilityBuyDesCell *cell = [QXNobilityBuyDesCell cellWithTableView:tableView];
|
||||||
|
QXNobilityGetPricePowerList *md = self.model.power_list[indexPath.row];
|
||||||
|
cell.titleLabel.text = md.content;
|
||||||
|
return cell;
|
||||||
|
}
|
||||||
|
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
|
||||||
|
return 36;
|
||||||
|
}
|
||||||
|
|
||||||
|
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
|
||||||
|
UIView *header = [[UIView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, 42)];
|
||||||
|
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(16, 12, SCREEN_WIDTH-32, 30)];
|
||||||
|
label.font = [UIFont boldSystemFontOfSize:16];
|
||||||
|
label.text = @"骑士特权";
|
||||||
|
label.textColor = RGB16A(0x000000, 0.85);
|
||||||
|
[header addSubview:label];
|
||||||
|
return header;
|
||||||
|
}
|
||||||
|
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
|
||||||
|
return 42;
|
||||||
|
}
|
||||||
|
|
||||||
|
-(UITableView *)tableView{
|
||||||
|
if (!_tableView) {
|
||||||
|
self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, NavContentHeight, SCREEN_WIDTH, SCREEN_HEIGHT-NavContentHeight) style:UITableViewStyleGrouped];
|
||||||
|
self.tableView.backgroundColor = [UIColor clearColor];
|
||||||
|
self.tableView.delegate = self;
|
||||||
|
self.tableView.dataSource = self;
|
||||||
|
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
|
||||||
|
}
|
||||||
|
return _tableView;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
-(UIView *)headerView{
|
||||||
|
if (!_headerView) {
|
||||||
|
_headerView = [[UIView alloc] initWithFrame:CGRectMake(0, NavContentHeight, SCREEN_WIDTH, 280)];
|
||||||
|
[_headerView addSubview:self.resultImageView];
|
||||||
|
[_headerView addSubview:self.resultLabel];
|
||||||
|
[_headerView addSubview:self.titleLabel];
|
||||||
|
[_headerView addSubview:self.nobilityImageView];
|
||||||
|
|
||||||
|
[self.resultImageView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.width.mas_equalTo(68);
|
||||||
|
make.height.mas_equalTo(60);
|
||||||
|
make.top.mas_equalTo(25);
|
||||||
|
make.centerX.equalTo(_headerView);
|
||||||
|
}];
|
||||||
|
[self.resultLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.height.mas_equalTo(22);
|
||||||
|
make.centerX.equalTo(_headerView);
|
||||||
|
make.top.equalTo(self.resultImageView.mas_bottom).offset(7);
|
||||||
|
}];
|
||||||
|
[self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.height.mas_equalTo(20);
|
||||||
|
make.centerX.equalTo(_headerView);
|
||||||
|
make.top.equalTo(self.resultLabel.mas_bottom).offset(7);
|
||||||
|
}];
|
||||||
|
[self.nobilityImageView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.width.mas_equalTo(104);
|
||||||
|
make.height.mas_equalTo(104);
|
||||||
|
make.top.equalTo(self.titleLabel.mas_bottom).offset(36);
|
||||||
|
make.centerX.equalTo(_headerView);
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
return _headerView;
|
||||||
|
}
|
||||||
|
|
||||||
|
-(UIImageView *)resultImageView{
|
||||||
|
if (!_resultImageView) {
|
||||||
|
_resultImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"nobility_pay_result_successs"]];
|
||||||
|
}
|
||||||
|
return _resultImageView;
|
||||||
|
}
|
||||||
|
-(UILabel *)resultLabel{
|
||||||
|
if (!_resultLabel) {
|
||||||
|
_resultLabel = [[UILabel alloc] init];
|
||||||
|
_resultLabel.textColor = RGB16(0x333333);
|
||||||
|
_resultLabel.font = [UIFont boldSystemFontOfSize:20];
|
||||||
|
_resultLabel.text = @"支付成功";
|
||||||
|
}
|
||||||
|
return _resultLabel;
|
||||||
|
}
|
||||||
|
-(UILabel *)titleLabel{
|
||||||
|
if (!_titleLabel) {
|
||||||
|
_titleLabel = [[UILabel alloc] init];
|
||||||
|
_titleLabel.textColor = RGB16A(0x000000,0.65);
|
||||||
|
_titleLabel.font = [UIFont systemFontOfSize:14];
|
||||||
|
}
|
||||||
|
return _titleLabel;
|
||||||
|
}
|
||||||
|
-(UIImageView *)nobilityImageView{
|
||||||
|
if (!_nobilityImageView) {
|
||||||
|
_nobilityImageView = [[UIImageView alloc] init];
|
||||||
|
}
|
||||||
|
return _nobilityImageView;
|
||||||
|
}
|
||||||
|
@end
|
||||||
17
QXLive/Mine(音域)/Controller/爵位/QXNobilityBuyViewController.h
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
//
|
||||||
|
// QXNobilityBuyViewController.h
|
||||||
|
// QXLive
|
||||||
|
//
|
||||||
|
// Created by 启星 on 2025/11/7.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "QXBaseViewController.h"
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
@interface QXNobilityBuyViewController : QXBaseViewController
|
||||||
|
/// 购买id
|
||||||
|
@property (nonatomic,strong)NSString *nobility_id;
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
||||||
343
QXLive/Mine(音域)/Controller/爵位/QXNobilityBuyViewController.m
Normal file
@@ -0,0 +1,343 @@
|
|||||||
|
//
|
||||||
|
// QXNobilityBuyViewController.m
|
||||||
|
// QXLive
|
||||||
|
//
|
||||||
|
// Created by 启星 on 2025/11/7.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "QXNobilityBuyViewController.h"
|
||||||
|
#import "QXNobilityBuyDesCell.h"
|
||||||
|
#import "QXRechargePayTypeTableCell.h"
|
||||||
|
#import "QXNobilityPriceView.h"
|
||||||
|
#import "QXMineNetwork.h"
|
||||||
|
#import "QXBuyNobilitySuccessViewController.h"
|
||||||
|
#import <AlipaySDK/AlipaySDK.h>
|
||||||
|
#import <WXApi.h>
|
||||||
|
|
||||||
|
@interface QXNobilityBuyViewController ()<UITableViewDelegate,UITableViewDataSource>
|
||||||
|
@property (nonatomic,strong)UITableView *tableView;
|
||||||
|
@property (nonatomic,strong)QXNobilityGetPriceModel *model;
|
||||||
|
@property (nonatomic,strong)NSMutableArray* payTypeArray;
|
||||||
|
@property (nonatomic,strong)QXNobilityPriceView *priceView;
|
||||||
|
|
||||||
|
@property (nonatomic,strong)UIView *footerView;
|
||||||
|
|
||||||
|
@property (nonatomic,strong)UIView *tableFooterView;
|
||||||
|
|
||||||
|
@property (nonatomic,assign)BOOL isSelectedAgreement;
|
||||||
|
@property (nonatomic,strong)QXPayTypeModel* selectedPayTypeModel;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation QXNobilityBuyViewController
|
||||||
|
|
||||||
|
- (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)viewWillDisappear:(BOOL)animated{
|
||||||
|
[super viewWillDisappear:animated];
|
||||||
|
}
|
||||||
|
-(void)setNavgationItems{
|
||||||
|
[super setNavgationItems];
|
||||||
|
self.navigationItem.title = @"支付";
|
||||||
|
}
|
||||||
|
- (void)initSubViews{
|
||||||
|
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(paySuccess) name:noticeAlipayResult object:nil];
|
||||||
|
self.tableView.tableHeaderView = self.priceView;
|
||||||
|
self.tableView.tableFooterView = self.tableFooterView;
|
||||||
|
[self.view addSubview:self.tableView];
|
||||||
|
[self getRechargeList];
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)setNobility_id:(NSString *)nobility_id{
|
||||||
|
_nobility_id = nobility_id;
|
||||||
|
MJWeakSelf
|
||||||
|
[QXMineNetwork getNobilityPriceWithId:nobility_id successBlock:^(QXNobilityGetPriceModel * _Nonnull model) {
|
||||||
|
weakSelf.model = model;
|
||||||
|
weakSelf.priceView.model = model;
|
||||||
|
[weakSelf.tableView reloadData];
|
||||||
|
} failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) {
|
||||||
|
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)getRechargeList{
|
||||||
|
MJWeakSelf
|
||||||
|
|
||||||
|
[QXMineNetwork walletPayTypeWithUserId:QXGlobal.shareGlobal.loginModel.user_id successBlock:^(QXPayTypeStatusModel * _Nonnull model) {
|
||||||
|
[weakSelf.payTypeArray removeAllObjects];
|
||||||
|
if (model.wx.is_pay_open.intValue == 1) {
|
||||||
|
[weakSelf.payTypeArray addObject:model.wx];
|
||||||
|
}
|
||||||
|
if (model.ali.is_pay_open.intValue == 1) {
|
||||||
|
[weakSelf.payTypeArray addObject:model.ali];
|
||||||
|
}
|
||||||
|
if (model.wx_tl.is_pay_open.intValue == 1) {
|
||||||
|
[weakSelf.payTypeArray addObject:model.wx_tl];
|
||||||
|
}
|
||||||
|
if (model.ali_tl.is_pay_open.intValue == 1) {
|
||||||
|
[weakSelf.payTypeArray addObject:model.ali_tl];
|
||||||
|
}
|
||||||
|
[weakSelf.tableView reloadData];
|
||||||
|
|
||||||
|
} failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) {
|
||||||
|
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)payAction{
|
||||||
|
if (!self.isSelectedAgreement) {
|
||||||
|
showToast(@"请先阅读并同意爵位用户协议");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (self.selectedPayTypeModel == nil) {
|
||||||
|
showToast(@"请选择支付方式");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
@weakify(self)
|
||||||
|
[QXMineNetwork rechargePayWithMoney:self.model.price coin:@"" type:self.selectedPayTypeModel.type userId:QXGlobal.shareGlobal.loginModel.user_id typeId:@"" nobility_id:self.nobility_id successBlock:^(NSDictionary * _Nonnull dict) {
|
||||||
|
@strongify(self)
|
||||||
|
if (self.selectedPayTypeModel.type.intValue == 2) {
|
||||||
|
NSDictionary *resultDict = dict[@"data"];
|
||||||
|
NSString *order = [NSString stringWithFormat:@"%@",resultDict[@"ali"]];
|
||||||
|
[[AlipaySDK defaultService] payOrder:order fromScheme:AppScheme callback:^(NSDictionary *resultDic) {
|
||||||
|
NSLog(@"支付宝H5支付回调 - %@", resultDic);
|
||||||
|
|
||||||
|
}];
|
||||||
|
}else if (self.selectedPayTypeModel.type.intValue == 1) {
|
||||||
|
NSDictionary *resultDict = dict[@"data"][@"wx"];
|
||||||
|
NSString *appid = resultDict[@"appid"];
|
||||||
|
NSString *partnerId = resultDict[@"partnerid"];
|
||||||
|
NSString *prepayId = [NSString stringWithFormat:@"%@",resultDict[@"prepayid"]];
|
||||||
|
NSString *nonceStr = resultDict[@"noncestr"];
|
||||||
|
UInt32 timeStamp = (UInt32)[resultDict[@"timestamp"] intValue];
|
||||||
|
NSString *package = resultDict[@"package"];
|
||||||
|
NSString *sign = resultDict[@"sign"];
|
||||||
|
PayReq *req = [[PayReq alloc] init];
|
||||||
|
req.openID = appid;
|
||||||
|
req.partnerId = partnerId;
|
||||||
|
req.prepayId = prepayId;
|
||||||
|
req.nonceStr = nonceStr;
|
||||||
|
req.timeStamp = timeStamp;
|
||||||
|
req.package = package;
|
||||||
|
req.sign = sign;
|
||||||
|
[WXApi sendReq:req completion:^(BOOL success) {
|
||||||
|
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
else if (self.selectedPayTypeModel.type.intValue == 4) {
|
||||||
|
NSMutableDictionary*dic = [NSMutableDictionary dictionaryWithDictionary:dict[@"data"][@"tl"]];
|
||||||
|
[dic removeObjectForKey:@"json_data"];
|
||||||
|
NSString *json = [dic jsonStringEncoded];
|
||||||
|
NSString *thirdPartSchema = [NSString stringWithFormat:@"thirdPartSchema=%@://",AppScheme];
|
||||||
|
NSString *json1 = [json stringByReplacingOccurrencesOfString:@"\\" withString:@""];
|
||||||
|
NSCharacterSet *customSet1 = [[NSCharacterSet characterSetWithCharactersInString:@"!*'();:@&=+$,/?%#[]{}\""] invertedSet];
|
||||||
|
// NSCharacterSet *customSet2 = [[NSCharacterSet characterSetWithCharactersInString:@"!*'();:@&=+$,/?%#[]{}\""] invertedSet];
|
||||||
|
NSCharacterSet *customSet3 = [[NSCharacterSet characterSetWithCharactersInString:@"!*'();:@&=+$,/?%#[]{}\""] invertedSet];
|
||||||
|
NSString *json2 = [json1 stringByAddingPercentEncodingWithAllowedCharacters:customSet1];
|
||||||
|
NSString *encodedString = [thirdPartSchema stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
|
||||||
|
NSString *queryString = [NSString stringWithFormat:@"payinfo=%@", json2];
|
||||||
|
NSString *doubleEncodedQuery = [queryString stringByAddingPercentEncodingWithAllowedCharacters:customSet3];
|
||||||
|
NSString *jumpStr = [NSString stringWithFormat:@"alipays://platformapi/startapp?appId=2021001104615521&page=pages/orderDetail/orderDetail&%@&query=%@",encodedString,doubleEncodedQuery];
|
||||||
|
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:jumpStr] options:@{} completionHandler:nil];
|
||||||
|
}else if (self.selectedPayTypeModel.type.intValue == 5) {
|
||||||
|
WXLaunchMiniProgramReq *launchMiniProgramReq = [WXLaunchMiniProgramReq object];
|
||||||
|
launchMiniProgramReq.userName = @"gh_e64a1a89a0ad";
|
||||||
|
NSDictionary *dic = dict[@"data"][@"tl"];
|
||||||
|
NSString *param = @"";
|
||||||
|
for (NSString*key in dic.allKeys) {
|
||||||
|
if (param.length == 0) {
|
||||||
|
param = [param stringByAppendingFormat:@"%@=%@",key,dic[key]];
|
||||||
|
}else{
|
||||||
|
param = [param stringByAppendingFormat:@"&%@=%@",key,dic[key]];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
launchMiniProgramReq.path = [NSString stringWithFormat:@"pages/orderDetail/orderDetail?%@",param];
|
||||||
|
launchMiniProgramReq.miniProgramType = WXMiniProgramTypeRelease;
|
||||||
|
[WXApi sendReq:launchMiniProgramReq completion:nil];
|
||||||
|
}
|
||||||
|
} failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) {
|
||||||
|
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
-(void)paySuccess{
|
||||||
|
QXBuyNobilitySuccessViewController *vc = [[QXBuyNobilitySuccessViewController alloc] init];
|
||||||
|
vc.model = self.model;
|
||||||
|
[self.navigationController pushViewController:vc animated:YES];
|
||||||
|
}
|
||||||
|
-(void)agreementAction{
|
||||||
|
// id = 30;
|
||||||
|
NSString *urlString = [NSString stringWithFormat:@"%@api/Page/page_show?id=%@",ServerUrl,@"30"];
|
||||||
|
QXBaseWebViewController *vc = [[QXBaseWebViewController alloc] init];
|
||||||
|
vc.urlStr = urlString;
|
||||||
|
[self.navigationController pushViewController:vc animated:YES];
|
||||||
|
}
|
||||||
|
-(void)selectedAction:(UIButton*)sender{
|
||||||
|
sender.selected = !sender.selected;
|
||||||
|
self.isSelectedAgreement = sender.isSelected;
|
||||||
|
}
|
||||||
|
|
||||||
|
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
|
||||||
|
if (section == 0) {
|
||||||
|
return self.payTypeArray.count;
|
||||||
|
}else{
|
||||||
|
return self.model.power_list.count;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
|
||||||
|
if (indexPath.section == 0) {
|
||||||
|
QXRechargePayTypeTableCell *cell = [QXRechargePayTypeTableCell cellWithTableView:tableView];
|
||||||
|
cell.model = self.payTypeArray[indexPath.row];
|
||||||
|
return cell;
|
||||||
|
}else{
|
||||||
|
QXNobilityBuyDesCell *cell = [QXNobilityBuyDesCell cellWithTableView:tableView];
|
||||||
|
QXNobilityGetPricePowerList *md = self.model.power_list[indexPath.row];
|
||||||
|
cell.titleLabel.text = md.content;
|
||||||
|
return cell;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
|
||||||
|
return 36;
|
||||||
|
}
|
||||||
|
|
||||||
|
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
|
||||||
|
if (section == 0) {
|
||||||
|
UIView *header = [[UIView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, 42)];
|
||||||
|
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(16, 12, SCREEN_WIDTH-32, 30)];
|
||||||
|
label.font = [UIFont boldSystemFontOfSize:16];
|
||||||
|
label.text = @"支付方式";
|
||||||
|
label.textColor = RGB16A(0x000000, 0.85);
|
||||||
|
[header addSubview:label];
|
||||||
|
return header;
|
||||||
|
}else{
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
|
||||||
|
if (section == 0) {
|
||||||
|
return 42;
|
||||||
|
}else{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
-(UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section{
|
||||||
|
if (section == 0) {
|
||||||
|
return self.footerView;
|
||||||
|
}
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
|
||||||
|
if (section == 0) {
|
||||||
|
return self.footerView.height;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
|
||||||
|
if (indexPath.section == 0) {
|
||||||
|
QXPayTypeModel *model = self.payTypeArray[indexPath.row];
|
||||||
|
if (model == self.selectedPayTypeModel) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (self.selectedPayTypeModel) {
|
||||||
|
self.selectedPayTypeModel.isSelected = NO;
|
||||||
|
}
|
||||||
|
model.isSelected = YES;
|
||||||
|
self.selectedPayTypeModel = model;
|
||||||
|
[tableView reloadData];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
-(UITableView *)tableView{
|
||||||
|
if (!_tableView) {
|
||||||
|
self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, NavContentHeight, SCREEN_WIDTH, SCREEN_HEIGHT-NavContentHeight) style:UITableViewStyleGrouped];
|
||||||
|
self.tableView.backgroundColor = [UIColor clearColor];
|
||||||
|
self.tableView.delegate = self;
|
||||||
|
self.tableView.dataSource = self;
|
||||||
|
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
|
||||||
|
}
|
||||||
|
return _tableView;
|
||||||
|
}
|
||||||
|
-(QXNobilityPriceView *)priceView{
|
||||||
|
if (!_priceView) {
|
||||||
|
_priceView = [[QXNobilityPriceView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, 187)];
|
||||||
|
}
|
||||||
|
return _priceView;
|
||||||
|
}
|
||||||
|
-(UIView *)footerView{
|
||||||
|
if (!_footerView) {
|
||||||
|
_footerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, 120)];
|
||||||
|
UIButton *payBtn = [[UIButton alloc] initWithFrame:CGRectMake(37, 28, SCREEN_WIDTH-37*2, 42)];
|
||||||
|
payBtn.backgroundColor = QXConfig.themeColor;
|
||||||
|
[payBtn addRoundedCornersWithRadius:21];
|
||||||
|
[payBtn setTitle:@"立即支付" forState:(UIControlStateNormal)];
|
||||||
|
[payBtn setTitleColor:QXConfig.btnTextColor forState:(UIControlStateNormal)];
|
||||||
|
payBtn.titleLabel.font = [UIFont systemFontOfSize:14];
|
||||||
|
[payBtn addTarget:self action:@selector(payAction) forControlEvents:(UIControlEventTouchUpInside)];
|
||||||
|
[_footerView addSubview:payBtn];
|
||||||
|
|
||||||
|
UILabel *titleLabel = [[UILabel alloc] init];
|
||||||
|
NSMutableAttributedString *attr = [[NSMutableAttributedString alloc] initWithString:@"点击支付即表示您同意《爵位用户协议》"];
|
||||||
|
[attr yy_setColor:QXConfig.textColor range:NSMakeRange(0, attr.length)];
|
||||||
|
[attr yy_setColor:QXConfig.themeColor range:NSMakeRange(attr.length-8, 8)];
|
||||||
|
[attr yy_setFont:[UIFont systemFontOfSize:12] range:NSMakeRange(0, attr.length)];
|
||||||
|
titleLabel.attributedText = attr;
|
||||||
|
[titleLabel sizeToFit];
|
||||||
|
titleLabel.x = (SCREEN_WIDTH-titleLabel.width)/2+15;
|
||||||
|
titleLabel.y = payBtn.bottom+9;
|
||||||
|
titleLabel.height = 30;
|
||||||
|
[_footerView addSubview:titleLabel];
|
||||||
|
|
||||||
|
|
||||||
|
UIButton *agreementBtn = [[UIButton alloc] initWithFrame:CGRectMake(titleLabel.right-100, titleLabel.top, 100, 30)];
|
||||||
|
[agreementBtn addTarget:self action:@selector(agreementAction) forControlEvents:(UIControlEventTouchUpInside)];
|
||||||
|
[_footerView addSubview:agreementBtn];
|
||||||
|
|
||||||
|
UIButton *selectedBtn = [[UIButton alloc] initWithFrame:CGRectMake(titleLabel.left-30, titleLabel.top, 30, 30)];
|
||||||
|
[selectedBtn setImage:[UIImage imageNamed:@"login_agreement_nor"] forState:(UIControlStateNormal)];
|
||||||
|
[selectedBtn setImage:[UIImage imageNamed:@"login_agreement_sel"] forState:(UIControlStateSelected)];
|
||||||
|
[selectedBtn addTarget:self action:@selector(selectedAction:) forControlEvents:(UIControlEventTouchUpInside)];
|
||||||
|
[_footerView addSubview:selectedBtn];
|
||||||
|
}
|
||||||
|
return _footerView;
|
||||||
|
}
|
||||||
|
|
||||||
|
-(UIView *)tableFooterView{
|
||||||
|
if (!_tableFooterView) {
|
||||||
|
_tableFooterView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, 90)];
|
||||||
|
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"nobility_desc_icon"]];
|
||||||
|
imageView.frame = CGRectMake(16, 15, 18, 18);
|
||||||
|
[_tableFooterView addSubview:imageView];
|
||||||
|
|
||||||
|
UILabel *titleLabel =[[ UILabel alloc] initWithFrame:CGRectMake(imageView.right+5, 15, 100, 18)];
|
||||||
|
titleLabel.textColor = QXConfig.textColor;
|
||||||
|
titleLabel.text = @"升级说明";
|
||||||
|
titleLabel.font = [UIFont boldSystemFontOfSize:16];
|
||||||
|
[_tableFooterView addSubview:titleLabel];
|
||||||
|
|
||||||
|
UILabel *bottomLabel = [[UILabel alloc] initWithFrame:CGRectMake(16, imageView.bottom+10, SCREEN_WIDTH-16*2, 42)];
|
||||||
|
bottomLabel.numberOfLines = 0;
|
||||||
|
bottomLabel.textColor = QXConfig.textColor;
|
||||||
|
bottomLabel.font = [UIFont systemFontOfSize:14];
|
||||||
|
bottomLabel.text = @"如果您当前已有爵位,升级时将自动计算剩余价值抵扣新爵位费用";
|
||||||
|
[_tableFooterView addSubview:bottomLabel];
|
||||||
|
}
|
||||||
|
return _tableFooterView;
|
||||||
|
}
|
||||||
|
-(NSMutableArray *)payTypeArray{
|
||||||
|
if (!_payTypeArray) {
|
||||||
|
_payTypeArray = [NSMutableArray array];
|
||||||
|
}
|
||||||
|
return _payTypeArray;
|
||||||
|
}
|
||||||
|
@end
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
//
|
||||||
|
// QXNobilityDetailViewController.h
|
||||||
|
// QXLive
|
||||||
|
//
|
||||||
|
// Created by 启星 on 2025/11/8.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "QXBaseViewController.h"
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
@interface QXNobilityDetailViewController : QXBaseViewController
|
||||||
|
@property (nonatomic,strong)NSString *cruuent_nobility_id;
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
||||||
243
QXLive/Mine(音域)/Controller/爵位/QXNobilityDetailViewController.m
Normal file
@@ -0,0 +1,243 @@
|
|||||||
|
//
|
||||||
|
// QXNobilityDetailViewController.m
|
||||||
|
// QXLive
|
||||||
|
//
|
||||||
|
// Created by 启星 on 2025/11/8.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "QXNobilityDetailViewController.h"
|
||||||
|
#import "GKCycleScrollView.h"
|
||||||
|
#import "QXNobilityDetailTopCell.h"
|
||||||
|
#import "QXMineNetwork.h"
|
||||||
|
#import "QXNobilityDetailCell.h"
|
||||||
|
#import "QXNobilityBuyViewController.h"
|
||||||
|
|
||||||
|
@interface QXNobilityDetailViewController ()<GKCycleScrollViewDataSource,GKCycleScrollViewDelegate,UICollectionViewDelegate,UICollectionViewDataSource>
|
||||||
|
@property (nonatomic,strong)GKCycleScrollView *cycleScrollView;
|
||||||
|
@property (nonatomic,strong)UIView *headerView;
|
||||||
|
@property (nonatomic,strong)UIImageView *headerImageView;
|
||||||
|
@property (nonatomic,strong)UILabel *headerLabel;
|
||||||
|
@property (nonatomic,strong)UICollectionView *collectionView;
|
||||||
|
@property (nonatomic,strong)QXNobilityListModel *currentModel;
|
||||||
|
|
||||||
|
@property (nonatomic,strong)UIView *bottomView;
|
||||||
|
@property (nonatomic,strong)UIImageView *bottomImageView;
|
||||||
|
@property (nonatomic,strong)UILabel *bottomLabel;
|
||||||
|
@property (nonatomic,strong)UIButton *openBtn;
|
||||||
|
|
||||||
|
@property (nonatomic,assign)NSInteger currentIndex;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation QXNobilityDetailViewController
|
||||||
|
|
||||||
|
- (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.navigationTintColor = RGB16(0xffffff);
|
||||||
|
self.navigationItem.title = @"爵位详情";
|
||||||
|
UIButton*createBtn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 44, 44)];
|
||||||
|
[createBtn setImage:[UIImage imageNamed:@"nobility_help_icon"] forState:(UIControlStateNormal)];
|
||||||
|
createBtn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentTrailing;
|
||||||
|
[createBtn addTarget:self action:@selector(helpAction) forControlEvents:(UIControlEventTouchUpInside)];
|
||||||
|
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:createBtn];
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)helpAction{
|
||||||
|
NSString *urlString = [NSString stringWithFormat:@"%@api/Page/page_show?id=%@",ServerUrl,@"29"];
|
||||||
|
QXBaseWebViewController *vc = [[QXBaseWebViewController alloc] init];
|
||||||
|
vc.urlStr = urlString;
|
||||||
|
[self.navigationController pushViewController:vc animated:YES];
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)getData{
|
||||||
|
MJWeakSelf
|
||||||
|
[QXMineNetwork getNobilityListSuccessBlock:^(NSArray<QXNobilityListModel *> * _Nonnull list) {
|
||||||
|
[weakSelf.dataArray removeAllObjects];
|
||||||
|
[weakSelf.dataArray addObjectsFromArray:list];
|
||||||
|
weakSelf.currentModel = weakSelf.dataArray.firstObject;
|
||||||
|
weakSelf.headerLabel.text = [NSString stringWithFormat:@"专属特权%@",self.currentModel.power.count_str];
|
||||||
|
[weakSelf setPirce];
|
||||||
|
for (NSInteger i = 0;i<weakSelf.dataArray.count;i++) {
|
||||||
|
QXNobilityListModel*md = weakSelf.dataArray[i];
|
||||||
|
if ([md.lid isEqualToString:weakSelf.cruuent_nobility_id]) {
|
||||||
|
weakSelf.currentIndex = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
weakSelf.cycleScrollView.defaultSelectIndex = weakSelf.currentIndex;
|
||||||
|
[weakSelf.cycleScrollView reloadData];
|
||||||
|
[weakSelf.collectionView reloadData];
|
||||||
|
} failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) {
|
||||||
|
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
-(void)initSubViews{
|
||||||
|
[self updateBgImage:@"nobility_detail_bg"];
|
||||||
|
[self.view addSubview:self.headerView];
|
||||||
|
[self.view addSubview:self.cycleScrollView];
|
||||||
|
[self.view addSubview:self.bottomView];
|
||||||
|
|
||||||
|
UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
|
||||||
|
int itemWidth = (SCREEN_WIDTH-16*2-8*2)/3;
|
||||||
|
layout.itemSize = CGSizeMake(itemWidth, itemWidth);
|
||||||
|
layout.minimumLineSpacing = 8;
|
||||||
|
layout.minimumInteritemSpacing = 8;
|
||||||
|
layout.sectionInset = UIEdgeInsetsMake(0, 16, 0, 16);
|
||||||
|
layout.scrollDirection = UICollectionViewScrollDirectionVertical;
|
||||||
|
self.collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, self.headerView.bottom+16, SCREEN_WIDTH, SCREEN_HEIGHT-self.headerView.bottom-16-24-80) collectionViewLayout:layout];
|
||||||
|
[self.collectionView registerNib:[UINib nibWithNibName:@"QXNobilityDetailCell" bundle:[NSBundle mainBundle]] forCellWithReuseIdentifier:@"QXNobilityDetailCell"];
|
||||||
|
self.collectionView.delegate = self;
|
||||||
|
self.collectionView.dataSource = self;
|
||||||
|
self.collectionView.showsHorizontalScrollIndicator = NO;
|
||||||
|
self.collectionView.bounces = NO;
|
||||||
|
self.collectionView.pagingEnabled = NO;
|
||||||
|
self.collectionView.backgroundColor = [UIColor clearColor];
|
||||||
|
[self.view addSubview:self.collectionView];
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)setPirce{
|
||||||
|
NSString *price = [NSString stringWithFormat:@"%@开通:%@/%@天",self.currentModel.name,self.currentModel.pay_price,self.currentModel.day];
|
||||||
|
NSMutableAttributedString *attr = [[NSMutableAttributedString alloc] initWithString:price];
|
||||||
|
[attr yy_setColor:RGB16(0xFFDA7E) range:[price rangeOfString:self.currentModel.pay_price]];
|
||||||
|
self.bottomLabel.attributedText = attr;
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)openAction{
|
||||||
|
QXNobilityBuyViewController *vc = [[QXNobilityBuyViewController alloc] init];
|
||||||
|
vc.nobility_id = self.currentModel.lid;
|
||||||
|
[self.navigationController pushViewController:vc animated:YES];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
|
||||||
|
return self.currentModel.power.list.count;
|
||||||
|
}
|
||||||
|
-(__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
|
||||||
|
QXNobilityDetailCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"QXNobilityDetailCell" forIndexPath:indexPath];
|
||||||
|
cell.model = self.currentModel.power.list[indexPath.row];
|
||||||
|
return cell;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - GKCycleScrollViewDataSource,GKCycleScrollViewDelegate
|
||||||
|
- (NSInteger)numberOfCellsInCycleScrollView:(GKCycleScrollView *)cycleScrollView {
|
||||||
|
return self.dataArray.count;
|
||||||
|
}
|
||||||
|
- (GKCycleScrollViewCell *)cycleScrollView:(GKCycleScrollView *)cycleScrollView cellForViewAtIndex:(NSInteger)index {
|
||||||
|
GKCycleScrollViewCell *cell = [cycleScrollView dequeueReusableCell];
|
||||||
|
if (!cell) {
|
||||||
|
cell = [QXNobilityDetailTopCell new];
|
||||||
|
}
|
||||||
|
QXNobilityDetailTopCell *topcell = (QXNobilityDetailTopCell*)cell;
|
||||||
|
topcell.index = index;
|
||||||
|
topcell.myIndex = self.currentIndex;
|
||||||
|
topcell.model = self.dataArray[index];
|
||||||
|
return cell;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (CGSize)sizeForCellInCycleScrollView:(GKCycleScrollView *)cycleScrollView {
|
||||||
|
return CGSizeMake(220, 242);
|
||||||
|
}
|
||||||
|
-(void)cycleScrollView:(GKCycleScrollView *)cycleScrollView didScrollCellToIndex:(NSInteger)index{
|
||||||
|
self.currentModel = self.dataArray[index];
|
||||||
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
|
self.headerLabel.text = [NSString stringWithFormat:@"专属特权%@",self.currentModel.power.count_str];
|
||||||
|
[self setPirce];
|
||||||
|
[self.collectionView reloadData];
|
||||||
|
});
|
||||||
|
}
|
||||||
|
- (void)cycleScrollView:(GKCycleScrollView *)cycleScrollView didSelectCellAtIndex:(NSInteger)index {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
-(GKCycleScrollView *)cycleScrollView{
|
||||||
|
if (!_cycleScrollView) {
|
||||||
|
_cycleScrollView = [[GKCycleScrollView alloc] initWithFrame:CGRectMake(0, NavContentHeight, SCREEN_WIDTH, 242)];
|
||||||
|
_cycleScrollView.dataSource = self;
|
||||||
|
_cycleScrollView.delegate = self;
|
||||||
|
_cycleScrollView.minimumCellAlpha = 0.0;
|
||||||
|
_cycleScrollView.leftRightMargin = 16.0f;
|
||||||
|
_cycleScrollView.topBottomMargin = 15.0f;
|
||||||
|
_cycleScrollView.isInfiniteLoop = NO;
|
||||||
|
_cycleScrollView.isAutoScroll = NO;
|
||||||
|
}
|
||||||
|
return _cycleScrollView;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
-(UIView *)headerView{
|
||||||
|
if (!_headerView) {
|
||||||
|
_headerView = [[UIView alloc] initWithFrame:CGRectMake(0,self.cycleScrollView.bottom+16, SCREEN_WIDTH, ScaleWidth(35))];
|
||||||
|
[_headerView addSubview:self.headerImageView];;
|
||||||
|
[_headerView addSubview:self.headerLabel];;
|
||||||
|
}
|
||||||
|
return _headerView;
|
||||||
|
}
|
||||||
|
|
||||||
|
-(UIImageView *)headerImageView{
|
||||||
|
if (!_headerImageView) {
|
||||||
|
_headerImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"nobility_power_header_bg"]];
|
||||||
|
_headerImageView.contentMode = UIViewContentModeScaleToFill;
|
||||||
|
_headerImageView.frame = CGRectMake(0, 0, SCREEN_WIDTH, ScaleWidth(35));
|
||||||
|
}
|
||||||
|
return _headerImageView;
|
||||||
|
}
|
||||||
|
-(UILabel *)headerLabel{
|
||||||
|
if (!_headerLabel) {
|
||||||
|
_headerLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, ScaleWidth(35))];
|
||||||
|
_headerLabel.textColor = RGB16(0xFFEDBD);
|
||||||
|
_headerLabel.font = [UIFont systemFontOfSize:16];
|
||||||
|
_headerLabel.textAlignment = NSTextAlignmentCenter;
|
||||||
|
}
|
||||||
|
return _headerLabel;
|
||||||
|
}
|
||||||
|
|
||||||
|
-(UIView *)bottomView{
|
||||||
|
if (!_bottomView) {
|
||||||
|
_bottomView = [[UIView alloc] initWithFrame:CGRectMake(0, SCREEN_HEIGHT-24-80, SCREEN_WIDTH, 80+24)];
|
||||||
|
[_bottomView addRoundedCornersWithRadius:16 byRoundingCorners:(UIRectCornerTopLeft|UIRectCornerTopRight)];
|
||||||
|
[_bottomView addSubview:self.bottomImageView];
|
||||||
|
[_bottomView addSubview:self.openBtn];
|
||||||
|
[_bottomView addSubview:self.bottomLabel];
|
||||||
|
}
|
||||||
|
return _bottomView;
|
||||||
|
}
|
||||||
|
|
||||||
|
-(UIImageView *)bottomImageView{
|
||||||
|
if (!_bottomImageView) {
|
||||||
|
_bottomImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"nobility_detail_bottom_bg"]];
|
||||||
|
_bottomImageView.frame = CGRectMake(0, 0, self.bottomView.width, self.bottomView.height);
|
||||||
|
}
|
||||||
|
return _bottomImageView;
|
||||||
|
}
|
||||||
|
-(UIButton *)openBtn{
|
||||||
|
if (!_openBtn) {
|
||||||
|
_openBtn = [[UIButton alloc] initWithFrame:CGRectMake(SCREEN_WIDTH-16-128, 19, 128, 41)];
|
||||||
|
[_openBtn setBackgroundImage:[UIImage imageNamed:@"nobility_detail_open_btn"] forState:(UIControlStateNormal)];
|
||||||
|
[_openBtn addTarget:self action:@selector(openAction) forControlEvents:(UIControlEventTouchUpInside)];;
|
||||||
|
}
|
||||||
|
return _openBtn;
|
||||||
|
}
|
||||||
|
|
||||||
|
-(UILabel *)bottomLabel{
|
||||||
|
if (!_bottomLabel) {
|
||||||
|
_bottomLabel = [[UILabel alloc] initWithFrame:CGRectMake(16, 28, self.openBtn.left-16, 24)];
|
||||||
|
_bottomLabel.textColor = RGB16(0xF7EAC9);
|
||||||
|
_bottomLabel.font = [UIFont systemFontOfSize:16];
|
||||||
|
}
|
||||||
|
return _bottomLabel;
|
||||||
|
}
|
||||||
|
@end
|
||||||
16
QXLive/Mine(音域)/Controller/爵位/QXNobilityViewController.h
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
//
|
||||||
|
// QXNobilityViewController.h
|
||||||
|
// QXLive
|
||||||
|
//
|
||||||
|
// Created by 启星 on 2025/11/7.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "QXBaseViewController.h"
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
@interface QXNobilityViewController : QXBaseViewController
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
||||||
176
QXLive/Mine(音域)/Controller/爵位/QXNobilityViewController.m
Normal file
@@ -0,0 +1,176 @@
|
|||||||
|
//
|
||||||
|
// QXNobilityViewController.m
|
||||||
|
// QXLive
|
||||||
|
//
|
||||||
|
// Created by 启星 on 2025/11/7.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "QXNobilityViewController.h"
|
||||||
|
#import "QXNobilityHeaderView.h"
|
||||||
|
#import "QXNobilityContentView.h"
|
||||||
|
#import "QXMineNetwork.h"
|
||||||
|
#import "QXSeatHeaderView.h"
|
||||||
|
#import "QXNobilityDetailViewController.h"
|
||||||
|
#import "QXNobilityBuyViewController.h"
|
||||||
|
|
||||||
|
@interface QXNobilityViewController ()<QXNobilityHeaderViewDelegate>
|
||||||
|
@property (nonatomic,strong)QXNobilityHeaderView *topView;
|
||||||
|
@property (nonatomic,strong)UIView *nobilityBgView;
|
||||||
|
@property (nonatomic,strong)UIView *nobilityContentView;
|
||||||
|
@property (nonatomic,strong)UILabel *nobilityTitleLabel;
|
||||||
|
//@property (nonatomic,strong)JXCategoryTitleView *categoryView;
|
||||||
|
//@property (nonatomic,strong)JXCategoryListContainerView *containerView;
|
||||||
|
@property (nonatomic,strong)UIView *bottomView;
|
||||||
|
@property (nonatomic,strong)QXSeatHeaderView *userAvatarView;
|
||||||
|
@property (nonatomic,strong)UILabel *bottomNickNameLabel;
|
||||||
|
@property (nonatomic,strong)UIButton *bottomBuyBtn;
|
||||||
|
@property (nonatomic,strong)NSMutableArray *titles;
|
||||||
|
|
||||||
|
@property (nonatomic,strong)QXNobilityContentView *contentView;;
|
||||||
|
|
||||||
|
@property (nonatomic,strong)QXNobilityModel* model;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation QXNobilityViewController
|
||||||
|
|
||||||
|
- (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.navigationTintColor = RGB16(0xffffff);
|
||||||
|
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"nobility_nav_icon"]];
|
||||||
|
imageView.frame = CGRectMake(0, 0, 71, 18);
|
||||||
|
self.navigationItem.titleView = imageView;
|
||||||
|
UIButton*createBtn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 44, 44)];
|
||||||
|
[createBtn setImage:[UIImage imageNamed:@"nobility_help_icon"] forState:(UIControlStateNormal)];
|
||||||
|
createBtn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentTrailing;
|
||||||
|
[createBtn addTarget:self action:@selector(helpAction) forControlEvents:(UIControlEventTouchUpInside)];
|
||||||
|
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:createBtn];
|
||||||
|
|
||||||
|
}
|
||||||
|
- (void)initSubViews{
|
||||||
|
[self updateBgImage:@"home_rank_vc_bg"];
|
||||||
|
self.topView = [[QXNobilityHeaderView alloc] initWithFrame:CGRectMake(0, NavContentHeight, SCREEN_WIDTH,0)];
|
||||||
|
self.topView.delegate = self;
|
||||||
|
[self.view addSubview:self.topView];
|
||||||
|
|
||||||
|
self.nobilityBgView = [[UIView alloc] initWithFrame:CGRectMake(16, self.topView.bottom, SCREEN_WIDTH-32, SCREEN_HEIGHT-self.topView.bottom-80)];
|
||||||
|
self.nobilityBgView.backgroundColor = RGB16(0x1E2127);
|
||||||
|
self.nobilityBgView.layer.borderWidth = 1;
|
||||||
|
self.nobilityBgView.layer.borderColor = RGB16A(0xF5E9D1, 0.2).CGColor;
|
||||||
|
[self.nobilityBgView addRoundedCornersWithRadius:12];
|
||||||
|
[self.view addSubview:self.nobilityBgView];
|
||||||
|
|
||||||
|
self.nobilityContentView = [[UIView alloc] initWithFrame:CGRectMake(12, 12, self.nobilityBgView.width-24, self.nobilityBgView.height-24)];
|
||||||
|
[self.nobilityContentView addRoundedCornersWithRadius:6];
|
||||||
|
[self.nobilityBgView addSubview:self.nobilityContentView];
|
||||||
|
|
||||||
|
[self.view addSubview:self.bottomView];
|
||||||
|
self.contentView = [[QXNobilityContentView alloc] initWithFrame:self.nobilityContentView.bounds];
|
||||||
|
[self.nobilityContentView addSubview:self.contentView];
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)getData{
|
||||||
|
MJWeakSelf
|
||||||
|
[QXMineNetwork getUserNobilitSuccessBlock:^(QXNobilityModel * _Nonnull model) {
|
||||||
|
weakSelf.model = model;
|
||||||
|
weakSelf.topView.model = model;
|
||||||
|
weakSelf.contentView.model = model;
|
||||||
|
[weakSelf.contentView reloadData];
|
||||||
|
if (weakSelf.model.nobility_info.status.intValue == 0) {
|
||||||
|
weakSelf.bottomView.hidden = YES;;
|
||||||
|
}else{
|
||||||
|
[weakSelf.userAvatarView setHeadIcon:model.user_info.avatar dress:@""];
|
||||||
|
weakSelf.bottomNickNameLabel.text = [NSString stringWithFormat:@"%@的当前爵位状态是%@",model.user_info.nickname,model.nobility_info.name];
|
||||||
|
weakSelf.bottomView.hidden = NO;;
|
||||||
|
}
|
||||||
|
} failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) {
|
||||||
|
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
-(void)helpAction{
|
||||||
|
NSString *urlString = [NSString stringWithFormat:@"%@api/Page/page_show?id=%@",ServerUrl,@"29"];
|
||||||
|
QXBaseWebViewController *vc = [[QXBaseWebViewController alloc] init];
|
||||||
|
vc.urlStr = urlString;
|
||||||
|
[self.navigationController pushViewController:vc animated:YES];
|
||||||
|
}
|
||||||
|
-(void)buyAction{
|
||||||
|
QXNobilityDetailViewController *vc = [[QXNobilityDetailViewController alloc] init];
|
||||||
|
vc.cruuent_nobility_id = self.model.nobility_info.lid;
|
||||||
|
[self.navigationController pushViewController:vc animated:YES];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// 去开通
|
||||||
|
-(void)didOpenNobility{
|
||||||
|
QXNobilityDetailViewController *vc = [[QXNobilityDetailViewController alloc] init];
|
||||||
|
[self.navigationController pushViewController:vc animated:YES];
|
||||||
|
}
|
||||||
|
/// 去续费
|
||||||
|
-(void)didRenewNobility{
|
||||||
|
QXNobilityBuyViewController *vc = [[QXNobilityBuyViewController alloc] init];
|
||||||
|
vc.nobility_id = self.model.nobility_info.lid;
|
||||||
|
[self.navigationController pushViewController:vc animated:YES];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
-(NSMutableArray *)titles{
|
||||||
|
if (!_titles) {
|
||||||
|
_titles = [NSMutableArray array];
|
||||||
|
}
|
||||||
|
return _titles;
|
||||||
|
}
|
||||||
|
-(UIView *)bottomView{
|
||||||
|
if (!_bottomView) {
|
||||||
|
_bottomView = [[UIView alloc] initWithFrame:CGRectMake(0, SCREEN_HEIGHT-57, SCREEN_WIDTH, 57)];
|
||||||
|
[_bottomView addRoundedCornersWithRadius:20 byRoundingCorners:(UIRectCornerTopLeft|UIRectCornerTopRight)];
|
||||||
|
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"nobility_my_info_bg"]];
|
||||||
|
imageView.frame = _bottomView.bounds;
|
||||||
|
[_bottomView addSubview:imageView];
|
||||||
|
[_bottomView addSubview:self.userAvatarView];
|
||||||
|
[_bottomView addSubview:self.bottomNickNameLabel];
|
||||||
|
[_bottomView addSubview:self.bottomBuyBtn];
|
||||||
|
}
|
||||||
|
return _bottomView;
|
||||||
|
}
|
||||||
|
-(QXSeatHeaderView *)userAvatarView{
|
||||||
|
if (!_userAvatarView) {
|
||||||
|
_userAvatarView = [[QXSeatHeaderView alloc] initWithFrame:CGRectMake(12, 12, 30, 30)];
|
||||||
|
// [_userAvatarView setHeadIcon:QXGlobal.shareGlobal.loginModel.avatar dress:@""];
|
||||||
|
}
|
||||||
|
return _userAvatarView;
|
||||||
|
}
|
||||||
|
|
||||||
|
-(UIButton *)bottomBuyBtn{
|
||||||
|
if (!_bottomBuyBtn) {
|
||||||
|
_bottomBuyBtn = [[UIButton alloc] initWithFrame:CGRectMake(SCREEN_WIDTH-14-118, (57-36)/2, 118, 36)];
|
||||||
|
[_bottomBuyBtn setBackgroundImage:[UIImage imageNamed:@"nobility_update_btn"] forState:(UIControlStateNormal)];
|
||||||
|
[_bottomBuyBtn addTarget:self action:@selector(buyAction) forControlEvents:(UIControlEventTouchUpInside)];
|
||||||
|
}
|
||||||
|
return _bottomBuyBtn;
|
||||||
|
}
|
||||||
|
-(UILabel *)bottomNickNameLabel{
|
||||||
|
if (!_bottomNickNameLabel) {
|
||||||
|
_bottomNickNameLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.userAvatarView.right+6, 0, self.bottomBuyBtn.left-self.userAvatarView.right-20, 57)];
|
||||||
|
// _bottomNickNameLabel.text = QXGlobal.shareGlobal.loginModel.nickname;
|
||||||
|
_bottomNickNameLabel.textColor = RGB16(0xF5E9D1);
|
||||||
|
_bottomNickNameLabel.font = [UIFont systemFontOfSize:12];
|
||||||
|
}
|
||||||
|
return _bottomNickNameLabel;
|
||||||
|
}
|
||||||
|
@end
|
||||||
@@ -21,6 +21,7 @@
|
|||||||
@implementation QXGiftWallViewController
|
@implementation QXGiftWallViewController
|
||||||
|
|
||||||
- (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.
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||||||
|
|
||||||
@interface QXSettingViewController : QXBaseViewController
|
@interface QXSettingViewController : QXBaseViewController
|
||||||
@property (nonatomic,copy)void(^logOutBlock)(BOOL isCancel);
|
@property (nonatomic,copy)void(^logOutBlock)(BOOL isCancel);
|
||||||
|
@property (nonatomic,assign)BOOL haveNobility;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
NS_ASSUME_NONNULL_END
|
NS_ASSUME_NONNULL_END
|
||||||
|
|||||||
@@ -36,15 +36,27 @@ static NSInteger maxClickCount = 6;
|
|||||||
self.navigationItem.title = QXText(@"设置");
|
self.navigationItem.title = QXText(@"设置");
|
||||||
}
|
}
|
||||||
-(void)initSubViews{
|
-(void)initSubViews{
|
||||||
NSArray *section1 = @[
|
NSArray *section1;
|
||||||
// QXText(@"消息通知"),
|
if (self.haveNobility) {
|
||||||
// QXText(@"未成年人模式"),
|
section1 = @[
|
||||||
|
QXText(@"隐身进入房间"),
|
||||||
QXText(@"黑名单"),
|
QXText(@"黑名单"),
|
||||||
QXText(@"设置密码"),
|
QXText(@"设置密码"),
|
||||||
QXText(@"手机绑定"),
|
QXText(@"手机绑定"),
|
||||||
QXText(@"关于我们"),
|
QXText(@"关于我们"),
|
||||||
QXText(@"版本号")
|
QXText(@"版本号")
|
||||||
];
|
];
|
||||||
|
}else{
|
||||||
|
section1 = @[
|
||||||
|
// QXText(@"消息通知"),
|
||||||
|
QXText(@"黑名单"),
|
||||||
|
QXText(@"设置密码"),
|
||||||
|
QXText(@"手机绑定"),
|
||||||
|
QXText(@"关于我们"),
|
||||||
|
QXText(@"版本号")
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
NSArray *section2 = @[
|
NSArray *section2 = @[
|
||||||
QXText(@"切换账号"),
|
QXText(@"切换账号"),
|
||||||
@@ -62,7 +74,8 @@ static NSInteger maxClickCount = 6;
|
|||||||
QXText(@"切换账号"):[NSNumber numberWithInteger:QXSettingCellTypeOnlyArrow],
|
QXText(@"切换账号"):[NSNumber numberWithInteger:QXSettingCellTypeOnlyArrow],
|
||||||
QXText(@"实名认证"):[NSNumber numberWithInteger:QXSettingCellTypeNormal],
|
QXText(@"实名认证"):[NSNumber numberWithInteger:QXSettingCellTypeNormal],
|
||||||
QXText(@"账号注销"):[NSNumber numberWithInteger:QXSettingCellTypeOnlyArrow],
|
QXText(@"账号注销"):[NSNumber numberWithInteger:QXSettingCellTypeOnlyArrow],
|
||||||
QXText(@"退出登录"):[NSNumber numberWithInteger:QXSettingCellTypeOnlyArrow]
|
QXText(@"退出登录"):[NSNumber numberWithInteger:QXSettingCellTypeOnlyArrow],
|
||||||
|
QXText(@"隐身进入房间"):[NSNumber numberWithInteger:QXSettingCellTypeSwitch]
|
||||||
};
|
};
|
||||||
|
|
||||||
self.controllerDict = @{
|
self.controllerDict = @{
|
||||||
@@ -89,7 +102,8 @@ static NSInteger maxClickCount = 6;
|
|||||||
QXText(@"切换账号"):@"",
|
QXText(@"切换账号"):@"",
|
||||||
QXText(@"实名认证"):@"",
|
QXText(@"实名认证"):@"",
|
||||||
QXText(@"账号注销"):@"",
|
QXText(@"账号注销"):@"",
|
||||||
QXText(@"退出登录"):@""
|
QXText(@"退出登录"):@"",
|
||||||
|
QXText(@"隐身进入房间"):QXGlobal.shareGlobal.loginModel.hide_status
|
||||||
};
|
};
|
||||||
[self.dataArray addObject:section1];
|
[self.dataArray addObject:section1];
|
||||||
[self.dataArray addObject:section2];
|
[self.dataArray addObject:section2];
|
||||||
@@ -111,10 +125,27 @@ static NSInteger maxClickCount = 6;
|
|||||||
NSString *value = self.valueDict[text];
|
NSString *value = self.valueDict[text];
|
||||||
cell.titleLabel.text = text;
|
cell.titleLabel.text = text;
|
||||||
cell.detailLabel.text = value;
|
cell.detailLabel.text = value;
|
||||||
|
cell.btnSwitch.selected = value.intValue==1;
|
||||||
|
[cell.btnSwitch addTarget:self action:@selector(setHideJoinRoom:) forControlEvents:(UIControlEventTouchUpInside)];
|
||||||
cell.cellType = [self.cellTypeDict[text] integerValue];
|
cell.cellType = [self.cellTypeDict[text] integerValue];
|
||||||
cell.needLine = (indexPath.row>=0) && (indexPath.row < arr.count-1);
|
cell.needLine = (indexPath.row>=0) && (indexPath.row < arr.count-1);
|
||||||
return cell;
|
return cell;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
-(void)setHideJoinRoom:(UIButton *)sender{
|
||||||
|
sender.selected = !sender.selected;
|
||||||
|
__block NSString *status = QXGlobal.shareGlobal.loginModel.hide_status;
|
||||||
|
if ([status isEqualToString:@"0"]) {
|
||||||
|
status = @"1";
|
||||||
|
}else{
|
||||||
|
status = @"0";
|
||||||
|
}
|
||||||
|
[QXMineNetwork getNobilityPriceWithHideStatus:status successBlock:^(NSDictionary * _Nonnull dict) {
|
||||||
|
QXGlobal.shareGlobal.loginModel.hide_status = status;
|
||||||
|
} failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) {
|
||||||
|
|
||||||
|
}];
|
||||||
|
}
|
||||||
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
|
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
|
||||||
return [UIView new];
|
return [UIView new];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,6 +30,8 @@ NS_ASSUME_NONNULL_BEGIN
|
|||||||
@property (nonatomic,strong)NSString *activities_id;
|
@property (nonatomic,strong)NSString *activities_id;
|
||||||
/// 活动类型 10 天空之境 11 岁月之城 12时空之巅
|
/// 活动类型 10 天空之境 11 岁月之城 12时空之巅
|
||||||
@property (nonatomic,strong)NSString *gift_bag;
|
@property (nonatomic,strong)NSString *gift_bag;
|
||||||
|
/// 是否为爵位礼物 0 打开 1 锁住
|
||||||
|
@property (nonatomic,strong)NSString *is_lock;
|
||||||
|
|
||||||
@property (nonatomic,assign)BOOL isSelected;
|
@property (nonatomic,assign)BOOL isSelected;
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -115,6 +115,13 @@ NS_ASSUME_NONNULL_BEGIN
|
|||||||
@property (nonatomic,strong)NSString *is_host;
|
@property (nonatomic,strong)NSString *is_host;
|
||||||
/// 是否是管理 1是管理员 0不是
|
/// 是否是管理 1是管理员 0不是
|
||||||
@property (nonatomic,strong)NSString *is_management;
|
@property (nonatomic,strong)NSString *is_management;
|
||||||
|
/// 麦圈
|
||||||
|
@property (nonatomic,strong)NSString *mic_cycle;
|
||||||
|
/// 爵位图片
|
||||||
|
@property (nonatomic,strong)NSString *nobility_image;
|
||||||
|
/// 用户昵称颜色
|
||||||
|
@property (nonatomic,strong)NSString *nickname_color;
|
||||||
|
|
||||||
@property (nonatomic,assign)BOOL isSelected;
|
@property (nonatomic,assign)BOOL isSelected;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@@ -154,6 +161,9 @@ NS_ASSUME_NONNULL_BEGIN
|
|||||||
/// 装扮
|
/// 装扮
|
||||||
@property (nonatomic,strong)NSString *dress;
|
@property (nonatomic,strong)NSString *dress;
|
||||||
|
|
||||||
|
/// 麦圈
|
||||||
|
@property (nonatomic,strong)NSString *mic_cycle;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@interface QXRoomOnlineList : NSObject
|
@interface QXRoomOnlineList : NSObject
|
||||||
@@ -268,6 +278,12 @@ NS_ASSUME_NONNULL_BEGIN
|
|||||||
@property (nonatomic,strong)NSString *base_image;
|
@property (nonatomic,strong)NSString *base_image;
|
||||||
/// 礼物价值
|
/// 礼物价值
|
||||||
@property (nonatomic,strong)NSString *gift_price;
|
@property (nonatomic,strong)NSString *gift_price;
|
||||||
|
/// 礼物名称
|
||||||
|
@property (nonatomic,strong)NSString *nobility_image;
|
||||||
|
/// 礼物图标
|
||||||
|
@property (nonatomic,strong)NSString *nickname_color;
|
||||||
|
/// 礼物价值
|
||||||
|
@property (nonatomic,strong)NSString *mic_cycle;
|
||||||
/// 关系拍卖时间
|
/// 关系拍卖时间
|
||||||
@property (nonatomic,strong)NSString *time_day;
|
@property (nonatomic,strong)NSString *time_day;
|
||||||
/// 头像装扮
|
/// 头像装扮
|
||||||
|
|||||||
@@ -36,6 +36,13 @@ NS_ASSUME_NONNULL_BEGIN
|
|||||||
@property(nonatomic, copy)NSString *dress;
|
@property(nonatomic, copy)NSString *dress;
|
||||||
/// 用户魅力
|
/// 用户魅力
|
||||||
@property(nonatomic, copy)NSString *charm;
|
@property(nonatomic, copy)NSString *charm;
|
||||||
|
|
||||||
|
/// 歌曲名称
|
||||||
|
@property(nonatomic, copy)NSString *nobility_image;
|
||||||
|
/// 演唱者
|
||||||
|
@property(nonatomic, copy)NSString *mic_cycle;
|
||||||
|
/// 歌曲封面
|
||||||
|
@property(nonatomic, copy)NSString *nickname_color;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
NS_ASSUME_NONNULL_END
|
NS_ASSUME_NONNULL_END
|
||||||
|
|||||||
@@ -39,6 +39,14 @@ NS_ASSUME_NONNULL_BEGIN
|
|||||||
@property (nonatomic,strong)NSString *auth;
|
@property (nonatomic,strong)NSString *auth;
|
||||||
/// 是否使用靓号 0未使用 1 已使用
|
/// 是否使用靓号 0未使用 1 已使用
|
||||||
@property (nonatomic,strong)NSString *is_use_code;
|
@property (nonatomic,strong)NSString *is_use_code;
|
||||||
|
/// 爵位图片
|
||||||
|
@property (nonatomic,strong)NSString *nobility_image;
|
||||||
|
/// 昵称颜色
|
||||||
|
@property (nonatomic,strong)NSString *nickname_color;
|
||||||
|
/// 是否可以设置隐身进入的状态:0-不行,1-可以
|
||||||
|
@property (nonatomic,strong)NSString *is_hide;
|
||||||
|
/// 当前状态:0-取消隐身,1-隐身进入
|
||||||
|
@property (nonatomic,strong)NSString *hide_status;
|
||||||
/// 在线状态
|
/// 在线状态
|
||||||
@property (nonatomic,assign)BOOL is_online;
|
@property (nonatomic,assign)BOOL is_online;
|
||||||
/// 1 能聊天 0不能聊天
|
/// 1 能聊天 0不能聊天
|
||||||
@@ -68,6 +76,10 @@ NS_ASSUME_NONNULL_BEGIN
|
|||||||
@property (nonatomic,strong)NSString *dress;
|
@property (nonatomic,strong)NSString *dress;
|
||||||
/// 聊天气泡
|
/// 聊天气泡
|
||||||
@property (nonatomic,strong)NSString *chat_bubble;
|
@property (nonatomic,strong)NSString *chat_bubble;
|
||||||
|
/// 爵位飘屏背景图
|
||||||
|
@property (nonatomic,strong)NSString *enter_image;
|
||||||
|
/// 爵位飘屏背景图
|
||||||
|
@property (nonatomic,strong)NSString *enter_text;
|
||||||
/// ip
|
/// ip
|
||||||
@property (nonatomic,strong)NSString *loginip;
|
@property (nonatomic,strong)NSString *loginip;
|
||||||
/// 昵称
|
/// 昵称
|
||||||
@@ -82,6 +94,12 @@ NS_ASSUME_NONNULL_BEGIN
|
|||||||
@property (nonatomic,strong)NSString *room_id;
|
@property (nonatomic,strong)NSString *room_id;
|
||||||
/// 各种等级 爵位 。。。图片数组
|
/// 各种等级 爵位 。。。图片数组
|
||||||
@property (nonatomic,strong)NSArray *icon;
|
@property (nonatomic,strong)NSArray *icon;
|
||||||
|
/// 爵位图片
|
||||||
|
@property (nonatomic,strong)NSString *nobility_image;
|
||||||
|
/// 昵称颜色
|
||||||
|
@property (nonatomic,strong)NSString *nickname_color;
|
||||||
|
/// 麦圈
|
||||||
|
@property (nonatomic,strong)NSString *mic_cycle;
|
||||||
/// 是否关注 0 未关注 1 已关注
|
/// 是否关注 0 未关注 1 已关注
|
||||||
@property (nonatomic,assign)NSInteger is_follow;
|
@property (nonatomic,assign)NSInteger is_follow;
|
||||||
|
|
||||||
@@ -181,6 +199,10 @@ NS_ASSUME_NONNULL_BEGIN
|
|||||||
@property (nonatomic,strong)NSArray *icon;
|
@property (nonatomic,strong)NSArray *icon;
|
||||||
/// 麦位
|
/// 麦位
|
||||||
@property (nonatomic,strong)NSString *pit_number;
|
@property (nonatomic,strong)NSString *pit_number;
|
||||||
|
/// 爵位图片
|
||||||
|
@property (nonatomic,strong)NSString *nobility_image;
|
||||||
|
/// 爵位图片
|
||||||
|
@property (nonatomic,strong)NSString *nickname_color;
|
||||||
/// 是否拥有转币权限 0 未开启 1 已开启
|
/// 是否拥有转币权限 0 未开启 1 已开启
|
||||||
@property (nonatomic,strong)NSString *red_status;
|
@property (nonatomic,strong)NSString *red_status;
|
||||||
/// 角色 1-房主 > 2-管理员 > 3主持人 >4 普通用户 排序
|
/// 角色 1-房主 > 2-管理员 > 3主持人 >4 普通用户 排序
|
||||||
|
|||||||
27
QXLive/Mine(音域)/Model/爵位/QXNobilityGetPriceModel.h
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
//
|
||||||
|
// QXNobilityGetPriceModel.h
|
||||||
|
// QXLive
|
||||||
|
//
|
||||||
|
// Created by 启星 on 2025/11/8.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
@class QXNobilityGetPricePowerList;
|
||||||
|
@interface QXNobilityGetPriceModel : NSObject
|
||||||
|
@property (nonatomic,strong)NSString *lid;
|
||||||
|
@property (nonatomic,strong)NSString *nobility_name;
|
||||||
|
@property (nonatomic,strong)NSString *nobility_image;
|
||||||
|
@property (nonatomic,strong)NSString *price;
|
||||||
|
@property (nonatomic,strong)NSString *pay_price;
|
||||||
|
@property (nonatomic,strong)NSString *day;
|
||||||
|
@property (nonatomic,strong)NSArray<QXNobilityGetPricePowerList*> *power_list;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface QXNobilityGetPricePowerList : NSObject
|
||||||
|
@property (nonatomic,strong)NSString *id;
|
||||||
|
@property (nonatomic,strong)NSString *content;
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
||||||
23
QXLive/Mine(音域)/Model/爵位/QXNobilityGetPriceModel.m
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
//
|
||||||
|
// QXNobilityGetPriceModel.m
|
||||||
|
// QXLive
|
||||||
|
//
|
||||||
|
// Created by 启星 on 2025/11/8.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "QXNobilityGetPriceModel.h"
|
||||||
|
|
||||||
|
@implementation QXNobilityGetPriceModel
|
||||||
|
+(NSDictionary<NSString *,id> *)modelContainerPropertyGenericClass{
|
||||||
|
return @{
|
||||||
|
@"power_list" : @"QXNobilityGetPricePowerList",
|
||||||
|
};
|
||||||
|
}
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
@implementation QXNobilityGetPricePowerList
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@end
|
||||||
37
QXLive/Mine(音域)/Model/爵位/QXNobilityListModel.h
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
//
|
||||||
|
// QXNobilityListModel.h
|
||||||
|
// QXLive
|
||||||
|
//
|
||||||
|
// Created by 启星 on 2025/11/8.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
@class QXNobilityPower,QXNobilityPowerList;
|
||||||
|
@interface QXNobilityListModel : NSObject
|
||||||
|
@property (nonatomic,strong)NSString *name;
|
||||||
|
@property (nonatomic,strong)NSString *image;
|
||||||
|
@property (nonatomic,strong)NSString *pay_price;
|
||||||
|
@property (nonatomic,strong)NSString *lid;
|
||||||
|
@property (nonatomic,strong)NSString *day;
|
||||||
|
@property (nonatomic,strong)QXNobilityPower *power;
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@interface QXNobilityPower : NSObject
|
||||||
|
@property (nonatomic,strong)NSString *power_count;
|
||||||
|
@property (nonatomic,strong)NSString *this_power_count;
|
||||||
|
@property (nonatomic,strong)NSString *count_str;
|
||||||
|
@property (nonatomic,strong)NSArray<QXNobilityPowerList*>*list;
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
@interface QXNobilityPowerList :NSObject
|
||||||
|
@property (nonatomic,strong)NSString *id;
|
||||||
|
@property (nonatomic,strong)NSString *name;
|
||||||
|
@property (nonatomic,strong)NSString *content;
|
||||||
|
@property (nonatomic,strong)NSString *image;
|
||||||
|
@end
|
||||||
|
NS_ASSUME_NONNULL_END
|
||||||
32
QXLive/Mine(音域)/Model/爵位/QXNobilityListModel.m
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
//
|
||||||
|
// QXNobilityListModel.m
|
||||||
|
// QXLive
|
||||||
|
//
|
||||||
|
// Created by 启星 on 2025/11/8.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "QXNobilityListModel.h"
|
||||||
|
|
||||||
|
@implementation QXNobilityListModel
|
||||||
|
+(NSDictionary<NSString *,id> *)modelContainerPropertyGenericClass{
|
||||||
|
return @{
|
||||||
|
@"power" : @"QXNobilityPower",
|
||||||
|
};
|
||||||
|
}
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
@implementation QXNobilityPower
|
||||||
|
+(NSDictionary<NSString *,id> *)modelContainerPropertyGenericClass{
|
||||||
|
return @{
|
||||||
|
@"list" : @"QXNobilityPowerList",
|
||||||
|
};
|
||||||
|
}
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
@implementation QXNobilityPowerList
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@end
|
||||||
61
QXLive/Mine(音域)/Model/爵位/QXNobilityModel.h
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
//
|
||||||
|
// QXNobilityModel.h
|
||||||
|
// QXLive
|
||||||
|
//
|
||||||
|
// Created by 启星 on 2025/11/7.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
@class QXUserNobility,QXNobilityLevel,QXNobilityInfo;
|
||||||
|
@interface QXNobilityModel : NSObject
|
||||||
|
/// 爵位信息
|
||||||
|
@property (nonatomic,strong)QXUserModel *user_info;
|
||||||
|
|
||||||
|
@property (nonatomic,strong)QXUserNobility *nobility_info;
|
||||||
|
|
||||||
|
@property (nonatomic,strong)NSArray<QXNobilityLevel *>* nobility_power_list;
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
@interface QXUserNobility : NSObject
|
||||||
|
///状态: 0去开通 1去续费
|
||||||
|
@property (nonatomic,strong)NSString *status;
|
||||||
|
///权限ID
|
||||||
|
@property (nonatomic,strong)NSString *lid;
|
||||||
|
///爵位ID
|
||||||
|
@property (nonatomic,strong)NSString *id;
|
||||||
|
/// 爵位名称
|
||||||
|
@property (nonatomic,strong)NSString *name;
|
||||||
|
///爵位图片
|
||||||
|
@property (nonatomic,strong)NSString *image;
|
||||||
|
///结束时间
|
||||||
|
@property (nonatomic,strong)NSString *end_time;
|
||||||
|
///显示类型 1状态 2文字
|
||||||
|
@property (nonatomic,strong)NSString *type;
|
||||||
|
///昵称颜色名称
|
||||||
|
@property (nonatomic,strong)NSString *nick_name_color_name;
|
||||||
|
///昵称颜色
|
||||||
|
@property (nonatomic,strong)NSString *nick_name_color;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface QXNobilityLevel : NSObject
|
||||||
|
///爵位ID
|
||||||
|
@property (nonatomic,strong)NSString *lid;
|
||||||
|
///爵位名称
|
||||||
|
@property (nonatomic,strong)NSString *name;
|
||||||
|
///权限ID
|
||||||
|
@property (nonatomic,strong)NSString *power_ids;
|
||||||
|
///昵称颜色
|
||||||
|
@property (nonatomic,strong)NSString *nick_name_color;
|
||||||
|
///昵称颜色名称
|
||||||
|
@property (nonatomic,strong)NSString *nick_name_color_name;
|
||||||
|
///爵位名称
|
||||||
|
@property (nonatomic,strong)NSArray<QXUserNobility*> *nobility_list;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
||||||
38
QXLive/Mine(音域)/Model/爵位/QXNobilityModel.m
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
//
|
||||||
|
// QXNobilityModel.m
|
||||||
|
// QXLive
|
||||||
|
//
|
||||||
|
// Created by 启星 on 2025/11/7.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "QXNobilityModel.h"
|
||||||
|
|
||||||
|
@implementation QXNobilityModel
|
||||||
|
|
||||||
|
+(NSDictionary<NSString *,id> *)modelContainerPropertyGenericClass{
|
||||||
|
return @{
|
||||||
|
@"user_info" : @"QXUserModel",
|
||||||
|
@"nobility_info" : @"QXUserNobility",
|
||||||
|
@"nobility_power_list": @"QXNobilityLevel",
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
@implementation QXUserNobility
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
@implementation QXNobilityLevel
|
||||||
|
+(NSDictionary<NSString *,id> *)modelContainerPropertyGenericClass{
|
||||||
|
return @{
|
||||||
|
@"nobility_list" : @"QXUserNobility",
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
@@ -25,6 +25,9 @@
|
|||||||
#import "QXRoomHourRankModel.h"
|
#import "QXRoomHourRankModel.h"
|
||||||
#import "QXRedPacketModel.h"
|
#import "QXRedPacketModel.h"
|
||||||
#import "QXEmojiTypeModel.h"
|
#import "QXEmojiTypeModel.h"
|
||||||
|
#import "QXNobilityModel.h"
|
||||||
|
#import "QXNobilityListModel.h"
|
||||||
|
#import "QXNobilityGetPriceModel.h"
|
||||||
|
|
||||||
NS_ASSUME_NONNULL_BEGIN
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
@@ -846,6 +849,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||||||
type:(NSString*)type
|
type:(NSString*)type
|
||||||
userId:(NSString*)userId
|
userId:(NSString*)userId
|
||||||
typeId:(NSString*)typeId
|
typeId:(NSString*)typeId
|
||||||
|
nobility_id:(NSString*)nobility_id
|
||||||
successBlock:(void (^)(NSDictionary* dict))successBlock
|
successBlock:(void (^)(NSDictionary* dict))successBlock
|
||||||
failBlock:(void (^)(NSError * error, NSString * msg))failBlock;
|
failBlock:(void (^)(NSError * error, NSString * msg))failBlock;
|
||||||
|
|
||||||
@@ -1155,6 +1159,33 @@ NS_ASSUME_NONNULL_BEGIN
|
|||||||
successBlock:(void (^)(NSArray <QXEmojiModel*>* list))successBlock
|
successBlock:(void (^)(NSArray <QXEmojiModel*>* list))successBlock
|
||||||
failBlock:(void (^)(NSError * error, NSString * msg))failBlock;
|
failBlock:(void (^)(NSError * error, NSString * msg))failBlock;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
获取爵位
|
||||||
|
*/
|
||||||
|
+(void)getUserNobilitSuccessBlock:(void (^)(QXNobilityModel* model))successBlock
|
||||||
|
failBlock:(void (^)(NSError * error, NSString * msg))failBlock;
|
||||||
|
|
||||||
|
/**
|
||||||
|
获取爵位列表
|
||||||
|
*/
|
||||||
|
+(void)getNobilityListSuccessBlock:(void (^)(NSArray<QXNobilityListModel*>* list))successBlock
|
||||||
|
failBlock:(void (^)(NSError * error, NSString * msg))failBlock;
|
||||||
|
|
||||||
|
/**
|
||||||
|
购买爵位
|
||||||
|
*/
|
||||||
|
+(void)getNobilityPriceWithId:(NSString*)Id
|
||||||
|
successBlock:(void (^)(QXNobilityGetPriceModel* model))successBlock
|
||||||
|
failBlock:(void (^)(NSError * error, NSString * msg))failBlock;
|
||||||
|
|
||||||
|
/**
|
||||||
|
开启隐身
|
||||||
|
*/
|
||||||
|
+(void)getNobilityPriceWithHideStatus:(NSString*)hide_status
|
||||||
|
successBlock:(void (^)(NSDictionary* dict))successBlock
|
||||||
|
failBlock:(void (^)(NSError * error, NSString * msg))failBlock;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -18,6 +18,10 @@
|
|||||||
[QXGlobal shareGlobal].loginModel.dress = userModel.dress;
|
[QXGlobal shareGlobal].loginModel.dress = userModel.dress;
|
||||||
[QXGlobal shareGlobal].loginModel.auth = userModel.auth.intValue;
|
[QXGlobal shareGlobal].loginModel.auth = userModel.auth.intValue;
|
||||||
[QXGlobal shareGlobal].loginModel.chat_bubble = userModel.chat_bubble;
|
[QXGlobal shareGlobal].loginModel.chat_bubble = userModel.chat_bubble;
|
||||||
|
[QXGlobal shareGlobal].loginModel.nobility_image = userModel.nobility_image;
|
||||||
|
[QXGlobal shareGlobal].loginModel.nickname_color = userModel.nickname_color;
|
||||||
|
[QXGlobal shareGlobal].loginModel.is_hide = userModel.is_hide;
|
||||||
|
[QXGlobal shareGlobal].loginModel.hide_status = userModel.hide_status;
|
||||||
[[QXGlobal shareGlobal] updateUserInfoWithMolde:[QXGlobal shareGlobal].loginModel];
|
[[QXGlobal shareGlobal] updateUserInfoWithMolde:[QXGlobal shareGlobal].loginModel];
|
||||||
BOOL api_version = [responseObject[@"api_version"] boolValue];
|
BOOL api_version = [responseObject[@"api_version"] boolValue];
|
||||||
[QXGlobal shareGlobal].isAppStore = api_version;
|
[QXGlobal shareGlobal].isAppStore = api_version;
|
||||||
@@ -1630,13 +1634,20 @@
|
|||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
|
||||||
+(void)rechargePayWithMoney:(NSString *)money coin:(NSString *)coin type:(NSString *)type userId:(NSString*)userId typeId:(NSString*)typeId successBlock:(void (^)(NSDictionary * _Nonnull))successBlock failBlock:(void (^)(NSError * _Nonnull, NSString * _Nonnull))failBlock{
|
+(void)rechargePayWithMoney:(NSString *)money
|
||||||
|
coin:(NSString *)coin
|
||||||
|
type:(NSString *)type
|
||||||
|
userId:(NSString*)userId
|
||||||
|
typeId:(NSString*)typeId
|
||||||
|
nobility_id:(NSString*)nobility_id
|
||||||
|
successBlock:(void (^)(NSDictionary * _Nonnull))successBlock failBlock:(void (^)(NSError * _Nonnull, NSString * _Nonnull))failBlock{
|
||||||
NSDictionary *parameters =@{
|
NSDictionary *parameters =@{
|
||||||
@"coin":coin?coin:@"",
|
@"coin":coin?coin:@"",
|
||||||
@"money":money?money:@"",
|
@"money":money?money:@"",
|
||||||
@"type":type?type:@"",
|
@"type":type?type:@"",
|
||||||
@"user_id":userId?userId:@"",
|
@"user_id":userId?userId:@"",
|
||||||
@"type_id":typeId?typeId:@""
|
@"type_id":typeId?typeId:@"",
|
||||||
|
@"nobility_id":nobility_id?:@""
|
||||||
};
|
};
|
||||||
[[QXRequset shareInstance] postWithUrl:QXRechargePay parameters:parameters needCache:NO success:^(id responseObject) {
|
[[QXRequset shareInstance] postWithUrl:QXRechargePay parameters:parameters needCache:NO success:^(id responseObject) {
|
||||||
if (successBlock) {
|
if (successBlock) {
|
||||||
@@ -2250,4 +2261,57 @@
|
|||||||
failBlock(error,msg);
|
failBlock(error,msg);
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
+(void)getUserNobilitSuccessBlock:(void (^)(QXNobilityModel* model))successBlock
|
||||||
|
failBlock:(void (^)(NSError * error, NSString * msg))failBlock{
|
||||||
|
[[QXRequset shareInstance] getWithUrl:QXGetUserNobility parameters:@{} needCache:NO success:^(id responseObject) {
|
||||||
|
if (successBlock) {
|
||||||
|
QXNobilityModel*model = [QXNobilityModel yy_modelWithJSON:responseObject[@"data"]];
|
||||||
|
successBlock(model);
|
||||||
|
}
|
||||||
|
} fail:^(NSError *error, NSString *msg, NSURLSessionDataTask *task) {
|
||||||
|
failBlock(error,msg);
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
+(void)getNobilityListSuccessBlock:(void (^)(NSArray<QXNobilityListModel*>* list))successBlock
|
||||||
|
failBlock:(void (^)(NSError * error, NSString * msg))failBlock{
|
||||||
|
[[QXRequset shareInstance] getWithUrl:QXGetNobilityList parameters:@{} needCache:NO success:^(id responseObject) {
|
||||||
|
if (successBlock) {
|
||||||
|
NSArray *list = [NSArray yy_modelArrayWithClass:[QXNobilityListModel class] json:responseObject[@"data"]];
|
||||||
|
successBlock(list);
|
||||||
|
}
|
||||||
|
} fail:^(NSError *error, NSString *msg, NSURLSessionDataTask *task) {
|
||||||
|
failBlock(error,msg);
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
+(void)getNobilityPriceWithId:(NSString*)Id
|
||||||
|
successBlock:(void (^)(QXNobilityGetPriceModel* model))successBlock
|
||||||
|
failBlock:(void (^)(NSError * error, NSString * msg))failBlock{
|
||||||
|
[[QXRequset shareInstance] getWithUrl:QXNobilityBuy parameters:@{@"id":Id?:@""} needCache:NO success:^(id responseObject) {
|
||||||
|
if (successBlock) {
|
||||||
|
QXNobilityGetPriceModel *model = [QXNobilityGetPriceModel yy_modelWithJSON:responseObject[@"data"]];
|
||||||
|
successBlock(model);
|
||||||
|
}
|
||||||
|
} fail:^(NSError *error, NSString *msg, NSURLSessionDataTask *task) {
|
||||||
|
failBlock(error,msg);
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
+(void)getNobilityPriceWithHideStatus:(NSString *)hide_status successBlock:(void (^)(NSDictionary * _Nonnull))successBlock failBlock:(void (^)(NSError * _Nonnull, NSString * _Nonnull))failBlock{
|
||||||
|
NSDictionary *parameters =@{
|
||||||
|
@"hide_status":hide_status?hide_status:@"",
|
||||||
|
};
|
||||||
|
[[QXRequset shareInstance] postWithUrl:QXNobilityHideJoinRoom parameters:parameters needCache:NO success:^(id responseObject) {
|
||||||
|
if (successBlock) {
|
||||||
|
successBlock(responseObject[@"data"]);
|
||||||
|
}
|
||||||
|
} fail:^(NSError *error, NSString *msg, NSURLSessionDataTask *task) {
|
||||||
|
failBlock(error,msg);
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ typedef NS_ENUM(NSInteger) {
|
|||||||
@interface QXMainHeaderView : UIView
|
@interface QXMainHeaderView : UIView
|
||||||
@property (nonatomic,weak)id<QXMainHeaderViewDelegate>delegate;
|
@property (nonatomic,weak)id<QXMainHeaderViewDelegate>delegate;
|
||||||
@property (nonatomic,strong)QXUserModel *userModel;
|
@property (nonatomic,strong)QXUserModel *userModel;
|
||||||
|
@property (nonatomic,strong)NSArray *bannerArray;
|
||||||
@property (nonatomic,strong)NSString *earnings;
|
@property (nonatomic,strong)NSString *earnings;
|
||||||
@property (nonatomic,strong)NSString *coin;
|
@property (nonatomic,strong)NSString *coin;
|
||||||
-(void)reloadData;
|
-(void)reloadData;
|
||||||
|
|||||||
@@ -10,7 +10,9 @@
|
|||||||
#import "CKShimmerLabel.h"
|
#import "CKShimmerLabel.h"
|
||||||
#import "QXMineHomeToolsCell.h"
|
#import "QXMineHomeToolsCell.h"
|
||||||
#import "QXServiceModel.h"
|
#import "QXServiceModel.h"
|
||||||
|
#import "QXBanner.h"
|
||||||
#import <SDCycleScrollView/SDCycleScrollView.h>
|
#import <SDCycleScrollView/SDCycleScrollView.h>
|
||||||
|
#import "QXUserHomePageViewController.h"
|
||||||
|
|
||||||
@interface QXMainHeaderView()<UICollectionViewDelegate,UICollectionViewDataSource,SDCycleScrollViewDelegate>
|
@interface QXMainHeaderView()<UICollectionViewDelegate,UICollectionViewDataSource,SDCycleScrollViewDelegate>
|
||||||
@property (nonatomic, strong) QXSeatHeaderView *userHeaderView;
|
@property (nonatomic, strong) QXSeatHeaderView *userHeaderView;
|
||||||
@@ -57,6 +59,7 @@
|
|||||||
@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;
|
||||||
|
@property (nonatomic, strong)NSMutableArray *bannerImages;
|
||||||
@end
|
@end
|
||||||
@implementation QXMainHeaderView
|
@implementation QXMainHeaderView
|
||||||
|
|
||||||
@@ -70,7 +73,7 @@
|
|||||||
}
|
}
|
||||||
-(void)initSubviews{
|
-(void)initSubviews{
|
||||||
MJWeakSelf
|
MJWeakSelf
|
||||||
self.userHeaderView = [[QXSeatHeaderView alloc] initWithFrame:CGRectMake(16, 18, 76, 76)];
|
self.userHeaderView = [[QXSeatHeaderView alloc] initWithFrame:CGRectMake(16, 18, 76, 91)];
|
||||||
[self.userHeaderView addTapBlock:^(id _Nonnull obj) {
|
[self.userHeaderView addTapBlock:^(id _Nonnull obj) {
|
||||||
if (weakSelf.delegate && [weakSelf.delegate respondsToSelector:@selector(didClickOptionType:)]) {
|
if (weakSelf.delegate && [weakSelf.delegate respondsToSelector:@selector(didClickOptionType:)]) {
|
||||||
[weakSelf.delegate didClickOptionType:QXMainHeaderOptionTypeGotoHome];
|
[weakSelf.delegate didClickOptionType:QXMainHeaderOptionTypeGotoHome];
|
||||||
@@ -78,12 +81,7 @@
|
|||||||
}];
|
}];
|
||||||
[self addSubview:self.userHeaderView];
|
[self addSubview:self.userHeaderView];
|
||||||
|
|
||||||
self.sexImageView = [[UIImageView alloc] init];
|
|
||||||
[self addSubview:self.sexImageView];
|
|
||||||
[self.sexImageView mas_makeConstraints:^(MASConstraintMaker *make) {
|
|
||||||
make.right.bottom.equalTo(self.userHeaderView);
|
|
||||||
make.height.width.mas_equalTo(16);
|
|
||||||
}];
|
|
||||||
|
|
||||||
// self.nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.userHeaderView.right+6, self.userHeaderView.top, self.width-self.userHeaderView.right-16-6, 23)];
|
// self.nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.userHeaderView.right+6, self.userHeaderView.top, self.width-self.userHeaderView.right-16-6, 23)];
|
||||||
self.nameLabel = [[CKShimmerLabel alloc] initWithFrame:CGRectMake(self.userHeaderView.right+6, self.userHeaderView.top+5, self.width-self.userHeaderView.right-16-6, 22)];
|
self.nameLabel = [[CKShimmerLabel alloc] initWithFrame:CGRectMake(self.userHeaderView.right+6, self.userHeaderView.top+5, self.width-self.userHeaderView.right-16-6, 22)];
|
||||||
@@ -96,7 +94,14 @@
|
|||||||
// [self.nameLabel startShimmer];
|
// [self.nameLabel startShimmer];
|
||||||
[self addSubview:self.nameLabel];
|
[self addSubview:self.nameLabel];
|
||||||
|
|
||||||
self.idLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.userHeaderView.right+6, self.nameLabel.bottom+6, 80, 17)];
|
self.sexImageView = [[UIImageView alloc] initWithFrame:CGRectMake(self.userHeaderView.right+6, self.nameLabel.bottom+4, 17, 17)];
|
||||||
|
[self addSubview:self.sexImageView];
|
||||||
|
// [self.sexImageView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
// make.right.bottom.equalTo(self.userHeaderView);
|
||||||
|
// make.height.width.mas_equalTo(16);
|
||||||
|
// }];
|
||||||
|
|
||||||
|
self.idLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.sexImageView.right+6, self.nameLabel.bottom+6, 80, 17)];
|
||||||
self.idLabel.textColor = RGB16(0x666666);
|
self.idLabel.textColor = RGB16(0x666666);
|
||||||
self.idLabel.font = [UIFont systemFontOfSize:12];
|
self.idLabel.font = [UIFont systemFontOfSize:12];
|
||||||
self.idLabel.text = @"ID:";
|
self.idLabel.text = @"ID:";
|
||||||
@@ -142,7 +147,7 @@
|
|||||||
];
|
];
|
||||||
CGFloat width = (SCREEN_WIDTH-60)/3;
|
CGFloat width = (SCREEN_WIDTH-60)/3;
|
||||||
for (int i = 0; i < nameArr.count; i ++) {
|
for (int i = 0; i < nameArr.count; i ++) {
|
||||||
UILabel *countLabel = [[UILabel alloc] initWithFrame:CGRectMake(30+width*i, self.userHeaderView.bottom+25, width, 25)];
|
UILabel *countLabel = [[UILabel alloc] initWithFrame:CGRectMake(30+width*i, self.userHeaderView.bottom+10, width, 25)];
|
||||||
countLabel.textAlignment = NSTextAlignmentCenter;
|
countLabel.textAlignment = NSTextAlignmentCenter;
|
||||||
countLabel.textColor = RGB16(0xCCCDC8);
|
countLabel.textColor = RGB16(0xCCCDC8);
|
||||||
countLabel.tag = 10 + i;
|
countLabel.tag = 10 + i;
|
||||||
@@ -166,7 +171,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
self.nobilityBgView = [[UIView alloc] initWithFrame:CGRectMake(30, self.userHeaderView.bottom+95, SCREEN_WIDTH-60, ScaleWidth(40))];
|
self.nobilityBgView = [[UIView alloc] initWithFrame:CGRectMake(30, self.userHeaderView.bottom+80, SCREEN_WIDTH-60, ScaleWidth(40))];
|
||||||
[self.nobilityBgView addTapBlock:^(id _Nonnull obj) {
|
[self.nobilityBgView addTapBlock:^(id _Nonnull obj) {
|
||||||
if (weakSelf.delegate && [weakSelf.delegate respondsToSelector:@selector(didClickOptionType:)]) {
|
if (weakSelf.delegate && [weakSelf.delegate respondsToSelector:@selector(didClickOptionType:)]) {
|
||||||
[weakSelf.delegate didClickOptionType:QXMainHeaderOptionTypeNobility];
|
[weakSelf.delegate didClickOptionType:QXMainHeaderOptionTypeNobility];
|
||||||
@@ -282,6 +287,33 @@
|
|||||||
_coin = coin;
|
_coin = coin;
|
||||||
self.walletMoneyLabel.text = [NSString stringWithFormat:@"%.2f",coin.doubleValue];
|
self.walletMoneyLabel.text = [NSString stringWithFormat:@"%.2f",coin.doubleValue];
|
||||||
}
|
}
|
||||||
|
-(void)setBannerArray:(NSArray *)bannerArray{
|
||||||
|
_bannerArray = bannerArray;
|
||||||
|
[self.bannerImages removeAllObjects];
|
||||||
|
for (QXBanner *banner in bannerArray) {
|
||||||
|
[self.bannerImages addObject:banner.image];
|
||||||
|
}
|
||||||
|
self.cycleScrollView.imageURLStringsGroup = self.bannerImages;
|
||||||
|
}
|
||||||
|
-(void)cycleScrollView:(SDCycleScrollView *)cycleScrollView didSelectItemAtIndex:(NSInteger)index{
|
||||||
|
if (!QXGlobal.shareGlobal.isLogin) {
|
||||||
|
[[QXGlobal shareGlobal] logOut];
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
QXBanner *banner = self.bannerArray[index];
|
||||||
|
if ([banner.type isEqualToString:@"2"]) {
|
||||||
|
QXBaseWebViewController *webVc = [[QXBaseWebViewController alloc] init];
|
||||||
|
webVc.urlStr = banner.url;
|
||||||
|
[self.navigationController pushViewController:webVc animated:YES];
|
||||||
|
}else if ([banner.type isEqualToString:@"3"]){
|
||||||
|
[[QXGlobal shareGlobal] joinRoomWithRoomId:banner.aid isRejoin:NO navagationController:self.navigationController];
|
||||||
|
}else if ([banner.type isEqualToString:@"4"]){
|
||||||
|
QXUserHomePageViewController *userHomePage = [[QXUserHomePageViewController alloc] init];
|
||||||
|
userHomePage.user_id = banner.aid;
|
||||||
|
[self.viewController.navigationController pushViewController:userHomePage animated:YES];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
-(void)reloadData{
|
-(void)reloadData{
|
||||||
if ([self.toolsArray containsObject:self.rechargeModel]) {
|
if ([self.toolsArray containsObject:self.rechargeModel]) {
|
||||||
return;
|
return;
|
||||||
@@ -333,6 +365,12 @@
|
|||||||
-(void)setUserModel:(QXUserModel *)userModel{
|
-(void)setUserModel:(QXUserModel *)userModel{
|
||||||
_userModel = userModel;
|
_userModel = userModel;
|
||||||
[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]];
|
||||||
|
if ([userModel.nickname_color isExist]) {
|
||||||
|
self.nameLabel.textColor = [UIColor colorWithHexString:userModel.nickname_color];
|
||||||
|
}else{
|
||||||
|
self.nameLabel.textColor = RGB16A(0xffffff,0.85);
|
||||||
|
}
|
||||||
self.nameLabel.text = userModel.nickname;
|
self.nameLabel.text = userModel.nickname;
|
||||||
self.idLabel.text = [NSString stringWithFormat:@"ID:%@",userModel.user_code];
|
self.idLabel.text = [NSString stringWithFormat:@"ID:%@",userModel.user_code];
|
||||||
UILabel *followLabel = [self viewWithTag:10];
|
UILabel *followLabel = [self viewWithTag:10];
|
||||||
@@ -346,7 +384,7 @@
|
|||||||
}
|
}
|
||||||
for (int i = 0;i<userModel.icon.count;i++) {
|
for (int i = 0;i<userModel.icon.count;i++) {
|
||||||
NSString*icon = userModel.icon[i];
|
NSString*icon = userModel.icon[i];
|
||||||
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(self.nameLabel.left+i*UserIconWidth, self.userHeaderView.bottom-5-UserIconHeight, UserIconWidth, UserIconHeight)];
|
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(self.nameLabel.left+i*UserIconWidth, self.idLabel.bottom+9, UserIconWidth, UserIconHeight)];
|
||||||
[imageView sd_setImageWithURL:[NSURL URLWithString:icon]];
|
[imageView sd_setImageWithURL:[NSURL URLWithString:icon]];
|
||||||
[self addSubview:imageView];
|
[self addSubview:imageView];
|
||||||
[self.iconArray addObject:imageView];
|
[self.iconArray addObject:imageView];
|
||||||
@@ -415,4 +453,10 @@
|
|||||||
}
|
}
|
||||||
return _rechargeModel;
|
return _rechargeModel;
|
||||||
}
|
}
|
||||||
|
-(NSMutableArray *)bannerImages{
|
||||||
|
if (!_bannerImages) {
|
||||||
|
_bannerImages = [NSMutableArray array];
|
||||||
|
}
|
||||||
|
return _bannerImages;
|
||||||
|
}
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -188,7 +188,7 @@
|
|||||||
|
|
||||||
QXServiceModel *md3 = [[QXServiceModel alloc] init];
|
QXServiceModel *md3 = [[QXServiceModel alloc] init];
|
||||||
md3.title = @"意见反馈";
|
md3.title = @"意见反馈";
|
||||||
md3.icon = @"service_bag";
|
md3.icon = @"service_report";
|
||||||
md3.type = QXMineServiceTypeReport;
|
md3.type = QXMineServiceTypeReport;
|
||||||
|
|
||||||
QXServiceModel *md4 = [[QXServiceModel alloc] init];
|
QXServiceModel *md4 = [[QXServiceModel alloc] init];
|
||||||
|
|||||||
@@ -51,16 +51,12 @@
|
|||||||
[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);
|
||||||
make.height.width.mas_equalTo(70);
|
make.width.mas_equalTo(70);
|
||||||
|
make.height.mas_equalTo(84);
|
||||||
make.top.mas_equalTo(26);
|
make.top.mas_equalTo(26);
|
||||||
}];
|
}];
|
||||||
|
|
||||||
self.sexImageView = [[UIImageView alloc] init];
|
|
||||||
[self addSubview:self.sexImageView];
|
|
||||||
[self.sexImageView mas_makeConstraints:^(MASConstraintMaker *make) {
|
|
||||||
make.right.bottom.equalTo(self.headerView);
|
|
||||||
make.height.width.mas_equalTo(16);
|
|
||||||
}];
|
|
||||||
|
|
||||||
self.nameLabel = [[UILabel alloc] init];
|
self.nameLabel = [[UILabel alloc] init];
|
||||||
self.nameLabel.textColor = QXConfig.textColor;
|
self.nameLabel.textColor = QXConfig.textColor;
|
||||||
@@ -72,12 +68,20 @@
|
|||||||
make.top.equalTo(self.headerView.mas_bottom).offset(4);
|
make.top.equalTo(self.headerView.mas_bottom).offset(4);
|
||||||
}];
|
}];
|
||||||
|
|
||||||
|
self.sexImageView = [[UIImageView alloc] init];
|
||||||
|
[self addSubview:self.sexImageView];
|
||||||
|
[self.sexImageView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.left.equalTo(self.nameLabel.mas_right).offset(5);
|
||||||
|
make.centerY.equalTo(self.nameLabel);
|
||||||
|
make.height.width.mas_equalTo(16);
|
||||||
|
}];
|
||||||
|
|
||||||
self.idLabel = [[UILabel alloc] init];
|
self.idLabel = [[UILabel alloc] init];
|
||||||
self.idLabel.textColor = RGB16(0x999999);
|
self.idLabel.textColor = RGB16(0x999999);
|
||||||
self.idLabel.font = [UIFont boldSystemFontOfSize:12];
|
self.idLabel.font = [UIFont boldSystemFontOfSize:12];
|
||||||
[self addSubview:self.idLabel];
|
[self addSubview:self.idLabel];
|
||||||
[self.idLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
[self.idLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
make.left.equalTo(self.nameLabel.mas_right).offset(12);
|
make.left.equalTo(self.sexImageView.mas_right).offset(12);
|
||||||
make.height.mas_equalTo(24);
|
make.height.mas_equalTo(24);
|
||||||
make.centerY.equalTo(self.nameLabel);
|
make.centerY.equalTo(self.nameLabel);
|
||||||
}];
|
}];
|
||||||
@@ -267,7 +271,13 @@
|
|||||||
-(void)setModel:(QXUserHomeModel *)model{
|
-(void)setModel:(QXUserHomeModel *)model{
|
||||||
_model = model;
|
_model = model;
|
||||||
[self.headerView setHeadIcon:model.avatar dress:model.dress];
|
[self.headerView setHeadIcon:model.avatar dress:model.dress];
|
||||||
|
[self.headerView.nobilityImageView sd_setImageWithURL:[NSURL URLWithString:model.nobility_image]];
|
||||||
self.nameLabel.text = model.nickname;
|
self.nameLabel.text = model.nickname;
|
||||||
|
if ([model.nickname_color isExist]) {
|
||||||
|
self.nameLabel.textColor = [UIColor colorWithHexString:model.nickname_color];
|
||||||
|
}else{
|
||||||
|
self.nameLabel.textColor = QXConfig.textColor;
|
||||||
|
}
|
||||||
self.idLabel.text = [NSString stringWithFormat:@"ID:%@",model.user_code];
|
self.idLabel.text = [NSString stringWithFormat:@"ID:%@",model.user_code];
|
||||||
self.ageLabel.text = [NSString stringWithFormat:@"%@|%ld岁",model.sex.intValue==1?QXText(@"男"):QXText(@"女"),[model.birthday ageWithDateOfBirth]];
|
self.ageLabel.text = [NSString stringWithFormat:@"%@|%ld岁",model.sex.intValue==1?QXText(@"男"):QXText(@"女"),[model.birthday ageWithDateOfBirth]];
|
||||||
self.introduceLabel.text = model.profile;
|
self.introduceLabel.text = model.profile;
|
||||||
|
|||||||
17
QXLive/Mine(音域)/View/充值/QXRechargePayTypeTableCell.h
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
//
|
||||||
|
// QXRechargePayTypeTableCell.h
|
||||||
|
// QXLive
|
||||||
|
//
|
||||||
|
// Created by 启星 on 2025/11/8.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
#import "QXRechargePayTypeView.h"
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
@interface QXRechargePayTypeTableCell : UITableViewCell
|
||||||
|
@property (nonatomic,strong)QXPayTypeModel *model;
|
||||||
|
+(instancetype)cellWithTableView:(UITableView *)tableView;
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
||||||
56
QXLive/Mine(音域)/View/充值/QXRechargePayTypeTableCell.m
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
//
|
||||||
|
// QXRechargePayTypeTableCell.m
|
||||||
|
// QXLive
|
||||||
|
//
|
||||||
|
// Created by 启星 on 2025/11/8.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "QXRechargePayTypeTableCell.h"
|
||||||
|
@interface QXRechargePayTypeTableCell()
|
||||||
|
@property (nonatomic,strong)QXRechargePayTypeView *payTypeView;
|
||||||
|
@end
|
||||||
|
@implementation QXRechargePayTypeTableCell
|
||||||
|
+(instancetype)cellWithTableView:(UITableView *)tableView{
|
||||||
|
static NSString *cellId = @"QXRechargePayTypeTableCell";
|
||||||
|
QXRechargePayTypeTableCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];
|
||||||
|
if (!cell) {
|
||||||
|
cell = [[QXRechargePayTypeTableCell alloc] initWithStyle:(UITableViewCellStyleDefault) reuseIdentifier:cellId];
|
||||||
|
}
|
||||||
|
return cell;
|
||||||
|
}
|
||||||
|
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
|
||||||
|
{
|
||||||
|
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
|
||||||
|
if (self) {
|
||||||
|
[self initSubviews];
|
||||||
|
self.backgroundColor = UIColor.clearColor;
|
||||||
|
self.selectionStyle = UITableViewCellSelectionStyleNone;
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)setModel:(QXPayTypeModel *)model{
|
||||||
|
_model = model;
|
||||||
|
self.payTypeView.model = model;
|
||||||
|
}
|
||||||
|
-(void)initSubviews{
|
||||||
|
self.payTypeView = [[QXRechargePayTypeView alloc] init];
|
||||||
|
[self.contentView addSubview:self.payTypeView];
|
||||||
|
[self.payTypeView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.left.mas_equalTo(16);
|
||||||
|
make.right.mas_equalTo(-16);
|
||||||
|
make.top.bottom.equalTo(self);
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
- (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
|
||||||
@@ -266,7 +266,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
@weakify(self)
|
@weakify(self)
|
||||||
[QXMineNetwork rechargePayWithMoney:self.selectedModel.money coin:self.selectedModel.coins type:self.selectedPayTypeModel.type userId:QXGlobal.shareGlobal.loginModel.user_id typeId:self.gift_bag_id successBlock:^(NSDictionary * _Nonnull dict) {
|
[QXMineNetwork rechargePayWithMoney:self.selectedModel.money coin:self.selectedModel.coins type:self.selectedPayTypeModel.type userId:QXGlobal.shareGlobal.loginModel.user_id typeId:self.gift_bag_id nobility_id:@"" successBlock:^(NSDictionary * _Nonnull dict) {
|
||||||
@strongify(self)
|
@strongify(self)
|
||||||
if (self.selectedPayTypeModel.type.intValue == 2) {
|
if (self.selectedPayTypeModel.type.intValue == 2) {
|
||||||
NSDictionary *resultDict = dict[@"data"];
|
NSDictionary *resultDict = dict[@"data"];
|
||||||
|
|||||||
17
QXLive/Mine(音域)/View/爵位/QXNobilityBuyDesCell.h
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
//
|
||||||
|
// QXNobilityBuyDesCell.h
|
||||||
|
// QXLive
|
||||||
|
//
|
||||||
|
// Created by 启星 on 2025/11/7.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
@interface QXNobilityBuyDesCell : UITableViewCell
|
||||||
|
@property (weak, nonatomic) IBOutlet UILabel *titleLabel;
|
||||||
|
+(instancetype)cellWithTableView:(UITableView *)tableView;
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
||||||
31
QXLive/Mine(音域)/View/爵位/QXNobilityBuyDesCell.m
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
//
|
||||||
|
// QXNobilityBuyDesCell.m
|
||||||
|
// QXLive
|
||||||
|
//
|
||||||
|
// Created by 启星 on 2025/11/7.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "QXNobilityBuyDesCell.h"
|
||||||
|
|
||||||
|
@implementation QXNobilityBuyDesCell
|
||||||
|
+(instancetype)cellWithTableView:(UITableView *)tableView{
|
||||||
|
static NSString *cellId = @"QXNobilityBuyDesCell";
|
||||||
|
QXNobilityBuyDesCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];
|
||||||
|
if (!cell) {
|
||||||
|
cell = [[NSBundle mainBundle] loadNibNamed:cellId owner:nil options:nil].lastObject;
|
||||||
|
cell.backgroundColor = [UIColor clearColor];
|
||||||
|
}
|
||||||
|
return cell;
|
||||||
|
}
|
||||||
|
- (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
|
||||||
55
QXLive/Mine(音域)/View/爵位/QXNobilityBuyDesCell.xib
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
<?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="123" id="KGk-i7-Jjw" customClass="QXNobilityBuyDesCell">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="428" height="123"/>
|
||||||
|
<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="428" height="123"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<subviews>
|
||||||
|
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="nobility_buy_right" translatesAutoresizingMaskIntoConstraints="NO" id="iv3-Qk-Sz9">
|
||||||
|
<rect key="frame" x="16" y="51.666666666666664" width="20" height="19.999999999999993"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="height" constant="20" id="1KK-NC-aPP"/>
|
||||||
|
<constraint firstAttribute="width" constant="20" id="MB4-aI-H6f"/>
|
||||||
|
</constraints>
|
||||||
|
</imageView>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Mbe-RV-FTv">
|
||||||
|
<rect key="frame" x="46" y="0.0" width="372" height="123"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||||
|
<color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="0.84999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="Mbe-RV-FTv" secondAttribute="bottom" id="bdU-cC-yAv"/>
|
||||||
|
<constraint firstItem="Mbe-RV-FTv" firstAttribute="leading" secondItem="iv3-Qk-Sz9" secondAttribute="trailing" constant="10" id="nvH-RN-gNj"/>
|
||||||
|
<constraint firstItem="iv3-Qk-Sz9" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="16" id="p3e-oi-7MM"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="Mbe-RV-FTv" secondAttribute="trailing" constant="10" id="uXt-vT-XiJ"/>
|
||||||
|
<constraint firstItem="Mbe-RV-FTv" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" id="xtE-ts-Q7A"/>
|
||||||
|
</constraints>
|
||||||
|
</tableViewCellContentView>
|
||||||
|
<viewLayoutGuide key="safeArea" id="aW0-zy-SZf"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="iv3-Qk-Sz9" firstAttribute="centerY" secondItem="aW0-zy-SZf" secondAttribute="centerY" id="f41-7K-Iof"/>
|
||||||
|
</constraints>
|
||||||
|
<connections>
|
||||||
|
<outlet property="titleLabel" destination="Mbe-RV-FTv" id="8Hk-Ou-mp3"/>
|
||||||
|
</connections>
|
||||||
|
<point key="canvasLocation" x="221.37404580152671" y="47.535211267605639"/>
|
||||||
|
</tableViewCell>
|
||||||
|
</objects>
|
||||||
|
<resources>
|
||||||
|
<image name="nobility_buy_right" width="18" height="18"/>
|
||||||
|
</resources>
|
||||||
|
</document>
|
||||||
26
QXLive/Mine(音域)/View/爵位/QXNobilityContentView.h
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
//
|
||||||
|
// QXNobilityContentView.h
|
||||||
|
// QXLive
|
||||||
|
//
|
||||||
|
// Created by 启星 on 2025/11/7.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
#import "QXNobilityModel.h"
|
||||||
|
@class QXNobilityContentColView;
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
@interface QXNobilityContentView : UIView
|
||||||
|
@property (nonatomic, strong) QXNobilityModel *model;
|
||||||
|
- (void)reloadData;
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
@interface QXNobilityContentColView : UIView
|
||||||
|
@property (nonatomic,strong)QXUserNobility *model;
|
||||||
|
@property (nonatomic,strong)UILabel *titleLabel;
|
||||||
|
@property (nonatomic,strong)UIView *colorView;
|
||||||
|
@property (nonatomic,strong)UIImageView *imageView;
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
||||||
437
QXLive/Mine(音域)/View/爵位/QXNobilityContentView.m
Normal file
@@ -0,0 +1,437 @@
|
|||||||
|
//
|
||||||
|
// QXNobilityContentView.m
|
||||||
|
// QXLive
|
||||||
|
//
|
||||||
|
// Created by 启星 on 2025/11/7.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "QXNobilityContentView.h"
|
||||||
|
@interface QXNobilityContentView()<UIScrollViewDelegate>
|
||||||
|
|
||||||
|
@property (nonatomic, strong) NSMutableArray *privilegeTitles;
|
||||||
|
@property (nonatomic, assign) NSInteger rowCount;
|
||||||
|
@property (nonatomic, strong) NSMutableArray *rowHeaders;
|
||||||
|
|
||||||
|
@property (nonatomic, assign) CGFloat rowHeaderWidth;
|
||||||
|
@property (nonatomic, assign) CGFloat columnHeaderHeight;
|
||||||
|
@property (nonatomic, assign) CGFloat cellWidth;
|
||||||
|
@property (nonatomic, assign) CGFloat cellHeight;
|
||||||
|
|
||||||
|
// 滚动视图
|
||||||
|
@property (nonatomic, strong) UIScrollView *verticalScrollView; // 处理垂直滚动
|
||||||
|
@property (nonatomic, strong) UIScrollView *horizontalScrollView; // 处理水平滚动
|
||||||
|
@property (nonatomic, strong) UIScrollView *contentScrollView; // 内容区域滚动
|
||||||
|
@property (nonatomic, strong) UIScrollView *rowHeaderScrollView; // 行标题垂直滚动
|
||||||
|
|
||||||
|
// 固定视图
|
||||||
|
@property (nonatomic, strong) UIView *cornerView; // 左上角
|
||||||
|
@property (nonatomic, strong) UIView *columnHeaderView; // 列标题(第一行)
|
||||||
|
|
||||||
|
@property (nonatomic, strong)UILabel *cornerLabel;
|
||||||
|
|
||||||
|
// 内容容器
|
||||||
|
@property (nonatomic, strong) UIView *contentContainer;
|
||||||
|
@property (nonatomic, strong) UIView *rowHeaderContainer;
|
||||||
|
|
||||||
|
@property (nonatomic, strong) UIView *borderView;
|
||||||
|
|
||||||
|
@property (nonatomic, assign) BOOL isSyncingScroll;
|
||||||
|
@property (nonatomic, assign) NSInteger currentIndex;
|
||||||
|
@end
|
||||||
|
@implementation QXNobilityContentView
|
||||||
|
|
||||||
|
- (instancetype)initWithFrame:(CGRect)frame {
|
||||||
|
self = [super initWithFrame:frame];
|
||||||
|
if (self) {
|
||||||
|
[self setup];
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setup {
|
||||||
|
self.clipsToBounds = YES;
|
||||||
|
int itemWidth = (self.width/4);
|
||||||
|
self.rowHeaderWidth = itemWidth;
|
||||||
|
self.columnHeaderHeight = 50;
|
||||||
|
self.cellWidth = itemWidth;
|
||||||
|
self.cellHeight = 42;
|
||||||
|
self.isSyncingScroll = NO;
|
||||||
|
|
||||||
|
[self createScrollViews];
|
||||||
|
[self createFixedViews];
|
||||||
|
[self createContentViews];
|
||||||
|
|
||||||
|
[self bringSubviewToFront:self.horizontalScrollView];
|
||||||
|
[self bringSubviewToFront:self.rowHeaderScrollView];
|
||||||
|
[self bringSubviewToFront:self.cornerView];
|
||||||
|
[self bringSubviewToFront:self.contentScrollView];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)createScrollViews {
|
||||||
|
// 主垂直滚动视图 - 占据整个视图,但只处理垂直滚动
|
||||||
|
self.verticalScrollView = [[UIScrollView alloc] initWithFrame:self.bounds];
|
||||||
|
self.verticalScrollView.delegate = self;
|
||||||
|
self.verticalScrollView.bounces = NO;
|
||||||
|
self.verticalScrollView.alwaysBounceVertical = YES;
|
||||||
|
self.verticalScrollView.showsVerticalScrollIndicator = YES;
|
||||||
|
self.verticalScrollView.showsHorizontalScrollIndicator = NO;
|
||||||
|
[self addSubview:self.verticalScrollView];
|
||||||
|
|
||||||
|
// 主水平滚动视图 - 占据整个视图,但只处理水平滚动
|
||||||
|
self.horizontalScrollView = [[UIScrollView alloc] initWithFrame:self.bounds];
|
||||||
|
self.horizontalScrollView.delegate = self;
|
||||||
|
self.horizontalScrollView.bounces = NO;
|
||||||
|
self.horizontalScrollView.alwaysBounceHorizontal = YES;
|
||||||
|
self.horizontalScrollView.showsHorizontalScrollIndicator = YES;
|
||||||
|
self.horizontalScrollView.showsVerticalScrollIndicator = NO;
|
||||||
|
[self addSubview:self.horizontalScrollView];
|
||||||
|
|
||||||
|
// 内容滚动视图 - 只显示内容区域(不包括固定行列)
|
||||||
|
CGRect contentFrame = CGRectMake(self.rowHeaderWidth, self.columnHeaderHeight,
|
||||||
|
self.bounds.size.width - self.rowHeaderWidth,
|
||||||
|
self.bounds.size.height - self.columnHeaderHeight);
|
||||||
|
self.contentScrollView = [[UIScrollView alloc] initWithFrame:contentFrame];
|
||||||
|
self.contentScrollView.delegate = self;
|
||||||
|
self.contentScrollView.bounces = NO;
|
||||||
|
self.contentScrollView.alwaysBounceVertical = YES;
|
||||||
|
self.contentScrollView.alwaysBounceHorizontal = YES;
|
||||||
|
self.contentScrollView.showsVerticalScrollIndicator = NO;
|
||||||
|
self.contentScrollView.showsHorizontalScrollIndicator = NO;
|
||||||
|
[self addSubview:self.contentScrollView];
|
||||||
|
|
||||||
|
// 行标题滚动视图 - 支持垂直滚动
|
||||||
|
CGRect rowHeaderFrame = CGRectMake(0, self.columnHeaderHeight, self.rowHeaderWidth, self.bounds.size.height - self.columnHeaderHeight);
|
||||||
|
self.rowHeaderScrollView = [[UIScrollView alloc] initWithFrame:rowHeaderFrame];
|
||||||
|
self.rowHeaderScrollView.delegate = self;
|
||||||
|
self.rowHeaderScrollView.bounces = NO;
|
||||||
|
self.rowHeaderScrollView.alwaysBounceVertical = YES;
|
||||||
|
self.rowHeaderScrollView.showsVerticalScrollIndicator = NO;
|
||||||
|
self.rowHeaderScrollView.showsHorizontalScrollIndicator = NO;
|
||||||
|
[self addSubview:self.rowHeaderScrollView];
|
||||||
|
|
||||||
|
self.borderView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.cellWidth, 0)];
|
||||||
|
[self.borderView addRoundedCornersWithRadius:6];
|
||||||
|
self.borderView.layer.borderWidth = 1;
|
||||||
|
self.borderView.layer.borderColor = RGB16(0xF5E9D1).CGColor;
|
||||||
|
self.borderView.hidden = YES;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)createFixedViews {
|
||||||
|
// 左上角固定区域 - 永远固定在左上角
|
||||||
|
self.cornerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.rowHeaderWidth, self.columnHeaderHeight)];
|
||||||
|
self.cornerView.backgroundColor = [UIColor clearColor];
|
||||||
|
self.cornerView.backgroundColor = RGB16(0x2A2A4E);
|
||||||
|
self.cornerView.userInteractionEnabled = NO; // 禁止交互,让滚动视图可以接收触摸
|
||||||
|
|
||||||
|
UILabel *cornerLabel = [[UILabel alloc] initWithFrame:self.cornerView.bounds];
|
||||||
|
cornerLabel.textAlignment = NSTextAlignmentCenter;
|
||||||
|
cornerLabel.textColor = UIColor.whiteColor;
|
||||||
|
cornerLabel.font = [UIFont boldSystemFontOfSize:14];
|
||||||
|
self.cornerLabel = cornerLabel;
|
||||||
|
[self.cornerView addSubview:cornerLabel];
|
||||||
|
[self addSubview:self.cornerView];
|
||||||
|
|
||||||
|
// 列标题固定区域 - 永远固定在第一行
|
||||||
|
self.columnHeaderView = [[UIView alloc] initWithFrame:CGRectMake(self.rowHeaderWidth, 0, self.bounds.size.width - self.rowHeaderWidth, self.columnHeaderHeight)];
|
||||||
|
self.columnHeaderView.backgroundColor = [UIColor clearColor];
|
||||||
|
self.columnHeaderView.backgroundColor = RGB16(0x2A2A4E);
|
||||||
|
self.columnHeaderView.userInteractionEnabled = NO;
|
||||||
|
[self insertSubview:self.columnHeaderView belowSubview:self.cornerView];
|
||||||
|
|
||||||
|
}
|
||||||
|
- (void)createContentViews {
|
||||||
|
if (self.privilegeTitles.count == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
NSArray *columnTitles = self.privilegeTitles;
|
||||||
|
NSInteger columnCount = columnTitles.count - 1; // 减去第一列
|
||||||
|
|
||||||
|
// 计算内容总尺寸
|
||||||
|
CGFloat contentWidth = self.cellWidth * columnCount;
|
||||||
|
CGFloat contentHeight = self.cellHeight * self.rowCount;
|
||||||
|
|
||||||
|
// 设置滚动视图内容大小
|
||||||
|
self.verticalScrollView.contentSize = CGSizeMake(self.bounds.size.width, self.columnHeaderHeight + contentHeight);
|
||||||
|
self.horizontalScrollView.contentSize = CGSizeMake(self.rowHeaderWidth + contentWidth, self.bounds.size.height);
|
||||||
|
self.contentScrollView.contentSize = CGSizeMake(contentWidth, contentHeight);
|
||||||
|
self.rowHeaderScrollView.contentSize = CGSizeMake(self.rowHeaderWidth, contentHeight);
|
||||||
|
self.borderView.height = self.columnHeaderHeight + contentHeight;
|
||||||
|
// 创建内容容器
|
||||||
|
self.contentContainer = [[UIView alloc] initWithFrame:CGRectMake(0, 0, contentWidth, contentHeight)];
|
||||||
|
[self.contentScrollView addSubview:self.contentContainer];
|
||||||
|
|
||||||
|
// 创建行标题容器
|
||||||
|
self.rowHeaderContainer = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.rowHeaderWidth, contentHeight)];
|
||||||
|
[self.rowHeaderScrollView addSubview:self.rowHeaderContainer];
|
||||||
|
|
||||||
|
// 创建列标题
|
||||||
|
[self createColumnHeaders:columnTitles];
|
||||||
|
|
||||||
|
// 创建行标题
|
||||||
|
[self createRowHeaders];
|
||||||
|
|
||||||
|
// 创建内容单元格
|
||||||
|
[self createContentCells:columnTitles];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
- (void)createColumnHeaders:(NSArray *)columnTitles {
|
||||||
|
// 清除旧内容
|
||||||
|
for (UIView *view in self.columnHeaderView.subviews) {
|
||||||
|
[view removeFromSuperview];
|
||||||
|
}
|
||||||
|
|
||||||
|
CGFloat totalHeaderWidth = self.cellWidth * (columnTitles.count - 1);
|
||||||
|
|
||||||
|
for (int i = 0; i < columnTitles.count - 1; i++) {
|
||||||
|
UIView *headerCell = [[UIView alloc] initWithFrame:CGRectMake(i * self.cellWidth, 0, self.cellWidth, self.columnHeaderHeight)];
|
||||||
|
|
||||||
|
|
||||||
|
UILabel *label = [[UILabel alloc] initWithFrame:headerCell.bounds];
|
||||||
|
label.text = columnTitles[i + 1]; // 跳过第一列
|
||||||
|
label.textAlignment = NSTextAlignmentCenter;
|
||||||
|
label.font = [UIFont boldSystemFontOfSize:12];
|
||||||
|
label.textColor = UIColor.whiteColor;
|
||||||
|
label.numberOfLines = 0;
|
||||||
|
[headerCell addSubview:label];
|
||||||
|
|
||||||
|
[self.columnHeaderView addSubview:headerCell];
|
||||||
|
}
|
||||||
|
|
||||||
|
// 设置列标题容器的内容大小
|
||||||
|
self.columnHeaderView.frame = CGRectMake(self.rowHeaderWidth, 0, totalHeaderWidth, self.columnHeaderHeight);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)createRowHeaders {
|
||||||
|
// 清除旧内容
|
||||||
|
for (UIView *view in self.rowHeaderContainer.subviews) {
|
||||||
|
[view removeFromSuperview];
|
||||||
|
}
|
||||||
|
for (int i = 0; i < self.rowHeaders.count; i++) {
|
||||||
|
QXUserNobility *titleData = self.rowHeaders[i];
|
||||||
|
UIView *headerCell = [[UIView alloc] initWithFrame:CGRectMake(0, i * self.cellHeight, self.rowHeaderWidth, self.cellHeight)];
|
||||||
|
// headerCell.layer.borderWidth = 0.5;
|
||||||
|
// headerCell.layer.borderColor = [UIColor lightGrayColor].CGColor;
|
||||||
|
|
||||||
|
UILabel *label = [[UILabel alloc] initWithFrame:headerCell.bounds];
|
||||||
|
label.text = [NSString stringWithFormat:@"%@", titleData.name];
|
||||||
|
label.textAlignment = NSTextAlignmentCenter;
|
||||||
|
label.textColor = UIColor.whiteColor;
|
||||||
|
label.font = [UIFont systemFontOfSize:12];
|
||||||
|
[headerCell addSubview:label];
|
||||||
|
if (i%2==0) {
|
||||||
|
headerCell.backgroundColor = RGB16A(0x323252, 1);
|
||||||
|
}else{
|
||||||
|
headerCell.backgroundColor = RGB16A(0x2A2A4E, 1);
|
||||||
|
}
|
||||||
|
// 高亮当前用户
|
||||||
|
// if (titleData.isCurrentUser) {
|
||||||
|
// headerCell.backgroundColor = [UIColor colorWithRed:0.8 green:0.9 blue:1.0 alpha:1.0];
|
||||||
|
// headerCell.layer.borderWidth = 2;
|
||||||
|
// headerCell.layer.borderColor = [UIColor systemBlueColor].CGColor;
|
||||||
|
// }
|
||||||
|
|
||||||
|
[self.rowHeaderContainer addSubview:headerCell];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)createContentCells:(NSArray *)columnTitles {
|
||||||
|
// // 清除旧内容
|
||||||
|
for (UIView *view in self.contentContainer.subviews) {
|
||||||
|
[view removeFromSuperview];
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int col = 0; col < columnTitles.count - 1; col++) {
|
||||||
|
QXNobilityLevel *model = self.model.nobility_power_list[col+1];
|
||||||
|
for (int row = 0; row < self.rowHeaders.count; row++) {
|
||||||
|
// UIView *cell = [[UIView alloc] initWithFrame:CGRectMake(col * self.cellWidth, row * self.cellHeight, self.cellWidth, self.cellHeight)];
|
||||||
|
// cell.layer.borderWidth = 0.5;
|
||||||
|
// cell.layer.borderColor = [UIColor lightGrayColor].CGColor;
|
||||||
|
//
|
||||||
|
// UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(5, 0, self.cellWidth - 10, self.cellHeight)];
|
||||||
|
// label.font = [UIFont systemFontOfSize:12];
|
||||||
|
// label.numberOfLines = 0;
|
||||||
|
// label.textColor = UIColor.whiteColor;
|
||||||
|
QXUserNobility *md = model.nobility_list[row];
|
||||||
|
// label.text = md.status.intValue == 1?@"开":@"关";
|
||||||
|
// [cell addSubview:label];;
|
||||||
|
// [self.contentContainer addSubview:cell];
|
||||||
|
|
||||||
|
QXNobilityContentColView *colView = [[QXNobilityContentColView alloc] initWithFrame:CGRectMake(col * self.cellWidth, row * self.cellHeight, self.cellWidth, self.cellHeight)];
|
||||||
|
colView.model = md;
|
||||||
|
if (row%2==0) {
|
||||||
|
colView.backgroundColor = RGB16A(0x323252, 1);
|
||||||
|
}else{
|
||||||
|
colView.backgroundColor = RGB16A(0x2A2A4E, 1);
|
||||||
|
}
|
||||||
|
[self.contentContainer addSubview:colView];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - UIScrollViewDelegate
|
||||||
|
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
|
||||||
|
if (self.isSyncingScroll) return;
|
||||||
|
|
||||||
|
self.isSyncingScroll = YES;
|
||||||
|
|
||||||
|
if (scrollView == self.verticalScrollView) {
|
||||||
|
// 垂直滚动时,同步内容区域和行标题的垂直滚动
|
||||||
|
CGFloat offsetY = scrollView.contentOffset.y;
|
||||||
|
self.contentScrollView.contentOffset = CGPointMake(self.contentScrollView.contentOffset.x, offsetY);
|
||||||
|
self.rowHeaderScrollView.contentOffset = CGPointMake(0, offsetY);
|
||||||
|
|
||||||
|
} else if (scrollView == self.horizontalScrollView) {
|
||||||
|
// 水平滚动时,同步内容区域的水平滚动
|
||||||
|
CGFloat offsetX = scrollView.contentOffset.x;
|
||||||
|
self.contentScrollView.contentOffset = CGPointMake(offsetX, self.contentScrollView.contentOffset.y);
|
||||||
|
|
||||||
|
} else if (scrollView == self.contentScrollView) {
|
||||||
|
// 内容区域滚动时,同步主滚动视图
|
||||||
|
CGFloat offsetX = scrollView.contentOffset.x;
|
||||||
|
CGFloat offsetY = scrollView.contentOffset.y;
|
||||||
|
|
||||||
|
self.verticalScrollView.contentOffset = CGPointMake(self.verticalScrollView.contentOffset.x, offsetY);
|
||||||
|
self.horizontalScrollView.contentOffset = CGPointMake(offsetX, self.horizontalScrollView.contentOffset.y);
|
||||||
|
self.rowHeaderScrollView.contentOffset = CGPointMake(0, offsetY);
|
||||||
|
|
||||||
|
} else if (scrollView == self.rowHeaderScrollView) {
|
||||||
|
// 行标题滚动时,同步垂直滚动
|
||||||
|
CGFloat offsetY = scrollView.contentOffset.y;
|
||||||
|
self.verticalScrollView.contentOffset = CGPointMake(self.verticalScrollView.contentOffset.x, offsetY);
|
||||||
|
self.contentScrollView.contentOffset = CGPointMake(self.contentScrollView.contentOffset.x, offsetY);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新固定视图的位置
|
||||||
|
[self updateFixedViewsPosition];
|
||||||
|
|
||||||
|
self.isSyncingScroll = NO;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)updateFixedViewsPosition {
|
||||||
|
CGFloat offsetX = self.horizontalScrollView.contentOffset.x;
|
||||||
|
CGFloat offsetY = self.verticalScrollView.contentOffset.y;
|
||||||
|
|
||||||
|
// 固定视图的位置应该始终在可视区域内
|
||||||
|
// 左上角:始终在 (0, 0)
|
||||||
|
self.cornerView.frame = CGRectMake(0, 0, self.rowHeaderWidth, self.columnHeaderHeight);
|
||||||
|
|
||||||
|
// 列标题:水平跟随滚动,垂直固定在顶部
|
||||||
|
self.columnHeaderView.frame = CGRectMake(self.rowHeaderWidth - offsetX, 0, self.columnHeaderView.frame.size.width, self.columnHeaderHeight);
|
||||||
|
|
||||||
|
// 行标题滚动视图:水平固定在左侧,垂直位置由自己的contentOffset控制
|
||||||
|
self.rowHeaderScrollView.frame = CGRectMake(0, self.columnHeaderHeight, self.rowHeaderWidth, self.bounds.size.height - self.columnHeaderHeight);
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)setModel:(QXNobilityModel *)model{
|
||||||
|
_model = model;
|
||||||
|
[self.privilegeTitles removeAllObjects];
|
||||||
|
[self.rowHeaders removeAllObjects];
|
||||||
|
for (int i = 0; i < model.nobility_power_list.count;i++ ) {
|
||||||
|
QXNobilityLevel*md = model.nobility_power_list[i];
|
||||||
|
[self.privilegeTitles addObject:md.name];
|
||||||
|
self.rowCount = md.nobility_list.count;
|
||||||
|
if (i == 0) {
|
||||||
|
self.cornerLabel.text = md.name;
|
||||||
|
[self.rowHeaders addObjectsFromArray:md.nobility_list];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
self.currentIndex = 3;
|
||||||
|
}
|
||||||
|
- (void)reloadData {
|
||||||
|
[self createContentViews];
|
||||||
|
[self scrollToCurrentUser];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)scrollToCurrentUser {
|
||||||
|
if (self.currentIndex == -1) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// self.borderView.hidden = NO;
|
||||||
|
// self.borderView.x = ((self.width/4)*(self.currentIndex));
|
||||||
|
// [self.horizontalScrollView addSubview:self.borderView];
|
||||||
|
// [self.horizontalScrollView bringSubviewToFront:self.borderView];
|
||||||
|
if (self.currentIndex<3) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
[self.horizontalScrollView setContentOffset:CGPointMake(((self.width/4)*(self.currentIndex-2)),0 ) animated:YES];
|
||||||
|
}
|
||||||
|
-(NSMutableArray *)privilegeTitles{
|
||||||
|
if (!_privilegeTitles) {
|
||||||
|
_privilegeTitles = [NSMutableArray array];
|
||||||
|
}
|
||||||
|
return _privilegeTitles;
|
||||||
|
}
|
||||||
|
-(NSMutableArray *)rowHeaders{
|
||||||
|
if (!_rowHeaders) {
|
||||||
|
_rowHeaders = [NSMutableArray array];
|
||||||
|
}
|
||||||
|
return _rowHeaders;
|
||||||
|
|
||||||
|
}
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@implementation QXNobilityContentColView
|
||||||
|
|
||||||
|
- (instancetype)initWithFrame:(CGRect)frame
|
||||||
|
{
|
||||||
|
self = [super initWithFrame:frame];
|
||||||
|
if (self) {
|
||||||
|
[self initSubviews];
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
-(void)setModel:(QXUserNobility *)model{
|
||||||
|
if (model.type.intValue == 1) {
|
||||||
|
if (model.status.intValue == 1) {
|
||||||
|
self.imageView.image = [UIImage imageNamed:@"nobility_power_on"];
|
||||||
|
}else{
|
||||||
|
self.imageView.image = [UIImage imageNamed:@"nobility_power_off"];
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
if ([model.nick_name_color_name isExist]) {
|
||||||
|
self.titleLabel.textColor = [UIColor colorWithHexString:model.nick_name_color];
|
||||||
|
self.titleLabel.text = model.nick_name_color_name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)initSubviews{
|
||||||
|
self.colorView = [[UIView alloc] init];
|
||||||
|
[self.colorView addRoundedCornersWithRadius:11];
|
||||||
|
[self addSubview:self.colorView];
|
||||||
|
[self.colorView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.centerX.centerY.equalTo(self);
|
||||||
|
make.width.height.mas_equalTo(22);
|
||||||
|
}];
|
||||||
|
|
||||||
|
self.titleLabel = [[UILabel alloc] init];
|
||||||
|
self.titleLabel.textColor = RGB16(0xffffff);
|
||||||
|
self.titleLabel.font = [UIFont systemFontOfSize:14];
|
||||||
|
self.titleLabel.textAlignment = NSTextAlignmentCenter;
|
||||||
|
[self addSubview:self.titleLabel];
|
||||||
|
[self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.edges.equalTo(self);
|
||||||
|
}];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
self.imageView = [[UIImageView alloc] init];
|
||||||
|
self.imageView.contentMode = UIViewContentModeScaleToFill;
|
||||||
|
[self addSubview:self.imageView];
|
||||||
|
[self.imageView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.centerX.centerY.equalTo(self);
|
||||||
|
make.width.height.mas_equalTo(22);
|
||||||
|
}];
|
||||||
|
|
||||||
|
}
|
||||||
|
@end
|
||||||
19
QXLive/Mine(音域)/View/爵位/QXNobilityDetailCell.h
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
//
|
||||||
|
// QXNobilityDetailCell.h
|
||||||
|
// QXLive
|
||||||
|
//
|
||||||
|
// Created by 启星 on 2025/11/8.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
#import "QXNobilityListModel.h"
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
@interface QXNobilityDetailCell : UICollectionViewCell
|
||||||
|
@property (weak, nonatomic) IBOutlet UIImageView *imageView;
|
||||||
|
@property (weak, nonatomic) IBOutlet UILabel *titleLabel;
|
||||||
|
@property (weak, nonatomic) IBOutlet UILabel *detailLabel;
|
||||||
|
@property (nonatomic,strong)QXNobilityPowerList *model;
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
||||||
22
QXLive/Mine(音域)/View/爵位/QXNobilityDetailCell.m
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
//
|
||||||
|
// QXNobilityDetailCell.m
|
||||||
|
// QXLive
|
||||||
|
//
|
||||||
|
// Created by 启星 on 2025/11/8.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "QXNobilityDetailCell.h"
|
||||||
|
|
||||||
|
@implementation QXNobilityDetailCell
|
||||||
|
-(void)setModel:(QXNobilityPowerList *)model{
|
||||||
|
_model = model;
|
||||||
|
[self.imageView sd_setImageWithURL:[NSURL URLWithString:model.image]];
|
||||||
|
self.titleLabel.text = model.name;
|
||||||
|
self.detailLabel.text = model.content;
|
||||||
|
}
|
||||||
|
- (void)awakeFromNib {
|
||||||
|
[super awakeFromNib];
|
||||||
|
// Initialization code
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
81
QXLive/Mine(音域)/View/爵位/QXNobilityDetailCell.xib
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
<?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"/>
|
||||||
|
<collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" id="gTV-IL-0wX" customClass="QXNobilityDetailCell">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="234" height="264"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="234" height="264"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="xLT-Xg-Faz">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="234" height="264"/>
|
||||||
|
<color key="backgroundColor" red="0.16470588235294117" green="0.16078431372549018" blue="0.14509803921568626" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
|
<userDefinedRuntimeAttributes>
|
||||||
|
<userDefinedRuntimeAttribute type="boolean" keyPath="layer.masksToBounds" value="YES"/>
|
||||||
|
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
|
||||||
|
<integer key="value" value="4"/>
|
||||||
|
</userDefinedRuntimeAttribute>
|
||||||
|
</userDefinedRuntimeAttributes>
|
||||||
|
</view>
|
||||||
|
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="v8w-N9-of1">
|
||||||
|
<rect key="frame" x="32" y="38" width="170" height="170"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="width" secondItem="v8w-N9-of1" secondAttribute="height" multiplier="1:1" id="xE8-2U-Q4D"/>
|
||||||
|
</constraints>
|
||||||
|
</imageView>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="o3H-L7-zGq">
|
||||||
|
<rect key="frame" x="7" y="216" width="220" height="20"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="height" constant="20" id="tF6-85-THZ"/>
|
||||||
|
</constraints>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||||
|
<color key="textColor" red="0.85490196078431369" green="0.74117647058823533" blue="0.60392156862745094" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="4BP-5u-QY4">
|
||||||
|
<rect key="frame" x="7" y="238" width="220" height="17"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="height" constant="17" id="gOE-Qf-Pmu"/>
|
||||||
|
</constraints>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="12"/>
|
||||||
|
<color key="textColor" red="0.46666666666666667" green="0.46666666666666667" blue="0.45882352941176469" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
</subviews>
|
||||||
|
</view>
|
||||||
|
<viewLayoutGuide key="safeArea" id="SEy-5g-ep8"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="4BP-5u-QY4" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" constant="7" id="6Cn-Ir-Kpu"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="4BP-5u-QY4" secondAttribute="trailing" constant="7" id="A9u-ce-WWY"/>
|
||||||
|
<constraint firstItem="o3H-L7-zGq" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" constant="7" id="CLo-rE-ybM"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="o3H-L7-zGq" secondAttribute="trailing" constant="7" id="CiZ-7I-Tt0"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="v8w-N9-of1" secondAttribute="trailing" constant="32" id="Dm3-kU-uHK"/>
|
||||||
|
<constraint firstItem="o3H-L7-zGq" firstAttribute="top" secondItem="v8w-N9-of1" secondAttribute="bottom" constant="8" id="Fse-jn-eg5"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="xLT-Xg-Faz" secondAttribute="trailing" id="I7V-P0-Wce"/>
|
||||||
|
<constraint firstItem="xLT-Xg-Faz" firstAttribute="top" secondItem="gTV-IL-0wX" secondAttribute="top" id="R9b-Pk-7kv"/>
|
||||||
|
<constraint firstItem="v8w-N9-of1" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" constant="32" id="Z12-gU-Cot"/>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="4BP-5u-QY4" secondAttribute="bottom" constant="9" id="bCf-Nt-Q5f"/>
|
||||||
|
<constraint firstItem="xLT-Xg-Faz" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" id="gKP-tC-6Lb"/>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="xLT-Xg-Faz" secondAttribute="bottom" id="tP6-br-JEa"/>
|
||||||
|
<constraint firstItem="4BP-5u-QY4" firstAttribute="top" secondItem="o3H-L7-zGq" secondAttribute="bottom" constant="2" id="vav-ld-2v5"/>
|
||||||
|
</constraints>
|
||||||
|
<size key="customSize" width="234" height="264"/>
|
||||||
|
<connections>
|
||||||
|
<outlet property="detailLabel" destination="4BP-5u-QY4" id="pNH-JS-TJQ"/>
|
||||||
|
<outlet property="imageView" destination="v8w-N9-of1" id="sQP-eY-MPi"/>
|
||||||
|
<outlet property="titleLabel" destination="o3H-L7-zGq" id="AbG-Si-q2W"/>
|
||||||
|
</connections>
|
||||||
|
<point key="canvasLocation" x="279.38931297709922" y="95.070422535211279"/>
|
||||||
|
</collectionViewCell>
|
||||||
|
</objects>
|
||||||
|
</document>
|
||||||
20
QXLive/Mine(音域)/View/爵位/QXNobilityDetailTopCell.h
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
//
|
||||||
|
// QXNobilityDetailTopCell.h
|
||||||
|
// QXLive
|
||||||
|
//
|
||||||
|
// Created by 启星 on 2025/11/8.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "GKCycleScrollViewCell.h"
|
||||||
|
#import "QXNobilityListModel.h"
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
@interface QXNobilityDetailTopCell : GKCycleScrollViewCell
|
||||||
|
@property (nonatomic,strong)QXNobilityListModel *model;
|
||||||
|
|
||||||
|
@property (nonatomic,assign)NSInteger index;
|
||||||
|
@property (nonatomic,assign)NSInteger myIndex;
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
||||||
66
QXLive/Mine(音域)/View/爵位/QXNobilityDetailTopCell.m
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
//
|
||||||
|
// QXNobilityDetailTopCell.m
|
||||||
|
// QXLive
|
||||||
|
//
|
||||||
|
// Created by 启星 on 2025/11/8.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "QXNobilityDetailTopCell.h"
|
||||||
|
#import "UIImage+QX.h"
|
||||||
|
|
||||||
|
@interface QXNobilityDetailTopCell()
|
||||||
|
@property (nonatomic,strong)UILabel *titleLabel;
|
||||||
|
@property (nonatomic,strong)UIImageView *currentNobilityImageView;
|
||||||
|
@end
|
||||||
|
@implementation QXNobilityDetailTopCell
|
||||||
|
|
||||||
|
- (instancetype)initWithFrame:(CGRect)frame {
|
||||||
|
if (self = [super initWithFrame:frame]) {
|
||||||
|
[self initSubViews];
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
-(void)setIndex:(NSInteger)index{
|
||||||
|
_index = index;
|
||||||
|
}
|
||||||
|
-(void)setMyIndex:(NSInteger)myIndex{
|
||||||
|
_myIndex = myIndex;
|
||||||
|
}
|
||||||
|
-(void)setModel:(QXNobilityListModel *)model{
|
||||||
|
_model = model;
|
||||||
|
if (self.myIndex<=self.index) {
|
||||||
|
[self.currentNobilityImageView sd_setImageWithURL:[NSURL URLWithString:model.image]];
|
||||||
|
}else{
|
||||||
|
[self.currentNobilityImageView sd_setImageWithURL:[NSURL URLWithString:model.image] completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL) {
|
||||||
|
image = [UIImage qx_convertImageToGrayWithCoreImage:image];
|
||||||
|
self.currentNobilityImageView.image = image;
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
self.titleLabel.text = model.name;
|
||||||
|
}
|
||||||
|
-(void)initSubViews{
|
||||||
|
self.backgroundColor = [UIColor clearColor];
|
||||||
|
self.currentNobilityImageView = [[UIImageView alloc] init];
|
||||||
|
self.currentNobilityImageView.contentMode = UIViewContentModeScaleAspectFill;
|
||||||
|
[self.currentNobilityImageView addRoundedCornersWithRadius:7];
|
||||||
|
[self addSubview:self.currentNobilityImageView];
|
||||||
|
[self.currentNobilityImageView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.bottom.equalTo(self);
|
||||||
|
make.width.height.mas_equalTo(220);
|
||||||
|
make.centerX.equalTo(self);
|
||||||
|
}];
|
||||||
|
|
||||||
|
self.titleLabel = [[UILabel alloc] init];
|
||||||
|
self.titleLabel.textColor = RGB16(0xF4C07C);
|
||||||
|
self.titleLabel.textAlignment = NSTextAlignmentCenter;
|
||||||
|
self.titleLabel.font = [UIFont fontWithName:@"YouSheBiaoTiHei" size:34];
|
||||||
|
[self addSubview:self.titleLabel];
|
||||||
|
[self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.centerX.equalTo(self);
|
||||||
|
make.top.equalTo(self);
|
||||||
|
make.height.mas_equalTo(44);
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@end
|
||||||
25
QXLive/Mine(音域)/View/爵位/QXNobilityHeaderView.h
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
//
|
||||||
|
// QXNobilityHeaderView.h
|
||||||
|
// QXLive
|
||||||
|
//
|
||||||
|
// Created by 启星 on 2025/11/7.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
#import "QXNobilityModel.h"
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
@protocol QXNobilityHeaderViewDelegate <NSObject>
|
||||||
|
|
||||||
|
@optional
|
||||||
|
/// 去开通
|
||||||
|
-(void)didOpenNobility;
|
||||||
|
/// 去续费
|
||||||
|
-(void)didRenewNobility;
|
||||||
|
|
||||||
|
@end
|
||||||
|
@interface QXNobilityHeaderView : UIView
|
||||||
|
@property (nonatomic,strong)QXNobilityModel *model;
|
||||||
|
@property (nonatomic,weak)id<QXNobilityHeaderViewDelegate>delegate;
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
||||||
145
QXLive/Mine(音域)/View/爵位/QXNobilityHeaderView.m
Normal file
@@ -0,0 +1,145 @@
|
|||||||
|
//
|
||||||
|
// QXNobilityHeaderView.m
|
||||||
|
// QXLive
|
||||||
|
//
|
||||||
|
// Created by 启星 on 2025/11/7.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "QXNobilityHeaderView.h"
|
||||||
|
#import "QXSeatHeaderView.h"
|
||||||
|
@interface QXNobilityHeaderView()
|
||||||
|
@property (nonatomic,strong)QXSeatHeaderView *userAvatarView;
|
||||||
|
@property (nonatomic,strong)UILabel *userNameLabel;
|
||||||
|
|
||||||
|
|
||||||
|
/// 当前爵位
|
||||||
|
@property (nonatomic,strong)UIView *currentNobilityBgView;
|
||||||
|
@property (nonatomic,strong)UIImageView *currentNobilityBgImageView;
|
||||||
|
|
||||||
|
/// 有爵位
|
||||||
|
@property (nonatomic,strong)UILabel *currentNobilityLabel;
|
||||||
|
@property (nonatomic,strong)UIButton *buyBtn;
|
||||||
|
/// 无爵位
|
||||||
|
@property (nonatomic,strong)UIButton *openBtn;
|
||||||
|
|
||||||
|
@property (nonatomic,strong)UILabel *currentNobilityTimeLabel;
|
||||||
|
|
||||||
|
@property (nonatomic,strong)UIImageView *currenNobilityImageView;
|
||||||
|
|
||||||
|
@property (nonatomic,strong)UIImageView *compareImageView;
|
||||||
|
@end
|
||||||
|
@implementation QXNobilityHeaderView
|
||||||
|
|
||||||
|
- (instancetype)initWithFrame:(CGRect)frame
|
||||||
|
{
|
||||||
|
self = [super initWithFrame:frame];
|
||||||
|
if (self) {
|
||||||
|
[self initSubviews];
|
||||||
|
self.height = self.compareImageView.bottom+12;
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
-(void)initSubviews{
|
||||||
|
self.userAvatarView = [[QXSeatHeaderView alloc] initWithFrame:CGRectMake(16, 0, 40, 40)];
|
||||||
|
[self.userAvatarView setHeadIcon:QXGlobal.shareGlobal.loginModel.avatar dress:@""];
|
||||||
|
[self addSubview:self.userAvatarView];
|
||||||
|
|
||||||
|
self.userNameLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.userAvatarView.right+10, self.userAvatarView.top, 300, 40)];
|
||||||
|
self.userNameLabel.text = [NSString stringWithFormat:@"%@的爵位",QXGlobal.shareGlobal.loginModel.nickname];
|
||||||
|
self.userNameLabel.textColor = RGB16(0xF5E9D1);
|
||||||
|
self.userNameLabel.font = [UIFont systemFontOfSize:12];
|
||||||
|
[self addSubview:self.userNameLabel];
|
||||||
|
|
||||||
|
self.currentNobilityBgView = [[UIView alloc] initWithFrame:CGRectMake(16, self.userAvatarView.bottom+10, SCREEN_WIDTH-16*2, ScaleWidth(91))];
|
||||||
|
[self addSubview:self.currentNobilityBgView];
|
||||||
|
|
||||||
|
self.currentNobilityBgImageView = [[UIImageView alloc] initWithFrame:self.currentNobilityBgView.bounds];
|
||||||
|
self.currentNobilityBgImageView.image = [UIImage imageNamed:@"nobility_current_bg"];
|
||||||
|
[self.currentNobilityBgView addSubview:self.currentNobilityBgImageView];
|
||||||
|
|
||||||
|
self.currentNobilityLabel = [[UILabel alloc] init];
|
||||||
|
self.currentNobilityLabel.textColor = RGB16(0xA292FF);
|
||||||
|
self.currentNobilityLabel.font = [UIFont fontWithName:@"YouSheBiaoTiHei" size:34];
|
||||||
|
[self.currentNobilityBgView addSubview:self.currentNobilityLabel];
|
||||||
|
[self.currentNobilityLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.left.mas_equalTo(13);
|
||||||
|
make.top.mas_equalTo(6);
|
||||||
|
}];
|
||||||
|
|
||||||
|
self.buyBtn = [[UIButton alloc] init];
|
||||||
|
[self.buyBtn setImage:[UIImage imageNamed:@"nobility_buy"] forState:(UIControlStateNormal)];
|
||||||
|
[self.buyBtn addTarget:self action:@selector(buyAction) forControlEvents:(UIControlEventTouchUpInside)];
|
||||||
|
[self.currentNobilityBgView addSubview:self.buyBtn];
|
||||||
|
[self.buyBtn mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.left.equalTo(self.currentNobilityLabel.mas_right).offset(12);
|
||||||
|
make.width.mas_equalTo(ScaleWidth(60));
|
||||||
|
make.height.mas_equalTo(ScaleWidth(22));
|
||||||
|
make.centerY.equalTo(self.currentNobilityLabel);
|
||||||
|
}];
|
||||||
|
|
||||||
|
self.currentNobilityTimeLabel = [[UILabel alloc] init];
|
||||||
|
self.currentNobilityTimeLabel.textColor = RGB16(0xF5E9D1);
|
||||||
|
self.currentNobilityTimeLabel.font = [UIFont systemFontOfSize:12];
|
||||||
|
[self.currentNobilityBgView addSubview:self.currentNobilityTimeLabel];
|
||||||
|
[self.currentNobilityTimeLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.left.equalTo(self.currentNobilityLabel);
|
||||||
|
make.bottom.equalTo(self.currentNobilityBgView).offset(-12);
|
||||||
|
}];
|
||||||
|
|
||||||
|
self.openBtn = [[UIButton alloc] init];
|
||||||
|
[self.openBtn setImage:[UIImage imageNamed:@"nobility_open"] forState:(UIControlStateNormal)];
|
||||||
|
[self.openBtn addTarget:self action:@selector(openAction) forControlEvents:(UIControlEventTouchUpInside)];
|
||||||
|
[self.currentNobilityBgView addSubview:self.openBtn];
|
||||||
|
[self.openBtn mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.left.equalTo(self.currentNobilityBgView).offset(12);
|
||||||
|
make.width.mas_equalTo(ScaleWidth(113));
|
||||||
|
make.height.mas_equalTo(ScaleWidth(36));
|
||||||
|
make.top.mas_equalTo(17);
|
||||||
|
}];
|
||||||
|
self.currenNobilityImageView = [[UIImageView alloc] init];
|
||||||
|
[self addSubview:self.currenNobilityImageView];
|
||||||
|
[self.currenNobilityImageView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.right.mas_equalTo(-28);
|
||||||
|
make.height.width.mas_equalTo(ScaleWidth(104));
|
||||||
|
make.bottom.mas_equalTo(-34);
|
||||||
|
}];
|
||||||
|
|
||||||
|
self.compareImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"nobility_compare_top"]];
|
||||||
|
self.compareImageView.frame = CGRectMake(41, self.currentNobilityBgView.bottom+13, SCREEN_WIDTH-41*2, ScaleWidth(54));
|
||||||
|
self.compareImageView.contentMode = UIViewContentModeScaleToFill;
|
||||||
|
[self addSubview:self.compareImageView];
|
||||||
|
|
||||||
|
// self.currentNobilityLabel.text = @"骑士";
|
||||||
|
// self.currentNobilityTimeLabel.text = @"有效期剩余:15天22小时";
|
||||||
|
[self setHaveNobility:NO];
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)setModel:(QXNobilityModel *)model{
|
||||||
|
_model = model;
|
||||||
|
[self.userAvatarView setHeadIcon:model.user_info.avatar dress:@""];
|
||||||
|
self.userNameLabel.text = [NSString stringWithFormat:@"%@的爵位",model.user_info.nickname];
|
||||||
|
if (model.nobility_info.status.intValue == 0) {
|
||||||
|
[self setHaveNobility:NO];
|
||||||
|
}else{
|
||||||
|
[self setHaveNobility:YES];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
-(void)setHaveNobility:(BOOL)have{
|
||||||
|
self.openBtn.hidden = have;
|
||||||
|
self.buyBtn.hidden = !have;
|
||||||
|
self.currentNobilityLabel.hidden = !have;
|
||||||
|
self.currentNobilityLabel.text = self.model.nobility_info.name;
|
||||||
|
self.currentNobilityTimeLabel.text = have?[NSString stringWithFormat:@"截止时间:%@",self.model.nobility_info.end_time]:@"您尚未开通任何爵位";
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)openAction{
|
||||||
|
if (self.delegate && [self.delegate respondsToSelector:@selector(didOpenNobility)]) {
|
||||||
|
[self.delegate didOpenNobility];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
-(void)buyAction{
|
||||||
|
if (self.delegate && [self.delegate respondsToSelector:@selector(didRenewNobility)]) {
|
||||||
|
[self.delegate didRenewNobility];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@end
|
||||||
16
QXLive/Mine(音域)/View/爵位/QXNobilityPriceView.h
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
//
|
||||||
|
// QXNobilityPriceView.h
|
||||||
|
// QXLive
|
||||||
|
//
|
||||||
|
// Created by 启星 on 2025/11/8.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
#import "QXNobilityGetPriceModel.h"
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
@interface QXNobilityPriceView : UIView
|
||||||
|
@property (nonatomic,strong)QXNobilityGetPriceModel *model;
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
||||||
101
QXLive/Mine(音域)/View/爵位/QXNobilityPriceView.m
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
//
|
||||||
|
// QXNobilityPriceView.m
|
||||||
|
// QXLive
|
||||||
|
//
|
||||||
|
// Created by 启星 on 2025/11/8.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "QXNobilityPriceView.h"
|
||||||
|
@interface QXNobilityPriceView()
|
||||||
|
@property (nonatomic,strong)UIImageView *bgImageView;
|
||||||
|
@property (nonatomic,strong)UILabel *titleLabel;
|
||||||
|
@property (nonatomic,strong)UILabel *timeLabel;
|
||||||
|
@property (nonatomic,strong)UILabel *priceLabel;
|
||||||
|
@property (nonatomic,strong)UILabel *originalPriceLabel;
|
||||||
|
|
||||||
|
@property (nonatomic,strong)UIImageView *currentNobilityImageView;
|
||||||
|
@end
|
||||||
|
@implementation QXNobilityPriceView
|
||||||
|
|
||||||
|
- (instancetype)initWithFrame:(CGRect)frame
|
||||||
|
{
|
||||||
|
self = [super initWithFrame:frame];
|
||||||
|
if (self) {
|
||||||
|
[self initSubviews];
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
-(void)initSubviews{
|
||||||
|
self.bgImageView = [[UIImageView alloc] init];
|
||||||
|
self.bgImageView.backgroundColor = RGB16(0xFAF9D7);
|
||||||
|
[self.bgImageView addRoundedCornersWithRadius:8];
|
||||||
|
[self addSubview:self.bgImageView];;
|
||||||
|
[self.bgImageView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.left.mas_equalTo(16);
|
||||||
|
make.right.mas_equalTo(-16);
|
||||||
|
make.top.mas_equalTo(34);
|
||||||
|
make.bottom.equalTo(self);
|
||||||
|
}];
|
||||||
|
|
||||||
|
self.currentNobilityImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@""]];
|
||||||
|
[self addSubview:self.currentNobilityImageView];
|
||||||
|
[self.currentNobilityImageView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.top.equalTo(self);
|
||||||
|
make.right.equalTo(self.bgImageView.mas_right).offset(-34);
|
||||||
|
make.height.width.mas_equalTo(104);
|
||||||
|
}];
|
||||||
|
|
||||||
|
self.titleLabel = [[UILabel alloc] init];
|
||||||
|
self.titleLabel.textColor = RGB16(0x333333);
|
||||||
|
self.titleLabel.font = [UIFont fontWithName:@"YouSheBiaoTiHei" size:34];
|
||||||
|
[self addSubview:self.titleLabel];
|
||||||
|
[self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.left.equalTo(self.bgImageView).offset(22);
|
||||||
|
make.top.equalTo(self.bgImageView).offset(18);
|
||||||
|
make.height.mas_equalTo(44);
|
||||||
|
}];
|
||||||
|
|
||||||
|
self.timeLabel = [[UILabel alloc] init];
|
||||||
|
self.timeLabel.textColor = RGB16A(0x000000, 0.65);
|
||||||
|
self.timeLabel.font = [UIFont systemFontOfSize:12];
|
||||||
|
[self addSubview:self.timeLabel];
|
||||||
|
[self.timeLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.left.equalTo(self.titleLabel);
|
||||||
|
make.top.equalTo(self.titleLabel.mas_bottom);
|
||||||
|
}];
|
||||||
|
|
||||||
|
|
||||||
|
self.originalPriceLabel = [[UILabel alloc] init];
|
||||||
|
self.originalPriceLabel.textColor = RGB16(0x999999);
|
||||||
|
self.originalPriceLabel.font = [UIFont systemFontOfSize:14];
|
||||||
|
[self addSubview:self.originalPriceLabel];
|
||||||
|
[self.originalPriceLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.centerX.equalTo(self);
|
||||||
|
make.height.mas_equalTo(20);
|
||||||
|
make.bottom.equalTo(self.bgImageView.mas_bottom);
|
||||||
|
}];
|
||||||
|
|
||||||
|
self.priceLabel = [[UILabel alloc] init];
|
||||||
|
self.priceLabel.textColor = RGB16(0xFF2727);
|
||||||
|
self.priceLabel.font = [UIFont systemFontOfSize:34];
|
||||||
|
[self addSubview:self.priceLabel];
|
||||||
|
[self.priceLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.centerX.equalTo(self);
|
||||||
|
make.height.mas_equalTo(32);
|
||||||
|
make.bottom.equalTo(self.originalPriceLabel.mas_top);
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)setModel:(QXNobilityGetPriceModel *)model{
|
||||||
|
_model = model;
|
||||||
|
[self.currentNobilityImageView sd_setImageWithURL:[NSURL URLWithString:model.nobility_image]];
|
||||||
|
self.titleLabel.text = model.nobility_name;
|
||||||
|
self.timeLabel.text = [NSString stringWithFormat:@"有效期:%@天",model.day];
|
||||||
|
NSString *price = [NSString stringWithFormat:@"¥%@",model.price];
|
||||||
|
NSMutableAttributedString *attr = [[NSMutableAttributedString alloc] initWithString:price];
|
||||||
|
[attr yy_setFont:[UIFont systemFontOfSize:18] range:NSMakeRange(0, 1)];
|
||||||
|
self.priceLabel.attributedText = attr;
|
||||||
|
NSAttributedString *at = [[NSString stringWithFormat:@"¥%@",model.pay_price] deleteLineWithTextColor:RGB16(0x999999) lineColor:RGB16(0x999999)];
|
||||||
|
self.originalPriceLabel.attributedText = at;
|
||||||
|
}
|
||||||
|
@end
|
||||||
@@ -153,7 +153,7 @@
|
|||||||
self.btnSwitch = [[UIButton alloc] init];
|
self.btnSwitch = [[UIButton alloc] init];
|
||||||
[self.btnSwitch setImage:[UIImage imageNamed:@"home_switch_off"] forState:(UIControlStateNormal)];
|
[self.btnSwitch setImage:[UIImage imageNamed:@"home_switch_off"] forState:(UIControlStateNormal)];
|
||||||
[self.btnSwitch setImage:[UIImage imageNamed:@"home_switch_on"] forState:(UIControlStateSelected)];
|
[self.btnSwitch setImage:[UIImage imageNamed:@"home_switch_on"] forState:(UIControlStateSelected)];
|
||||||
[self.btnSwitch addTarget:self action:@selector(btnSwitchAction:) forControlEvents:(UIControlEventTouchUpInside)];
|
// [self.btnSwitch addTarget:self action:@selector(btnSwitchAction:) forControlEvents:(UIControlEventTouchUpInside)];
|
||||||
[self.contentView addSubview:self.btnSwitch];
|
[self.contentView addSubview:self.btnSwitch];
|
||||||
[self.btnSwitch mas_makeConstraints:^(MASConstraintMaker *make) {
|
[self.btnSwitch mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
make.right.mas_equalTo(-16);
|
make.right.mas_equalTo(-16);
|
||||||
@@ -198,9 +198,9 @@
|
|||||||
_needLine = needLine;
|
_needLine = needLine;
|
||||||
self.lineView.hidden = !needLine;
|
self.lineView.hidden = !needLine;
|
||||||
}
|
}
|
||||||
- (void)btnSwitchAction:(UIButton *)sender {
|
//- (void)btnSwitchAction:(UIButton *)sender {
|
||||||
sender.selected = !sender.selected;
|
//// sender.selected = !sender.selected;
|
||||||
}
|
//}
|
||||||
- (void)awakeFromNib {
|
- (void)awakeFromNib {
|
||||||
[super awakeFromNib];
|
[super awakeFromNib];
|
||||||
// Initialization code
|
// Initialization code
|
||||||
|
|||||||
22
QXLive/Other/Assets.xcassets/drif/nobility_drif_join_room_bg.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "nobility_drif_join_room_bg@2x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "nobility_drif_join_room_bg@3x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 64 KiB |
|
After Width: | Height: | Size: 133 KiB |
6
QXLive/Other/Assets.xcassets/mine/爵位/Contents.json
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
22
QXLive/Other/Assets.xcassets/mine/爵位/nobility_buy.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "nobility_buy@2x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "nobility_buy@3x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
QXLive/Other/Assets.xcassets/mine/爵位/nobility_buy.imageset/nobility_buy@2x.png
vendored
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
QXLive/Other/Assets.xcassets/mine/爵位/nobility_buy.imageset/nobility_buy@3x.png
vendored
Normal file
|
After Width: | Height: | Size: 26 KiB |
22
QXLive/Other/Assets.xcassets/mine/爵位/nobility_buy_right.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "nobility_buy_right@2x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "nobility_buy_right@3x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
QXLive/Other/Assets.xcassets/mine/爵位/nobility_buy_right.imageset/nobility_buy_right@2x.png
vendored
Normal file
|
After Width: | Height: | Size: 798 B |
BIN
QXLive/Other/Assets.xcassets/mine/爵位/nobility_buy_right.imageset/nobility_buy_right@3x.png
vendored
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
22
QXLive/Other/Assets.xcassets/mine/爵位/nobility_compare_top.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "nobility_compare_top@2x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "nobility_compare_top@3x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
QXLive/Other/Assets.xcassets/mine/爵位/nobility_compare_top.imageset/nobility_compare_top@2x.png
vendored
Normal file
|
After Width: | Height: | Size: 49 KiB |
BIN
QXLive/Other/Assets.xcassets/mine/爵位/nobility_compare_top.imageset/nobility_compare_top@3x.png
vendored
Normal file
|
After Width: | Height: | Size: 99 KiB |
22
QXLive/Other/Assets.xcassets/mine/爵位/nobility_current_bg.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "nobility_current_bg@2x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "nobility_current_bg@3x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
QXLive/Other/Assets.xcassets/mine/爵位/nobility_current_bg.imageset/nobility_current_bg@2x.png
vendored
Normal file
|
After Width: | Height: | Size: 176 KiB |
BIN
QXLive/Other/Assets.xcassets/mine/爵位/nobility_current_bg.imageset/nobility_current_bg@3x.png
vendored
Normal file
|
After Width: | Height: | Size: 416 KiB |
22
QXLive/Other/Assets.xcassets/mine/爵位/nobility_desc_icon.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "nobility_desc_icon@2x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "nobility_desc_icon@3x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
QXLive/Other/Assets.xcassets/mine/爵位/nobility_desc_icon.imageset/nobility_desc_icon@2x.png
vendored
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
QXLive/Other/Assets.xcassets/mine/爵位/nobility_desc_icon.imageset/nobility_desc_icon@3x.png
vendored
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
21
QXLive/Other/Assets.xcassets/mine/爵位/nobility_detail_bg.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "nobility_detail_bg@2x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
QXLive/Other/Assets.xcassets/mine/爵位/nobility_detail_bg.imageset/nobility_detail_bg@2x.png
vendored
Normal file
|
After Width: | Height: | Size: 1.3 MiB |
22
QXLive/Other/Assets.xcassets/mine/爵位/nobility_detail_bottom_bg.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "nobility_detail_bottom_bg@2x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "nobility_detail_bottom_bg@3x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 111 KiB |
|
After Width: | Height: | Size: 257 KiB |
22
QXLive/Other/Assets.xcassets/mine/爵位/nobility_detail_open_btn.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "nobility_detail_open_btn@2x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "nobility_detail_open_btn@3x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 64 KiB |
22
QXLive/Other/Assets.xcassets/mine/爵位/nobility_help_icon.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "nobility_help_icon@2x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "nobility_help_icon@3x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
QXLive/Other/Assets.xcassets/mine/爵位/nobility_help_icon.imageset/nobility_help_icon@2x.png
vendored
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
QXLive/Other/Assets.xcassets/mine/爵位/nobility_help_icon.imageset/nobility_help_icon@3x.png
vendored
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
22
QXLive/Other/Assets.xcassets/mine/爵位/nobility_my_info_bg.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "nobility_my_info_bg@2x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "nobility_my_info_bg@3x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
QXLive/Other/Assets.xcassets/mine/爵位/nobility_my_info_bg.imageset/nobility_my_info_bg@2x.png
vendored
Normal file
|
After Width: | Height: | Size: 92 KiB |
BIN
QXLive/Other/Assets.xcassets/mine/爵位/nobility_my_info_bg.imageset/nobility_my_info_bg@3x.png
vendored
Normal file
|
After Width: | Height: | Size: 198 KiB |
22
QXLive/Other/Assets.xcassets/mine/爵位/nobility_nav_icon.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "nobility_nav_icon@2x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "nobility_nav_icon@3x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
QXLive/Other/Assets.xcassets/mine/爵位/nobility_nav_icon.imageset/nobility_nav_icon@2x.png
vendored
Normal file
|
After Width: | Height: | Size: 6.3 KiB |
BIN
QXLive/Other/Assets.xcassets/mine/爵位/nobility_nav_icon.imageset/nobility_nav_icon@3x.png
vendored
Normal file
|
After Width: | Height: | Size: 13 KiB |
22
QXLive/Other/Assets.xcassets/mine/爵位/nobility_open.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "nobility_open@2x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "nobility_open@3x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
QXLive/Other/Assets.xcassets/mine/爵位/nobility_open.imageset/nobility_open@2x.png
vendored
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
QXLive/Other/Assets.xcassets/mine/爵位/nobility_open.imageset/nobility_open@3x.png
vendored
Normal file
|
After Width: | Height: | Size: 56 KiB |
22
QXLive/Other/Assets.xcassets/mine/爵位/nobility_pay_result_successs.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "nobility_pay_result_successs@2x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "nobility_pay_result_successs@3x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 8.1 KiB |
|
After Width: | Height: | Size: 16 KiB |
22
QXLive/Other/Assets.xcassets/mine/爵位/nobility_power_header_bg.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "nobility_power_header_bg@2x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "nobility_power_header_bg@3x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 44 KiB |