This commit is contained in:
启星
2025-09-08 08:49:04 +08:00
parent ddeec09ea5
commit 349cab1499
290 changed files with 8627 additions and 760 deletions

View File

@@ -29,9 +29,12 @@
#import <ImSDK_Plus/ImSDK_Plus.h>
#import "QXMessageServices.h"
#import "QXMeetActivityDriftView.h" //
@interface QXTabbarController ()<UITabBarControllerDelegate,QXTabBarDelegate,UINavigationControllerDelegate,MQTTClientModelDelegate,V2TIMConversationListener>
@property(nonatomic,strong) QXTabBar *customTabBar;
@property(nonatomic,strong) QXHomeViewController *homeVC;
@property(nonatomic,strong) QXMeetActivityDriftView *meetView;
@property(nonatomic,assign) BOOL isAlreadyShowChirld;
@end
@@ -254,11 +257,18 @@
}
-(void)socketManager:(NSString *)socketManager receivedMessage:(NSDictionary *)message topic:(NSString *)topic{
QXGiftScrollModel *model = [QXGiftScrollModel yy_modelWithJSON:message[@"msg"][@"list"]];
[self.homeVC giftScrollViewShowWithModel:model];
[[QXGiftDriftView shareView] addGiftModel:model];
if ([topic isEqualToString:qx_room_topic]) {
QXGiftScrollModel *model = [QXGiftScrollModel yy_modelWithJSON:message[@"msg"][@"list"]];
[self.homeVC giftScrollViewShowWithModel:model];
[[QXGiftDriftView shareView] addGiftModel:model];
}else if([topic isEqualToString:qx_ac_topic]){
QXMeetActivityDriftModel *model = [QXMeetActivityDriftModel yy_modelWithJSON:message[@"msg"]];
[[QXMeetActivityDriftView shareView] addActivityModel:model];
}
}
//-(BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController{
// NSInteger index = [self.viewControllers indexOfObject:viewController];
// if (index == 4) {

View File

@@ -34,6 +34,7 @@ NS_ASSUME_NONNULL_BEGIN
@property (weak, nonatomic) IBOutlet UIView *numberBgView;
@property (weak, nonatomic) IBOutlet UIImageView *grayCoverView;
@property (weak, nonatomic) IBOutlet UIImageView *giftNumBgImageView;
@property (weak, nonatomic) IBOutlet UIImageView *activityImageView;
@property (strong, nonatomic) QXGiftModel *roomGiftModel;
@property (strong, nonatomic) QXUserGiftWallModel *giftWall;

View File

@@ -13,7 +13,7 @@
[super awakeFromNib];
// Initialization code
[self.selecteBtn setBackgroundImage:[UIImage imageWithColor:RGB16(0xEFF2F8)] forState:(UIControlStateNormal)];
[self.selecteBtn setBackgroundImage:[UIImage imageNamed:@"mine_dress_bg"] forState:(UIControlStateSelected)];
[self.selecteBtn setBackgroundImage:[UIImage imageNamed:@"room_sound_sel"] forState:(UIControlStateSelected)];
self.giftNumBgImageView.image = [[UIImage imageNamed:@"gift_number_bg"] imageByTintColor:QXConfig.themeColor];
}
@@ -26,7 +26,10 @@
self.cornHeight.constant = 10;
self.nameLabelHeight.constant = 10;
self.giftNameLabel.font = [UIFont systemFontOfSize:8];
self.giftNameLabel.textColor = RGB16(0xffffff);
self.cornBtn.titleLabel.font = [UIFont systemFontOfSize:8];
[self.cornBtn setTitleColor:RGB16(0x333333) forState:(UIControlStateNormal)];
self.giftNameLabel.textColor = RGB16(0x333333);
self.userHeaderView.hidden = YES;
}
break;
@@ -39,6 +42,8 @@
self.numberLabel.font = [UIFont systemFontOfSize:10];
self.cornBtn.titleLabel.font = [UIFont systemFontOfSize:14];
self.selecteBtn.selected = YES;
[self.cornBtn setTitleColor:RGB16(0x333333) forState:(UIControlStateNormal)];
self.giftNameLabel.textColor = RGB16(0x333333);
[self.cornBtn setImage:[UIImage imageNamed:@"mine_live_gift_corn"] forState:(UIControlStateNormal)];
self.userHeaderView.hidden = YES;
}
@@ -48,6 +53,8 @@
self.numberHeightConstraint.constant = 13;
self.cornHeight.constant = 18;
self.nameLabelHeight.constant = 18;
[self.cornBtn setTitleColor:RGB16(0xffffff) forState:(UIControlStateNormal)];
self.giftNameLabel.textColor = RGB16(0xffffff);
self.giftNameLabel.font = [UIFont systemFontOfSize:14];
self.cornBtn.titleLabel.font = [UIFont systemFontOfSize:14];
[self.cornBtn setImage:[UIImage imageNamed:@"mine_live_gift_corn"] forState:(UIControlStateNormal)];
@@ -76,7 +83,9 @@
-(void)setRoomGiftModel:(QXGiftModel *)roomGiftModel{
_roomGiftModel = roomGiftModel;
self.giftNameLabel.text = roomGiftModel.gift_name;
[self.gitfImageView sd_setImageWithURL:[NSURL URLWithString:roomGiftModel.base_image]];
NSString *encodedQuery = [roomGiftModel.base_image stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSURL *imageUrl = [NSURL URLWithString:encodedQuery];
[self.gitfImageView sd_setImageWithURL:imageUrl];
[self.cornBtn setTitle:[NSString stringWithFormat:@" %@",roomGiftModel.gift_price] forState:(UIControlStateNormal)];
if (roomGiftModel.num.intValue > 0) {
self.numberBgView.hidden = NO;
@@ -84,12 +93,38 @@
}else{
self.numberBgView.hidden = YES;
}
if (roomGiftModel.isSelected) {
[self.cornBtn setTitleColor:RGB16(0x333333) forState:(UIControlStateNormal)];
self.giftNameLabel.textColor = RGB16(0x333333);
}else{
[self.cornBtn setTitleColor:RGB16(0xffffff) forState:(UIControlStateNormal)];
self.giftNameLabel.textColor = RGB16(0xffffff);
}
if ([roomGiftModel.activities_id isEqualToString:@"5"]) {
self.activityImageView.hidden = NO;
if (roomGiftModel.gift_bag.intValue == 10) {
self.activityImageView.image = [UIImage imageNamed:@"a_gift_sky_icon"];
[self.selecteBtn setBackgroundImage:[UIImage imageNamed:@"a_gift_sky_bg"] forState:(UIControlStateNormal)];
}else if (roomGiftModel.gift_bag.intValue == 11) {
self.activityImageView.image = [UIImage imageNamed:@"a_gift_age_icon"];
[self.selecteBtn setBackgroundImage:[UIImage imageNamed:@"a_gift_age_bg"] forState:(UIControlStateNormal)];
}else if (roomGiftModel.gift_bag.intValue == 12) {
self.activityImageView.image = [UIImage imageNamed:@"a_gift_time_icon"];
[self.selecteBtn setBackgroundImage:[UIImage imageNamed:@"a_gift_time_bg"] forState:(UIControlStateNormal)];
}
}else{
self.activityImageView.hidden = YES;
[self.selecteBtn setBackgroundImage:[UIImage imageWithColor:RGB16A(0xE9E9E9, 0.2)] forState:(UIControlStateNormal)];
}
}
- (void)setGiftWall:(QXUserGiftWallModel *)giftWall{
_giftWall = giftWall;
self.giftNameLabel.text = giftWall.gift_name;
[self.gitfImageView sd_setImageWithURL:[NSURL URLWithString:giftWall.base_image]];
NSString *encodedQuery = [giftWall.base_image stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSURL *imageUrl = [NSURL URLWithString:encodedQuery];
[self.gitfImageView sd_setImageWithURL:imageUrl];
self.numberLabel.text = [NSString stringWithFormat:@"x%@",giftWall.total_count];
self.grayCoverView.backgroundColor = RGB16A(0xE9E9E9, 0.8);
if (giftWall.total_count.longLongValue == 0) {

View File

@@ -20,7 +20,7 @@
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="QMu-c3-HcP">
<rect key="frame" x="0.0" y="0.0" width="253" height="303"/>
<subviews>
<button opaque="NO" userInteractionEnabled="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="YN0-v8-SAo">
<button opaque="NO" userInteractionEnabled="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="YN0-v8-SAo">
<rect key="frame" x="0.0" y="0.0" width="253" height="303"/>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
</button>
@@ -89,6 +89,12 @@
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</imageView>
<imageView hidden="YES" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="R17-3r-nZl">
<rect key="frame" x="0.0" y="255.66666666666663" width="253" height="21"/>
<constraints>
<constraint firstAttribute="height" constant="21" id="qst-iu-9r5"/>
</constraints>
</imageView>
</subviews>
<constraints>
<constraint firstAttribute="bottom" secondItem="YN0-v8-SAo" secondAttribute="bottom" id="0UV-vT-lSa"/>
@@ -97,6 +103,7 @@
<constraint firstItem="3d1-U7-04n" firstAttribute="leading" secondItem="1oa-XB-z2H" secondAttribute="leading" id="8De-gE-33I"/>
<constraint firstItem="rHb-Od-M4a" firstAttribute="top" secondItem="1oa-XB-z2H" secondAttribute="bottom" id="8dO-90-EcR"/>
<constraint firstItem="fxQ-G1-4U5" firstAttribute="top" secondItem="QMu-c3-HcP" secondAttribute="top" constant="4" id="AaP-Bh-HJO"/>
<constraint firstAttribute="trailing" secondItem="R17-3r-nZl" secondAttribute="trailing" id="CD1-15-DjJ"/>
<constraint firstAttribute="bottom" secondItem="niZ-Xc-95T" secondAttribute="bottom" id="Hcq-Ev-Yt1"/>
<constraint firstAttribute="trailing" secondItem="1oa-XB-z2H" secondAttribute="trailing" constant="5" id="IeP-It-gIz"/>
<constraint firstItem="YN0-v8-SAo" firstAttribute="top" secondItem="QMu-c3-HcP" secondAttribute="top" id="MM9-lD-eb5"/>
@@ -104,6 +111,8 @@
<constraint firstItem="anN-iX-rGm" firstAttribute="top" secondItem="QMu-c3-HcP" secondAttribute="top" id="QVB-1T-j7f"/>
<constraint firstAttribute="trailing" secondItem="YN0-v8-SAo" secondAttribute="trailing" id="TM5-gQ-Sjd"/>
<constraint firstItem="niZ-Xc-95T" firstAttribute="top" secondItem="QMu-c3-HcP" secondAttribute="top" id="Vx1-do-zNx"/>
<constraint firstItem="R17-3r-nZl" firstAttribute="centerY" secondItem="rHb-Od-M4a" secondAttribute="centerY" id="Ytt-7W-SM4"/>
<constraint firstItem="R17-3r-nZl" firstAttribute="leading" secondItem="QMu-c3-HcP" secondAttribute="leading" id="aSk-9n-6Ln"/>
<constraint firstAttribute="trailing" secondItem="anN-iX-rGm" secondAttribute="trailing" id="gMa-Ee-Va2"/>
<constraint firstItem="YN0-v8-SAo" firstAttribute="leading" secondItem="QMu-c3-HcP" secondAttribute="leading" id="gwM-TL-16q"/>
<constraint firstItem="rHb-Od-M4a" firstAttribute="trailing" secondItem="1oa-XB-z2H" secondAttribute="trailing" id="j58-9C-4jp"/>
@@ -132,6 +141,7 @@
</constraints>
<size key="customSize" width="253" height="303"/>
<connections>
<outlet property="activityImageView" destination="R17-3r-nZl" id="bjL-Xi-hJI"/>
<outlet property="cornBtn" destination="3d1-U7-04n" id="PLQ-JR-U9b"/>
<outlet property="cornHeight" destination="svX-z8-2v4" id="ocG-gq-4Wo"/>
<outlet property="giftNameLabel" destination="rHb-Od-M4a" id="nik-Bp-Ce4"/>
@@ -151,7 +161,7 @@
</objects>
<resources>
<image name="gift_corn" width="6" height="6"/>
<image name="gift_number_bg" width="22.666666030883789" height="8.6666669845581055"/>
<image name="user_header_placehoulder" width="40" height="40"/>
<image name="gift_number_bg" width="35" height="13"/>
<image name="user_header_placehoulder" width="60" height="60"/>
</resources>
</document>

View File

@@ -0,0 +1,33 @@
//
// QXMeetActivityDriftView.h
// QXLive
//
// Created by 启星 on 2025/8/29.
//
#import <UIKit/UIKit.h>
typedef NS_ENUM(NSInteger) {
/// 即将开始
QXMeetActivityDriftTypeWillStart = 1,
/// 已经开始
QXMeetActivityDriftTypeStart = 2,
/// 落入背包
QXMeetActivityDriftTypeFinished = 3,
}QXMeetActivityDriftType;
NS_ASSUME_NONNULL_BEGIN
@class QXMeetActivityDriftModel;
@interface QXMeetActivityDriftView : UIView
@property (nonatomic,strong)UIImageView *bgImageView;
@property (nonatomic,strong)UILabel *titleLabel;
@property (nonatomic,strong)NSMutableArray *dataArray;
@property (nonatomic,strong)QXMeetActivityDriftModel *model;
-(void)addActivityModel:(QXMeetActivityDriftModel*)model;
+(instancetype)shareView;
@end
@interface QXMeetActivityDriftModel : NSObject
@property (nonatomic,strong)NSString *roomId;
@property (nonatomic,strong)NSString *text;
@property (nonatomic,assign)NSInteger from_type;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,129 @@
//
// QXMeetActivityDriftView.m
// QXLive
//
// Created by on 2025/8/29.
//
#import "QXMeetActivityDriftView.h"
@interface QXMeetActivityDriftView()
@property (nonatomic,assign)BOOL isPlaying;
@end
@implementation QXMeetActivityDriftView
- (instancetype)init
{
self = [super init];
if (self) {
self.frame = CGRectMake(SCREEN_WIDTH, 0, ScaleWidth(358), ScaleWidth(136));
[self initSubviews];
}
return self;
}
+(instancetype)shareView{
static QXMeetActivityDriftView *manager = nil;
static dispatch_once_t predicate;
dispatch_once(&predicate, ^{
manager = [[QXMeetActivityDriftView alloc] init];
});
return manager;
}
-(void)initSubviews{
self.bgImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"ac_meet_start_pop_bg"]];
[self addSubview:self.bgImageView];
[self.bgImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(self);
}];
self.titleLabel = [[UILabel alloc] init];
self.titleLabel.font = [UIFont systemFontOfSize:12];
self.titleLabel.textColor = RGB16(0xFFFFFF);
[self addSubview:self.titleLabel];;
[self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(self.bgImageView).offset(15);
make.centerY.equalTo(self.bgImageView);
}];
self.userInteractionEnabled = YES;
MJWeakSelf
[self addTapBlock:^(id _Nonnull obj) {
if ([weakSelf.model.roomId isExist]) {
[[QXGlobal shareGlobal] joinRoomWithRoomId:weakSelf.model.roomId isRejoin:NO navagationController:weakSelf.viewController.navigationController];
}
}];
}
-(void)addActivityModel:(QXMeetActivityDriftModel *)model{
[self.dataArray addObject:model];
[self giftAction];
}
-(void)giftAction{
if (self.isPlaying) {
return;
}
MJWeakSelf
[QXMeetActivityDriftView shareView].isPlaying = YES;
[QXMeetActivityDriftView shareView].model = [QXMeetActivityDriftView shareView].dataArray.firstObject;
[KEYWINDOW addSubview:[QXMeetActivityDriftView shareView]];
[UIView animateWithDuration:1.5 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{
[QXMeetActivityDriftView shareView].x = (SCREEN_WIDTH-ScaleWidth(316))/2;
} completion:^(BOOL finished) {
[weakSelf performSelector:@selector(dissmissAnimate) afterDelay:5];
}];
}
-(void)dissmissAnimate{
[UIView animateWithDuration:2 delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^{
[QXMeetActivityDriftView shareView].x = -SCREEN_WIDTH;
} completion:^(BOOL finished) {
[QXMeetActivityDriftView shareView].x = SCREEN_WIDTH;
[[QXMeetActivityDriftView shareView] removeFromSuperview];
[[QXMeetActivityDriftView shareView].dataArray removeFirstObject];
[QXMeetActivityDriftView shareView].isPlaying = NO;
if ([QXMeetActivityDriftView shareView].dataArray.count>0) {
[[QXMeetActivityDriftView shareView] giftAction];
}
}];
}
-(void)setModel:(QXMeetActivityDriftModel *)model{
_model = model;
self.titleLabel.text = model.text;
switch (model.from_type) {
case QXMeetActivityDriftTypeWillStart:{
self.bgImageView.image = [UIImage imageNamed:@"ac_meet_will_pop_bg"];
}
break;
case QXMeetActivityDriftTypeStart:{
self.bgImageView.image = [UIImage imageNamed:@"ac_meet_start_pop_bg"];
}
break;
case QXMeetActivityDriftTypeFinished:{
self.bgImageView.image = [UIImage imageNamed:@"ac_meet_finished_pop_bg"];
}
break;
default:
break;
}
}
-(NSMutableArray *)dataArray{
if (!_dataArray) {
_dataArray = [NSMutableArray array];
}
return _dataArray;
}
@end
@implementation QXMeetActivityDriftModel
@end