feat: 完成礼物连击功能 | 更换金币资源图片

This commit is contained in:
eggmanQQQ
2024-09-10 15:27:47 +08:00
parent e45176485d
commit f668f43a42
93 changed files with 1059 additions and 288 deletions

View File

@@ -510,6 +510,7 @@
545831A62C2C085C00364026 /* ArabMicroView.m in Sources */ = {isa = PBXBuildFile; fileRef = 545831A52C2C085C00364026 /* ArabMicroView.m */; };
545888332C1AFFB500897585 /* XPRoomPKPanelView.m in Sources */ = {isa = PBXBuildFile; fileRef = 545888322C1AFFB500897585 /* XPRoomPKPanelView.m */; };
545888362C1C306B00897585 /* XPRoomPKPaneAvatarView.m in Sources */ = {isa = PBXBuildFile; fileRef = 545888352C1C306B00897585 /* XPRoomPKPaneAvatarView.m */; };
5468995D2C8AFE4C0049136A /* GiftComboFlagView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5468995C2C8AFE4C0049136A /* GiftComboFlagView.m */; };
547853A12C258F2A00F45E60 /* XPMineUserViewHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 547853A02C258F2A00F45E60 /* XPMineUserViewHeader.m */; };
548E01C52C3F78360071C83D /* FeedBackViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 548E01C22C3F78360071C83D /* FeedBackViewController.xib */; };
548E01C62C3F78360071C83D /* FeedBackViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 548E01C42C3F78360071C83D /* FeedBackViewController.m */; };
@@ -528,6 +529,8 @@
54C9A11F2C3DA08000C6D970 /* XPMineGamePartnerInfoModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 54C9A11E2C3DA08000C6D970 /* XPMineGamePartnerInfoModel.m */; };
54C9A1222C3E6C3200C6D970 /* MessageGameOrderModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 54C9A1212C3E6C3200C6D970 /* MessageGameOrderModel.m */; };
54C9A1252C3E74AE00C6D970 /* MessageGameOrderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 54C9A1242C3E74AE00C6D970 /* MessageGameOrderView.m */; };
54F179072C8EA48C00CB5219 /* Combo_Boom.svga in Resources */ = {isa = PBXBuildFile; fileRef = 54F179062C8EA48C00CB5219 /* Combo_Boom.svga */; };
54F1790A2C8EDDF400CB5219 /* CountdownRingView.m in Sources */ = {isa = PBXBuildFile; fileRef = 54F179092C8EDDF400CB5219 /* CountdownRingView.m */; };
54F469352C29711400A83655 /* XPMomentUserDataViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 54F469342C29711400A83655 /* XPMomentUserDataViewController.m */; };
54F469382C29C3B400A83655 /* XPMineAlbumTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 54F469372C29C3B400A83655 /* XPMineAlbumTableViewCell.m */; };
54F4693B2C2A984D00A83655 /* MedalModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 54F4693A2C2A984D00A83655 /* MedalModel.m */; };
@@ -2550,6 +2553,8 @@
545888322C1AFFB500897585 /* XPRoomPKPanelView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPRoomPKPanelView.m; sourceTree = "<group>"; };
545888342C1C306B00897585 /* XPRoomPKPaneAvatarView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPRoomPKPaneAvatarView.h; sourceTree = "<group>"; };
545888352C1C306B00897585 /* XPRoomPKPaneAvatarView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPRoomPKPaneAvatarView.m; sourceTree = "<group>"; };
5468995B2C8AFE4C0049136A /* GiftComboFlagView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GiftComboFlagView.h; sourceTree = "<group>"; };
5468995C2C8AFE4C0049136A /* GiftComboFlagView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = GiftComboFlagView.m; sourceTree = "<group>"; };
5478539F2C258F2A00F45E60 /* XPMineUserViewHeader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPMineUserViewHeader.h; sourceTree = "<group>"; };
547853A02C258F2A00F45E60 /* XPMineUserViewHeader.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPMineUserViewHeader.m; sourceTree = "<group>"; };
548E01C22C3F78360071C83D /* FeedBackViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = FeedBackViewController.xib; sourceTree = "<group>"; };
@@ -2586,6 +2591,9 @@
54C9A1212C3E6C3200C6D970 /* MessageGameOrderModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MessageGameOrderModel.m; sourceTree = "<group>"; };
54C9A1232C3E74AE00C6D970 /* MessageGameOrderView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MessageGameOrderView.h; sourceTree = "<group>"; };
54C9A1242C3E74AE00C6D970 /* MessageGameOrderView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MessageGameOrderView.m; sourceTree = "<group>"; };
54F179062C8EA48C00CB5219 /* Combo_Boom.svga */ = {isa = PBXFileReference; lastKnownFileType = file; path = Combo_Boom.svga; sourceTree = "<group>"; };
54F179082C8EDDF400CB5219 /* CountdownRingView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CountdownRingView.h; sourceTree = "<group>"; };
54F179092C8EDDF400CB5219 /* CountdownRingView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CountdownRingView.m; sourceTree = "<group>"; };
54F469332C29711400A83655 /* XPMomentUserDataViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPMomentUserDataViewController.h; sourceTree = "<group>"; };
54F469342C29711400A83655 /* XPMomentUserDataViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPMomentUserDataViewController.m; sourceTree = "<group>"; };
54F469362C29C3B400A83655 /* XPMineAlbumTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPMineAlbumTableViewCell.h; sourceTree = "<group>"; };
@@ -9277,6 +9285,10 @@
E8D4DE432940462C00EC788D /* XPGiftTwelveStarBroadcastView.m */,
540EC1CE2C89925F00F3BF0D /* GiftComboView.h */,
540EC1CF2C89925F00F3BF0D /* GiftComboView.m */,
54F179082C8EDDF400CB5219 /* CountdownRingView.h */,
54F179092C8EDDF400CB5219 /* CountdownRingView.m */,
5468995B2C8AFE4C0049136A /* GiftComboFlagView.h */,
5468995C2C8AFE4C0049136A /* GiftComboFlagView.m */,
);
path = View;
sourceTree = "<group>";
@@ -9900,6 +9912,7 @@
E8A1E45C276220B100B294CA /* Resources */ = {
isa = PBXGroup;
children = (
54F179062C8EA48C00CB5219 /* Combo_Boom.svga */,
23EE96F12B9FF6BE00475D69 /* pi_crazy_zoo.svga */,
237701182BD6143700D661F1 /* pi_happy_egg_smash.svga */,
23A03F2C2B4408CD0094227A /* pi_room_lucky_gift.svga */,
@@ -11218,6 +11231,7 @@
E80EC8A228ACD84100D133C5 /* emoji_09@2x.png in Resources */,
E80EC89228ACD84000D133C5 /* emoji_87@2x.png in Resources */,
E80EC81828ACD84000D133C5 /* emoji_149@2x.png in Resources */,
54F179072C8EA48C00CB5219 /* Combo_Boom.svga in Resources */,
E80EC83928ACD84000D133C5 /* emoji_100@2x.png in Resources */,
E80EC83028ACD84000D133C5 /* emoji_12@2x.png in Resources */,
E80EC8AE28ACD84100D133C5 /* emoji_131@2x.png in Resources */,
@@ -11846,6 +11860,7 @@
2331C1B42A60F32D00E1D940 /* XPCandyTreeRankTableViewCell.m in Sources */,
9B85B6DA279FDC5200A0A1AC /* XPUserCardSkillCollectionViewCell.m in Sources */,
E85E7B0D2A4EB0D200B6D00A /* GuildSuperAdminInfoModel.m in Sources */,
54F1790A2C8EDDF400CB5219 /* CountdownRingView.m in Sources */,
189DD68426E1FDBB00AB55B1 /* XNDJTDDLoadingTool.m in Sources */,
9B1B72AF280031F8003FACE9 /* XPAnchorPKSelectRoomView.m in Sources */,
5412E0FD2C52512100FDD668 /* RoomBottomEntranceModel.m in Sources */,
@@ -12415,6 +12430,7 @@
E88B5CC126FB407B00DA9178 /* XPMineUserInfoViewController.m in Sources */,
2331C1AC2A60F32D00E1D940 /* CandyTreeRecordModel.m in Sources */,
540EC1D32C89998500F3BF0D /* GiftComboManager.m in Sources */,
5468995D2C8AFE4C0049136A /* GiftComboFlagView.m in Sources */,
E81E09CF290F750800A1F410 /* AdvertiseModel.m in Sources */,
2305F3472AD94E9D00AD403C /* XPMaskManagerCell.m in Sources */,
E852D74428633A08001465ED /* MonentsCommentModel.m in Sources */,

View File

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

View File

@@ -5,11 +5,11 @@
"scale" : "1x"
},
{
"filename" : "luck_gift_flag@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "金币 1@3x.png",
"idiom" : "universal",
"scale" : "3x"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

View File

@@ -9,7 +9,7 @@
"scale" : "2x"
},
{
"filename" : "mine_game_gold_icon@3x.png",
"filename" : "luck_gift_gold@3x.png",
"idiom" : "universal",
"scale" : "3x"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

View File

@@ -9,7 +9,7 @@
"scale" : "2x"
},
{
"filename" : "ms_room_message_chat_hall_head_coin@3x.png",
"filename" : "luck_gift_pruple@3x.png",
"idiom" : "universal",
"scale" : "3x"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 725 KiB

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.3 KiB

View File

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

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

View File

@@ -9,7 +9,7 @@
"scale" : "2x"
},
{
"filename" : "5@3x.png",
"filename" : "飘窗bg@3x.png",
"idiom" : "universal",
"scale" : "3x"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

View File

@@ -126,6 +126,10 @@ typedef NS_ENUM(NSUInteger, CustomMessageType) {
CustomMessageType_Chat_Room_Game = 109,
///家族新协议
CustomMessageType_New_Hall = 110,
///房间流水
CustomMessageType_MoneyFlow = 111,
///游戏陪玩开黑
CustomMessageType_Game_Order = 112,
};
@@ -691,12 +695,17 @@ typedef NS_ENUM(NSUInteger, CustomMessageTypeNewHall) {
};
///开黑邀请
//first = 103,
typedef NS_ENUM(NSUInteger, CustomMessageTypeGameOrder) {
///所有房间
Custom_Message_Sub_Game_order = 1121,
};
/// 房间流水
typedef NS_ENUM(NSUInteger, CustomMessageTypeMoneyFlow) {
///所有房间
Custom_Message_Sub_Money_Flow = 1110,
};
@interface AttachmentModel : PIBaseModel<NIMCustomAttachment>
@property (nonatomic,assign) int first;
@property (nonatomic,assign) int second;

View File

@@ -46,7 +46,7 @@
- (void)updatePriceContent {
NSTextAttachment *coinAttachment = [[NSTextAttachment alloc] init];
coinAttachment.image = kImage(@"mine_game_gold_icon");
coinAttachment.image = kImage(@"moli_money_icon");
coinAttachment.bounds = CGRectMake(0, -0.5, 9, 9);
NSAttributedString *coin = [NSAttributedString attributedStringWithAttachment:coinAttachment];
NSAttributedString *price = [[NSAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@ ", @(self.cellModel.price)]
@@ -104,7 +104,7 @@
priceStack.distribution = UIStackViewDistributionFill;
priceStack.alignment = UIStackViewAlignmentCenter;
UIImageView *coinIcon = [[UIImageView alloc] initWithImage:kImage(@"mine_game_gold_icon")];
UIImageView *coinIcon = [[UIImageView alloc] initWithImage:kImage(@"moli_money_icon")];
coinIcon.frame = CGRectMake(0, 0, 12, 12);
[priceStack addArrangedSubview:self.priceLabel];
[priceStack addArrangedSubview:coinIcon];

View File

@@ -73,7 +73,7 @@
- (void)updateBalanceContent {
NSTextAttachment *coinAttachment = [[NSTextAttachment alloc] init];
coinAttachment.image = kImage(@"mine_game_gold_icon");
coinAttachment.image = kImage(@"moli_money_icon");
coinAttachment.bounds = CGRectMake(2, -0.5, 10, 10);
NSAttributedString *coin = [NSAttributedString attributedStringWithAttachment:coinAttachment];
NSAttributedString *price = [[NSAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@%ld ", YMLocalizedString(@"GameOrderContent_21"),(long)self.currentCoin]
@@ -166,7 +166,7 @@
priceStack.distribution = UIStackViewDistributionFill;
priceStack.alignment = UIStackViewAlignmentCenter;
UIImageView *coinIcon = [[UIImageView alloc] initWithImage:kImage(@"mine_game_gold_icon")];
UIImageView *coinIcon = [[UIImageView alloc] initWithImage:kImage(@"moli_money_icon")];
coinIcon.frame = CGRectMake(0, 0, 12, 12);
[priceStack addArrangedSubview:self.priceLabel];
[priceStack addArrangedSubview:coinIcon];

View File

@@ -103,7 +103,7 @@
_giftNumberLabel.text = [NSString stringWithFormat:@"X%ld", _giftInfo.reciveCount];
NSMutableAttributedString *textAtt = [[NSMutableAttributedString alloc]initWithString:[NSString stringWithFormat:@" %ld",_giftInfo.giftPrice] attributes:@{NSForegroundColorAttributeName:UIColorFromRGB(0x6D6B89)}];
NSTextAttachment * attachment = [[NSTextAttachment alloc] init];
UIImage *iconImage = [UIImage imageNamed:@"exchange_gold_icon"];;
UIImage *iconImage = [UIImage imageNamed:@"moli_money_icon"];;
attachment.bounds = CGRectMake(0, roundf(_priceView.font.capHeight - iconImage.size.height)/2.f, iconImage.size.width, iconImage.size.height);
attachment.image = iconImage;
[textAtt insertAttributedString:[NSMutableAttributedString attributedStringWithAttachment:attachment] atIndex:0];

View File

@@ -105,7 +105,7 @@
if (!_coinImageView) {
_coinImageView = [[UIImageView alloc] init];
_coinImageView.userInteractionEnabled = YES;
_coinImageView.image = [UIImage imageNamed:@"exchange_gold_icon"];
_coinImageView.image = [UIImage imageNamed:@"moli_money_icon"];
}
return _coinImageView;
}

View File

@@ -57,7 +57,7 @@
- (void)updatePriceContent {
NSTextAttachment *coinAttachment = [[NSTextAttachment alloc] init];
coinAttachment.image = kImage(@"mine_game_gold_icon");
coinAttachment.image = kImage(@"moli_money_icon");
coinAttachment.bounds = CGRectMake(4, 0.5, 9, 9);
NSAttributedString *coin = [NSAttributedString attributedStringWithAttachment:coinAttachment];
NSAttributedString *price = [[NSAttributedString alloc] initWithString:@(self.model.amount).stringValue
@@ -148,7 +148,7 @@
// [priceStack addArrangedSubview:[self titleLabel:YMLocalizedString(@"GameOrderContent_12")]];
// [priceStack addArrangedSubview:self.gamePriceLabel];
UIImageView *coinIcon = [[UIImageView alloc] initWithImage:kImage(@"mine_game_gold_icon")];
UIImageView *coinIcon = [[UIImageView alloc] initWithImage:kImage(@"moli_money_icon")];
coinIcon.contentMode = UIViewContentModeScaleAspectFit;
[coinIcon setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal];
[coinIcon setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal];

View File

@@ -207,7 +207,7 @@
- (UIImageView *)diamondImageView {
if (!_diamondImageView) {
_diamondImageView = [[UIImageView alloc] init];
_diamondImageView.image = [UIImage imageNamed:@"exchange_gold_icon"];
_diamondImageView.image = [UIImage imageNamed:@"moli_money_icon"];
}
return _diamondImageView;
}

View File

@@ -188,7 +188,7 @@
- (UIImageView *)diamondImageView {
if (!_diamondImageView) {
_diamondImageView = [[UIImageView alloc] init];
_diamondImageView.image = [UIImage imageNamed:@"exchange_gold_icon"];
_diamondImageView.image = [UIImage imageNamed:@"moli_money_icon"];
}
return _diamondImageView;
}

View File

@@ -366,7 +366,7 @@
- (UIImageView *)diamondImageView {
if (!_diamondImageView) {
_diamondImageView = [[UIImageView alloc] init];
_diamondImageView.image = [UIImage imageNamed:@"exchange_gold_icon"];
_diamondImageView.image = [UIImage imageNamed:@"moli_money_icon"];
}
return _diamondImageView;
}

View File

@@ -370,7 +370,7 @@
-(UIImageView *)numIcon{
if (!_numIcon){
_numIcon = [UIImageView new];
_numIcon.image = [UIImage imageNamed:@"exchange_gold_icon"];
_numIcon.image = [UIImage imageNamed:@"moli_money_icon"];
}
return _numIcon;
}
@@ -408,7 +408,7 @@
-(UIImageView *)myDiamondIcon{
if (!_myDiamondIcon){
_myDiamondIcon = [UIImageView new];
_myDiamondIcon.image = [UIImage imageNamed:@"exchange_gold_icon"];
_myDiamondIcon.image = [UIImage imageNamed:@"moli_money_icon"];
}
return _myDiamondIcon;
}

View File

@@ -121,7 +121,7 @@
if(_type == 2){
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc]initWithString:@(_inputDiamonds).stringValue attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:kGetScaleWidth(30) weight:UIFontWeightMedium],NSForegroundColorAttributeName:[DJDKMIMOMColor inputTextColor]}];
NSTextAttachment * attachment = [[NSTextAttachment alloc] init];
UIImage *iconImage = [UIImage imageNamed:@"exchange_gold_icon"];;
UIImage *iconImage = [UIImage imageNamed:@"moli_money_icon"];;
attachment.bounds = CGRectMake(0, roundf(self.numView.font.capHeight - 24)/2.f, 24, 24);
attachment.image =iconImage;
NSAttributedString * starAttribute = [NSMutableAttributedString attributedStringWithAttachment:(NSTextAttachment *)attachment];
@@ -134,7 +134,7 @@
_titleView.text = [NSString stringWithFormat:YMLocalizedString(@"XPMineConfirmGiveDiamondView1"),_giveDiamondModel.targetNick];
NSTextAttachment * attachment = [[NSTextAttachment alloc] init];
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc]initWithString:@(self.inputDiamonds).stringValue attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:kGetScaleWidth(30) weight:UIFontWeightMedium],NSForegroundColorAttributeName:[DJDKMIMOMColor inputTextColor]}];
UIImage *iconImage = [UIImage imageNamed:@"exchange_gold_icon"];;
UIImage *iconImage = [UIImage imageNamed:@"moli_money_icon"];;
attachment.bounds = CGRectMake(0, roundf(self.numView.font.capHeight - 24)/2.f, 24, 24);
attachment.image =iconImage;

View File

@@ -231,7 +231,7 @@
_model = model;
if(self.type == IncomeRecord_Gold){
_titleNumView.text = [NSString stringWithFormat:YMLocalizedString(@"XPExchangeDiamondsItemView0"),@(_model.golds)];
UIImage *image = [UIImage imageNamed:@"ms_exchange_coin_icon"];
UIImage *image = [UIImage imageNamed:@"moli_money_icon"];
[_iconView setImage:image forState:UIControlStateNormal];
}else{
@@ -309,7 +309,7 @@
}
-(UIButton *)iconView{
if (!_iconView){
UIImage *image = self.type == IncomeRecord_Gold ? [UIImage imageNamed:@"ms_exchange_coin_icon"] : [UIImage imageNamed:@"exchange_new_diamonds_icon"];
UIImage *image = self.type == IncomeRecord_Gold ? [UIImage imageNamed:@"moli_money_icon"] : [UIImage imageNamed:@"exchange_new_diamonds_icon"];
_iconView = [UIButton buttonWithType:UIButtonTypeCustom];
[_iconView setImage:image forState:UIControlStateNormal];
}

View File

@@ -140,7 +140,7 @@
- (UIImageView *)coinView{
if(!_coinView){
_coinView = [UIImageView new];
_coinView.image = self.type == IncomeRecord_Gold ? [UIImage imageNamed:@"ms_income_record_coin"]:[UIImage imageNamed:@"ms_income_recorddiamond"];
_coinView.image = self.type == IncomeRecord_Gold ? [UIImage imageNamed:@"moli_money_icon"]:[UIImage imageNamed:@"ms_income_recorddiamond"];
}
return _coinView;
}

View File

@@ -90,7 +90,7 @@
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
XPNobleCenterPayCell *cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPNobleCenterPayCell class]) forIndexPath:indexPath];
cell.isChoose = indexPath.row == self.path.row;
cell.iconImage = indexPath.row == 0 ? kImage( @"exchange_gold_icon") : kImage(@"noble_open_btn");
cell.iconImage = indexPath.row == 0 ? kImage( @"moli_money_icon") : kImage(@"noble_open_btn");
NSString *num = [NSString stringWithFormat:@"%@%@",self.diamonds,YMLocalizedString(@"XPNobleCenterPayView1")];
NSString *text = indexPath.row == 0 ? [NSString stringWithFormat:@"%@%@",self.listData[indexPath.row],num] : self.listData[indexPath.row];

View File

@@ -639,7 +639,7 @@
make.width.mas_equalTo(kGetScaleWidth(146));
}];
UIImageView *coin = [[UIImageView alloc] initWithImage:kImage(@"vip_center_purchase_coin")];
UIImageView *coin = [[UIImageView alloc] initWithImage:kImage(@"moli_money_icon")];
[_purchaseContainer addSubview:coin];
[coin mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(10);

View File

@@ -110,7 +110,7 @@
if (!_coinImageView) {
_coinImageView = [[UIImageView alloc] init];
_coinImageView.userInteractionEnabled = YES;
_coinImageView.image = [UIImage imageNamed:@"exchange_gold_icon"];
_coinImageView.image = [UIImage imageNamed:@"moli_money_icon"];
}
return _coinImageView;
}

View File

@@ -65,7 +65,9 @@
#import "PIRoomGiftBroadcastWindow.h"
#import "PIUniversalBannerModel.h"
#import "PIUniversalBannerView.h"
#import "GiftComboFlagView.h"
#import "GiftComboManager.h"
@interface XPRoomAnimationView ()<SVGAPlayerDelegate,NIMBroadcastManagerDelegate, XPRoomGiftBroadcastViewDelegate, HWDMP4PlayDelegate, XPRoomLuckyBigPrizeViewDelegate, XPRoomGraffitiGiftAnimationViewDelegate, XPRoomStarKitchenBannerViewDelegate,PAGViewListener,XPRoomAnchorRankBannerViewDelegate,PIRoomGiftBroadcastWindowDelegate,PIUniversalBannerViewDelegate>
///
@@ -268,7 +270,7 @@
if (attachment.first == CustomMessageType_Gift) {
GiftReceiveInfoModel * receiveInfo = [GiftReceiveInfoModel modelWithJSON:attachment.data];
receiveInfo.isLuckyBagGift = attachment.second == Custom_Message_Sub_Gift_LuckySend;
receiveInfo.isBatch = YES;
receiveInfo.isBatch = (attachment.second == Custom_Message_Sub_AllBatchSend || attachment.second == Custom_Message_Sub_AllBatchMicroLuckySend);
[self receiveGiftHandleSendGiftAnimation:attachment];
if (receiveInfo.isLuckyBagGift) {
if (!self.delegate.getRoomInfo.hasAnimationEffect) {return;}
@@ -292,7 +294,7 @@
GiftReceiveInfoModel * receiveInfo = [GiftReceiveInfoModel modelWithJSON:attachment.data];
receiveInfo.isLuckyBagGift = (attachment.second == Custom_Message_Sub_AllMicroLuckySend || attachment.second == Custom_Message_Sub_AllBatchMicroLuckySend);
receiveInfo.isBatch = (attachment.second == Custom_Message_Sub_AllBatchSend || attachment.second == Custom_Message_Sub_AllBatchMicroLuckySend);
[self receiveGiftHandleSendGiftAnimation:attachment];
[self receiveGiftHandleSendGiftAnimation:attachment];
if (receiveInfo.isLuckyBagGift) {
if (!self.delegate.getRoomInfo.hasAnimationEffect) {return;}
if (receiveInfo.viewUrl.length > 0) {
@@ -303,7 +305,6 @@
if (luckyGiftSvgaUrl.absoluteString.length > 0) {
[self playLuckyGiftEffect:luckyGiftSvgaUrl];
}
}
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self receiveGift:receiveInfo];
@@ -1500,8 +1501,18 @@
}
endPoint = [self getGiftAnimationPoint:userId isEnd:YES];
dispatch_time_t timer = dispatch_time(DISPATCH_TIME_NOW, 0.5 * NSEC_PER_SEC);
BOOL isCombing = [[GiftComboManager sharedManager] isGiftCombing] &&
[sendUid isEqualToString:[AccountInfoStorage instance].getUid];
if (isCombing) {
timer = dispatch_time(DISPATCH_TIME_NOW, 0.25 * NSEC_PER_SEC);
}
dispatch_after(timer, dispatch_get_main_queue(), ^{
[self beginGiftAnimation:giftInfo.giftUrl startPoint:starPoint endPoint:endPoint];
[self beginGiftAnimation:giftInfo.giftUrl
startPoint:starPoint
endPoint:endPoint
isGiftCombing:isCombing];
});
}
}
@@ -1517,10 +1528,20 @@
point = CGPointMake([UIScreen mainScreen].bounds.size.width / 2, 44 + kSafeAreaTopHeight);
}
}
if ([[GiftComboManager sharedManager] isGiftCombing] &&
[uid isEqualToString:[AccountInfoStorage instance].getUid] &&
isEnd == false) {
point = CGPointMake([UIScreen mainScreen].bounds.size.width - 60, [UIScreen mainScreen].bounds.size.height - kSafeAreaTopHeight - 60);
}
return point;
}
- (void)beginGiftAnimation:(NSString *)giftUrl startPoint:(CGPoint)startPoint endPoint:(CGPoint)endPoint {
- (void)beginGiftAnimation:(NSString *)giftUrl
startPoint:(CGPoint)startPoint
endPoint:(CGPoint)endPoint
isGiftCombing:(BOOL)isGiftCombing {
NetImageView * giftImageView = [self.giftReuseArray anyObject];
if (giftImageView == nil) {
giftImageView = [[NetImageView alloc]initWithFrame:CGRectMake(0, 0 , 55, 55)];
@@ -1536,14 +1557,61 @@
giftImageView.imageUrl = giftUrl;
[self.lowLevelView addSubview:giftImageView];
CAAnimationGroup *group = [self createGiftAnimationStartPoint:startPoint endPoint:endPoint];
if (isGiftCombing) {
group = [self createGiftComboAnimationStartPoint:startPoint endPoint:endPoint];
}
// startPoint
giftImageView.layer.position = startPoint;
[giftImageView.layer addAnimation:group forKey:@"giftDisplayViewAnimation"];
[self performSelector:@selector(aniationDidFinish:) withObject:giftImageView afterDelay:(3.2+0.25)];
}
- (CAAnimationGroup *)createGiftComboAnimationStartPoint:(CGPoint)startPoint
endPoint:(CGPoint)endPoint {
// 1: 0.4
CAKeyframeAnimation *scaleAnimation1 = [CAKeyframeAnimation animationWithKeyPath:@"transform.scale"];
scaleAnimation1.duration = 0.1;
scaleAnimation1.values = @[@1.0, @0.4];
scaleAnimation1.repeatCount = 1;
scaleAnimation1.calculationMode = kCAAnimationCubic;
scaleAnimation1.removedOnCompletion = NO;
scaleAnimation1.fillMode = kCAFillModeForwards;
// : 0.5
CAKeyframeAnimation *positionAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
positionAnimation.duration = 0.5;
positionAnimation.beginTime = 0.1; //
positionAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
positionAnimation.values = @[[NSValue valueWithCGPoint:startPoint], [NSValue valueWithCGPoint:endPoint]];
positionAnimation.repeatCount = 1;
positionAnimation.removedOnCompletion = NO;
positionAnimation.fillMode = kCAFillModeForwards;
// 2: 1.2
CAKeyframeAnimation *scaleAnimation2 = [CAKeyframeAnimation animationWithKeyPath:@"transform.scale"];
scaleAnimation2.duration = 0.5;
scaleAnimation2.beginTime = 0.1; //
scaleAnimation2.values = @[@0.4, @2];
scaleAnimation2.repeatCount = 1;
scaleAnimation2.calculationMode = kCAAnimationCubic;
scaleAnimation2.removedOnCompletion = NO;
scaleAnimation2.fillMode = kCAFillModeForwards;
//
CAAnimationGroup *group = [CAAnimationGroup animation];
group.duration = 0.6; // 0.1 () + 0.5 ()
group.animations = @[scaleAnimation1, positionAnimation, scaleAnimation2];
group.repeatCount = 1;
group.removedOnCompletion = NO;
group.fillMode = kCAFillModeForwards;
return group;
}
///
/// @param startPoint
/// @param endPoint
- (CAAnimationGroup *)createGiftAnimationStartPoint:(CGPoint)startPoint endPoint:(CGPoint)endPoint{
- (CAAnimationGroup *)createGiftAnimationStartPoint:(CGPoint)startPoint endPoint:(CGPoint)endPoint {
CGPoint centerPoint = CGPointMake(KScreenWidth / 2, KScreenHeight / 2);
CAKeyframeAnimation *animation0 = [CAKeyframeAnimation animation];
animation0.duration = 0.8;
@@ -1563,8 +1631,7 @@
animation1.calculationMode = kCAAnimationCubic;
animation1.removedOnCompletion = NO;
animation1.fillMode = kCAFillModeForwards;
CAKeyframeAnimation *animation2 = [CAKeyframeAnimation animation];
animation2.duration = 0.8;
animation2.beginTime = 0.8;
@@ -1853,11 +1920,53 @@
}
}
#pragma mark -
- (void)receiveCombo:(GiftReceiveInfoModel *)receiveInfo {
[[GiftComboManager sharedManager] receiveGiftInfoForDisplayComboFlags:receiveInfo
container:self];
}
- (void)startAnimation:(UIView *)animatedView {
//
CGFloat leftPosition = -animatedView.frame.size.width;
// 1
[UIView animateWithDuration:0.25
delay:0
options:UIViewAnimationOptionCurveEaseInOut
animations:^{
//
animatedView.center = CGPointMake(self.bounds.size.width / 2, self.bounds.size.height / 2);
} completion:^(BOOL finished) {
// 2
[self continueAnimationToLeft:leftPosition view:animatedView];
}];
}
// 2
- (void)continueAnimationToLeft:(CGFloat)leftPosition view:(UIView *)animatedView {
// 2
[UIView animateWithDuration:0.25
delay:500.0
options:UIViewAnimationOptionCurveEaseInOut
animations:^{
//
animatedView.center = CGPointMake(leftPosition, self.bounds.size.height / 2);
} completion:^(BOOL finished) {
//
[animatedView removeFromSuperview];
}];
}
#pragma mark -
///
- (void)receiveGift:(GiftReceiveInfoModel *)receiveInfo {
if ([self isInSudGame]) {return;}
if(receiveInfo.isHomeShow == YES)return;
if ([self isInSudGame] || receiveInfo.isHomeShow == YES) {
return;
}
[self receiveCombo:receiveInfo];
///CPU
RoomInfoModel * roomInfo = [self.delegate getRoomInfo];
if (receiveInfo.isLuckyBagGift) {

View File

@@ -679,7 +679,7 @@
}
- (void)updateContributeEnterViewTitle:(AttachmentModel *)attachment {
if (attachment.first == 111 && attachment.second == 1110) {
if (attachment.first == CustomMessageType_MoneyFlow && attachment.second == Custom_Message_Sub_Money_Flow) {
NSNumber *num = [attachment.data objectForKey:@"serialValue"];
if (num) {
self.contributeEnterView.title = num.stringValue;

View File

@@ -165,7 +165,7 @@
- (UIImageView *)coinImageView {
if (!_coinImageView) {
_coinImageView = [[UIImageView alloc] init];
_coinImageView.image = [UIImage imageNamed:@"exchange_gold_icon"];
_coinImageView.image = [UIImage imageNamed:@"moli_money_icon"];
}
return _coinImageView;
}

View File

@@ -248,7 +248,7 @@
NSString *getPrice = @(self.price.integerValue * self.loveNum.integerValue).stringValue;
NSMutableAttributedString *textAtt = [[NSMutableAttributedString alloc]initWithString:[NSString stringWithFormat:@" %@",getPrice] attributes:@{NSFontAttributeName:self.numView.font,NSForegroundColorAttributeName:UIColorFromRGB(0xFF9A1F)}];
NSTextAttachment * attachment = [[NSTextAttachment alloc] init];
UIImage *iconImage = [UIImage imageNamed:@"exchange_gold_icon"];;
UIImage *iconImage = [UIImage imageNamed:@"moli_money_icon"];;
attachment.bounds = CGRectMake(0, roundf(self.numView.font.capHeight - iconImage.size.height)/2.f, iconImage.size.width, iconImage.size.height);
attachment.image = iconImage;
[textAtt insertAttributedString:[NSMutableAttributedString attributedStringWithAttachment:attachment] atIndex:0];

View File

@@ -145,7 +145,7 @@
- (UIImageView *)diamondsImage{
if(!_diamondsImage){
_diamondsImage = [UIImageView new];
_diamondsImage.image = kImage(@"exchange_gold_icon");
_diamondsImage.image = kImage(@"moli_money_icon");
}
return _diamondsImage;
}

View File

@@ -174,7 +174,7 @@
- (UIImageView *)diamondView{
if(!_diamondView){
_diamondView = [UIImageView new];
_diamondView.image = kImage(@"exchange_gold_icon");
_diamondView.image = kImage(@"moli_money_icon");
}
return _diamondView;
}

View File

@@ -94,7 +94,7 @@
_giftNameVeiw.text = _albumModel.giftName;
NSMutableAttributedString *numText = [[NSMutableAttributedString alloc]initWithString:_albumModel.totalGoldPrice attributes:@{NSFontAttributeName:kFontRegular(14),NSForegroundColorAttributeName:UIColorFromRGB(0x1F1B4F)}];
NSTextAttachment * attachment = [[NSTextAttachment alloc] init];
UIImage *iconImage = [UIImage imageNamed:@"exchange_gold_icon"];;
UIImage *iconImage = [UIImage imageNamed:@"moli_money_icon"];;
attachment.bounds = CGRectMake(0, roundf(_giftNumView.font.capHeight - iconImage.size.height)/2.f, iconImage.size.width, iconImage.size.height);
attachment.image =iconImage;
@@ -153,7 +153,7 @@
_giftNumView.textAlignment = NSTextAlignmentCenter;
NSMutableAttributedString *numText = [[NSMutableAttributedString alloc]initWithString:@"0" attributes:@{NSFontAttributeName:kFontRegular(14),NSForegroundColorAttributeName:UIColorFromRGB(0x1F1B4F)}];
NSTextAttachment * attachment = [[NSTextAttachment alloc] init];
UIImage *iconImage = [UIImage imageNamed:@"exchange_gold_icon"];;
UIImage *iconImage = [UIImage imageNamed:@"moli_money_icon"];;
attachment.bounds = CGRectMake(0, roundf(_giftNumView.font.capHeight - iconImage.size.height)/2.f, iconImage.size.width, iconImage.size.height);
attachment.image =iconImage;

View File

@@ -141,7 +141,7 @@
- (UIImageView *)coinView{
if(!_coinView){
_coinView = [UIImageView new];
_coinView.image = kImage(@"ms_room_game_victory_coin");
_coinView.image = kImage(@"moli_money_icon");
}
return _coinView;
}

View File

@@ -227,7 +227,7 @@
- (UIImageView *)coinView{
if(!_coinView){
_coinView = [UIImageView new];
_coinView.image = kImage(@"ms_room_game_underwa_coin");
_coinView.image = kImage(@"moli_money_icon");
}
return _coinView;
}

View File

@@ -133,7 +133,7 @@
- (UIImageView *)coinImageView{
if(!_coinImageView){
_coinImageView = [UIImageView new];
_coinImageView.image = kImage(@"ms_room_game_begin_coin");
_coinImageView.image = kImage(@"moli_money_icon");
}
return _coinImageView;
}

View File

@@ -114,7 +114,7 @@
- (UIImageView *)iconView{
if(!_iconView){
_iconView = [UIImageView new];
_iconView.image = kImage(@"ms_room_game_coin_icon");
_iconView.image = kImage(@"moli_money_icon");
}
return _iconView;
}

View File

@@ -58,7 +58,7 @@
_giftNameVeiw.text = _giftModel.giftName;
NSMutableAttributedString *numText = [[NSMutableAttributedString alloc]initWithString:@(_giftModel.goldPrice).stringValue attributes:@{NSFontAttributeName:kFontRegular(14),NSForegroundColorAttributeName:UIColorFromRGB(0x1F1B4F)}];
NSTextAttachment * attachment = [[NSTextAttachment alloc] init];
UIImage *iconImage = [UIImage imageNamed:@"exchange_gold_icon"];;
UIImage *iconImage = [UIImage imageNamed:@"moli_money_icon"];;
attachment.bounds = CGRectMake(0, roundf(_giftNumView.font.capHeight - iconImage.size.height)/2.f, iconImage.size.width, iconImage.size.height);
attachment.image =iconImage;
@@ -90,7 +90,7 @@
_giftNumView.textAlignment = NSTextAlignmentCenter;
NSMutableAttributedString *numText = [[NSMutableAttributedString alloc]initWithString:@"0" attributes:@{NSFontAttributeName:kFontRegular(14),NSForegroundColorAttributeName:UIColorFromRGB(0x1F1B4F)}];
NSTextAttachment * attachment = [[NSTextAttachment alloc] init];
UIImage *iconImage = [UIImage imageNamed:@"exchange_gold_icon"];;
UIImage *iconImage = [UIImage imageNamed:@"moli_money_icon"];;
attachment.bounds = CGRectMake(0, roundf(_giftNumView.font.capHeight - iconImage.size.height)/2.f, iconImage.size.width, iconImage.size.height);
attachment.image =iconImage;

View File

@@ -161,7 +161,7 @@
- (UIImageView *)diamondView{
if(!_diamondView){
_diamondView = [UIImageView new];
_diamondView.image = kImage(@"exchange_gold_icon");
_diamondView.image = kImage(@"moli_money_icon");
}
return _diamondView;
}

View File

@@ -141,7 +141,7 @@
- (UIImageView *)diamondView{
if(!_diamondView){
_diamondView = [UIImageView new];
_diamondView.image = kImage(@"exchange_gold_icon");
_diamondView.image = kImage(@"moli_money_icon");
}
return _diamondView;
}

View File

@@ -160,7 +160,7 @@
if (!_diamondImageView) {
_diamondImageView = [[UIImageView alloc] init];
_diamondImageView.userInteractionEnabled = YES;
_diamondImageView.image = [UIImage imageNamed:@"exchange_gold_icon"];
_diamondImageView.image = [UIImage imageNamed:@"moli_money_icon"];
}
return _diamondImageView;
}

View File

@@ -8,14 +8,22 @@
#import <Foundation/Foundation.h>
#import "GiftInfoModel.h"
#import "GiftComboView.h"
@class GiftReceiveInfoModel, UserInfoModel;
@class GiftReceiveInfoModel, UserInfoModel, GiftReceiveInfoModel;
typedef enum : NSUInteger {
ComboAction_ShowPanel,
ComboAction_RemovePanel
ComboAction_RemovePanel,
ComboAction_Combo_Count_Update,
} ComboActionType;
typedef enum : NSUInteger {
ComboFlagAction_,
// ComboAction_RemovePanel,
// ComboAction_Combo_Count_Update,
} ComboFlagActionType;
NS_ASSUME_NONNULL_BEGIN
@@ -26,7 +34,6 @@ NS_ASSUME_NONNULL_BEGIN
- (void)registerActions:(void(^ _Nullable)(ComboActionType type))action;
- (void)saveSendGiftTo:(NSArray *)UIDs;
- (void)saveGiftSourceType:(GiftSourceType)type;
- (void)saveSendGiftInfo:(GiftInfoModel *)model;
@@ -37,6 +44,14 @@ NS_ASSUME_NONNULL_BEGIN
- (void)saveSessionID:(NSString *)sessionID;
- (void)resetCombo;
- (void)sendGift;
- (void)forceRemove;
- (NSInteger)loadComboCount;
- (BOOL)isGiftCombing;
- (void)receiveGiftInfoForDisplayComboFlags:(GiftReceiveInfoModel *)receiveInfo
container:(UIView *)container;
@end

View File

@@ -8,18 +8,24 @@
#import "GiftComboManager.h"
#import "Api+Gift.h"
#import "UserInfoModel.h"
#import "AttachmentModel.h"
#import "GiftReceiveInfoModel.h"
#import "XPMessageRemoteExtModel.h"
#import "Api+Gift.h"
#import "GiftComboFlagView.h"
@interface GiftComboManager ()
// GiftReceiveInfoModel NSDictionary
@property (nonatomic, strong) NSMutableArray *giftComboQueue;
@property (nonatomic, strong) NSMutableArray *comboFlagQueue;
@property (nonatomic, strong) NSTimer *comboFlagTimer;
@property (nonatomic, strong) UIView *containerView;
//
@property (nonatomic, strong) dispatch_source_t timer;
@@ -33,6 +39,15 @@
@property (nonatomic, copy) NSString *sessionID;
@property (nonatomic, assign) NSInteger combo;
@property (nonatomic, assign) bool isCombing;
@property (nonatomic, copy) void (^actionCallback)(ComboActionType type);
@property (nonatomic, strong) NSTimer *comboFlagTimer_1;
@property (nonatomic, strong) NSTimer *comboFlagTimer_2;
@property (nonatomic, strong) NSMutableArray<GiftComboFlagView *> *activeViews; // 2
//@property (nonatomic, strong) NSMutableArray<GiftReceiveInfoModel *> *activeModels; //
@end
@@ -46,6 +61,9 @@
dispatch_once(&onceToken, ^{
sharedInstance = [[self alloc] init];
sharedInstance.giftComboQueue = [NSMutableArray array];
sharedInstance.activeViews = [NSMutableArray array];
sharedInstance.comboFlagQueue = [NSMutableArray array];
[sharedInstance startProcessingGiftComboFlagQueue];
});
return sharedInstance;
}
@@ -77,10 +95,150 @@
//
- (void)resetCombo {
_combo = 1;
if (self.actionCallback) {
self.actionCallback(ComboAction_ShowPanel);
}
self.isCombing = YES;
}
// MARK: Logic is 0.2s
- (void)registerActions:(void (^)(ComboActionType))action {
self.actionCallback = action;
}
- (void)forceRemove {
if (self.actionCallback) {
self.actionCallback(ComboAction_RemovePanel);
}
self.isCombing = NO;
}
- (NSInteger)loadComboCount {
return self.combo;
}
- (BOOL)isGiftCombing {
return self.isCombing;
}
#pragma mark -
- (void)receiveGiftInfoForDisplayComboFlags:(GiftReceiveInfoModel *)receiveInfo
container:(UIView *)container {
self.containerView = container;
[self.giftComboQueue addObject:receiveInfo];
[self startProcessingGiftComboFlagQueue];
}
- (void)startProcessingGiftComboFlagQueue {
self.comboFlagTimer = [NSTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(processGiftFlagQueue) userInfo:nil repeats:YES];
}
- (void)stopProcessingGiftComboFlagQueue {
[self.comboFlagTimer invalidate];
self.comboFlagTimer = nil;
}
- (void)processGiftFlagQueue {
if (self.giftComboQueue.count == 0) {
return;
}
GiftReceiveInfoModel *receiveInfo = [self.giftComboQueue firstObject];
[self.giftComboQueue removeObjectAtIndex:0];
[self handleGiftInfo:receiveInfo];
}
- (void)handleGiftInfo:(GiftReceiveInfoModel *)receiveInfo {
if ([self updateExistingViewWithModel:receiveInfo]) {
//
return;
}
[self allCurrentFlagMoveDown];
if (self.activeViews.count >= 2) {
GiftComboFlagView *oldestView = [self.activeViews firstObject];
[self animateRemoveView:oldestView];
}
CGFloat positionY = kGetScaleWidth(380);
CGFloat positionX = isMSRTL() ? -self.containerView.bounds.size.width : self.containerView.bounds.size.width;
GiftComboFlagView *flagView = [[GiftComboFlagView alloc] initWithFrame:CGRectMake(positionX,
positionY,
kGetScaleWidth(300),
50)];
@kWeakify(self);
@kWeakify(flagView);
[flagView setTimerEnd:^{
@kStrongify(self);
@kStrongify(flagView);
if ([self.activeViews containsObject:flagView]) {
[self.activeViews removeObject:flagView];
}
}];
[flagView updateReceiveInfoModel:receiveInfo animationType:0];
[self.activeViews addObject:flagView];
[self.containerView addSubview:flagView];
[self animateView:flagView positionY:positionY];
}
- (void)allCurrentFlagMoveDown {
[self.activeViews enumerateObjectsUsingBlock:^(GiftComboFlagView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
CGRect rect = obj.frame;
rect.origin.y += 50;
obj.frame = rect;
}];
}
- (void)animateView:(GiftComboFlagView *)flagView positionY:(CGFloat)positionY {
[UIView animateWithDuration:0.1
animations:^{
if (isMSRTL()) {
//
CGFloat screenWidth = [UIScreen mainScreen].bounds.size.width;
// x - -
CGFloat newX = screenWidth - 20 - kGetScaleWidth(300);
// flagView frame使 20
flagView.frame = CGRectMake(newX, positionY, kGetScaleWidth(300), 50);
} else {
flagView.frame = CGRectMake(20, positionY, kGetScaleWidth(300), 50);
}
}];
}
- (void)animateRemoveView:(GiftComboFlagView *)flagView {
[flagView removeFromSuperview];
if ([self.activeViews containsObject:flagView]) {
[self.activeViews removeObject:flagView];
flagView = nil;
}
}
// View ID
- (BOOL)updateExistingViewWithModel:(GiftReceiveInfoModel *)model {
NSInteger index = 0;
for (GiftComboFlagView *existingFlag in self.activeViews) {
if ([existingFlag.receiveInfo isEqual:model]) {
[self updateComboFlag:existingFlag with:model];
return YES;
}
index++;
}
return NO;
}
- (void)updateComboFlag:(GiftComboFlagView *)flagView with:(GiftReceiveInfoModel *)model {
[flagView updateReceiveInfoModel:model animationType:1];
}
// MARK: Logic is 0.2s
#pragma mark -
//
@@ -202,13 +360,18 @@
sendType:[NSString stringWithFormat:@"%ld", GiftSendType_OnMic]
giftId:[NSString stringWithFormat:@"%ld", self.giftInfo.giftId]
giftSource:[NSString stringWithFormat:@"%ld", self.giftSourceType]
giftType:[NSString stringWithFormat:@"%ld", self.giftInfo.giftType]
giftType:[NSString stringWithFormat:@"%ld", self.roomSendGiftType]
roomUid:self.roomUID
msg:@""
uid:[AccountInfoStorage instance].getUid];
}
- (void)handleSendGiftSuccess:(BaseModel *)response {
self.combo = self.combo + 1;
if (self.actionCallback) {
self.actionCallback(ComboAction_Combo_Count_Update);
}
GiftReceiveInfoModel *receive = [GiftReceiveInfoModel modelWithJSON:response.data];
if (!receive) {
return;
@@ -219,7 +382,7 @@
[data addEntriesFromDictionary:tempDic];
AttachmentModel *attachment = [[AttachmentModel alloc] init];
switch (receive.roomSendGiftType) {
switch (self.roomSendGiftType) {
case RoomSendGiftType_AllMic: {
attachment.first = CustomMessageType_AllMicroSend;
attachment.second = Custom_Message_Sub_AllMicroSend;
@@ -249,8 +412,7 @@
}
if (attachment) {
// TODO:
[attachment.data setObject:@(self.combo) forKey:@"comboCount"];
[self sendCustomMessage:attachment];
}
}

View File

@@ -55,7 +55,7 @@ NS_ASSUME_NONNULL_BEGIN
@property (nonatomic,copy) NSString *targetAvatar;
///目标的昵称
@property (nonatomic,copy) NSString *targetNick;
@property (nonatomic,strong) NSArray<NSString *> *targetUids;
@property (nonatomic,strong) NSArray<NSNumber *> *targetUids;
///礼物信息
@property (nonatomic,strong) GiftInfoModel *gift;
///礼物信息
@@ -130,6 +130,10 @@ NS_ASSUME_NONNULL_BEGIN
@property (nonatomic, strong) i18nGiftNameMap *i18nGiftNameMap;
@property (nonatomic, assign) NSInteger comboCount;
- (NSInteger)receiveUserCount;
@end
NS_ASSUME_NONNULL_END

View File

@@ -41,4 +41,43 @@
};
}
- (BOOL)isEqual:(id)other
{
if (other == self) {
return YES;
}
GiftReceiveInfoModel *otherInfo = (GiftReceiveInfoModel *)other;
if ([self.uid isEqualToString:otherInfo.uid]
// && [self.giftId isEqualToString:otherInfo.giftId]
// && [self isEqualUIDs:otherInfo]
) {
return YES;
}
return NO;
}
- (BOOL)isEqualUIDs:(GiftReceiveInfoModel *)other {
if ([self.targetUid isEqualToString:other.targetUid]) {
return YES;
}
if ([self.targetUids isEqualToArray:other.targetUids]) {
return YES;
}
return NO;
}
- (NSUInteger)hash
{
return self.uid.hash ^ self.giftId.hash;// ^ self.targetUid.hash ^ self.targetUids.hash;
}
- (NSInteger)receiveUserCount {
if (self.targetUids.count > 0) {
return self.targetUids.count;
}
return 1;
}
@end

View File

@@ -257,7 +257,7 @@
- (UIImageView *)logoImageView {
if (!_logoImageView) {
_logoImageView = [self createImageView:@"exchange_gold_icon"];
_logoImageView = [self createImageView:@"moli_money_icon"];
}
return _logoImageView;
}

View File

@@ -0,0 +1,21 @@
//
// CountdownRingView.h
// YuMi
//
// Created by P on 2024/9/9.
//
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface CountdownRingView : UIView
- (instancetype)initWithFrame:(CGRect)frame duration:(NSInteger)duration;
- (void)startCountdown;
- (void)resetCountdown; // 重置功能
- (void)setCompletionHandler:(void (^__nullable)(void))completionHandler; // 计时结束的回调
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,142 @@
//
// CountdownRingView.m
// YuMi
//
// Created by P on 2024/9/9.
//
#import "CountdownRingView.h"
@interface CountdownRingView ()
@property (nonatomic, strong) CAShapeLayer *backgroundLayer;
@property (nonatomic, strong) CAShapeLayer *foregroundLayer;
@property (nonatomic, strong) UILabel *countdownLabel;
@property (nonatomic, strong) NSTimer *timer;
@property (nonatomic, assign) CGFloat remainingTime;
@property (nonatomic, assign) NSInteger totalDuration;
@property (nonatomic, copy) void (^completionHandler)(void);
@end
@implementation CountdownRingView
- (void)dealloc
{
self.completionHandler = nil;
[self.timer invalidate];
self.timer = nil;
}
- (instancetype)initWithFrame:(CGRect)frame duration:(NSInteger)duration {
self = [super initWithFrame:frame];
if (self) {
self.userInteractionEnabled = NO;
self.remainingTime = duration;
self.totalDuration = duration;
[self setupLayers];
[self setupLabel];
}
return self;
}
//
- (void)setupLayers {
//
CGPoint center = CGPointMake(self.bounds.size.width / 2, self.bounds.size.height / 2);
CGFloat radius = (self.bounds.size.width - 10) / 2; // 5
UIBezierPath *circularPath = [UIBezierPath bezierPathWithArcCenter:center
radius:radius
startAngle:-M_PI_2
endAngle:(M_PI * 2) - M_PI_2
clockwise:YES];
//
// self.backgroundLayer = [CAShapeLayer layer];
// self.backgroundLayer.path = circularPath.CGPath;
// self.backgroundLayer.strokeColor = UIColorFromRGB(0x04D5C6).CGColor;
// self.backgroundLayer.lineWidth = 7;
// self.backgroundLayer.fillColor = [UIColor clearColor].CGColor;
// [self.layer addSublayer:self.backgroundLayer];
//
self.foregroundLayer = [CAShapeLayer layer];
self.foregroundLayer.path = circularPath.CGPath;
self.foregroundLayer.strokeColor = UIColorFromRGB(0x04D5C6).CGColor;
self.foregroundLayer.lineWidth = 10;
self.foregroundLayer.fillColor = [UIColor clearColor].CGColor;
self.foregroundLayer.strokeEnd = 1.0;
[self.layer addSublayer:self.foregroundLayer];
}
//
- (void)setupLabel {
self.countdownLabel = [[UILabel alloc] initWithFrame:self.bounds];
self.countdownLabel.textColor = UIColorFromRGB(0xFFCB3F);
self.countdownLabel.textAlignment = NSTextAlignmentCenter;
self.countdownLabel.font = kFontSemibold(13);
self.countdownLabel.text = @"Combo";
[self addSubview:self.countdownLabel];
}
//
- (void)startCountdown {
[self animateRing];
self.countdownLabel.transform = CGAffineTransformIdentity;
[UIView animateWithDuration:0.25
animations:^{
self.countdownLabel.transform = CGAffineTransformMakeScale(2, 2);
} completion:^(BOOL finished) {
self.countdownLabel.transform = CGAffineTransformIdentity;
}];
self.timer = [NSTimer scheduledTimerWithTimeInterval:0.1
target:self
selector:@selector(updateCountdown)
userInfo:nil
repeats:YES];
}
//
- (void)resetCountdown {
//
[self.timer invalidate];
self.timer = nil;
//
self.remainingTime = self.totalDuration;
//
self.foregroundLayer.strokeEnd = 1.0;
//
[self startCountdown];
}
//
- (void)updateCountdown {
self.remainingTime -= 0.1;
if (self.remainingTime <= 0) {
[self.timer invalidate];
self.timer = nil;
if (self.completionHandler) {
self.completionHandler();
}
}
}
//
- (void)animateRing {
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"];
animation.duration = self.remainingTime; //
animation.fromValue = @1.0;
animation.toValue = @0.0;
animation.fillMode = kCAFillModeForwards;
animation.removedOnCompletion = NO;
[self.foregroundLayer addAnimation:animation forKey:@"ringAnimation"];
}
@end

View File

@@ -0,0 +1,27 @@
//
// GiftComboFlagView.h
// YuMi
//
// Created by P on 2024/9/6.
//
#import <UIKit/UIKit.h>
@class GiftReceiveInfoModel;
NS_ASSUME_NONNULL_BEGIN
@interface GiftComboFlagView : UIView
@property (nonatomic, strong) GiftReceiveInfoModel *receiveInfo;
@property (nonatomic, copy) void(^timerEnd)(void);
/// 更新飘屏
/// - Parameters:
/// - model: 接收到的礼物数据
/// - type: 飘屏动画类型0-不做动画1-数字抖动
- (void)updateReceiveInfoModel:(GiftReceiveInfoModel *)model animationType:(NSInteger)type;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,223 @@
//
// GiftComboFlagView.m
// YuMi
//
// Created by P on 2024/9/6.
//
#import "GiftComboFlagView.h"
#import "GiftReceiveInfoModel.h"
@interface GiftComboFlagView()
@property (nonatomic, strong) UIImageView *backgroundImageView;
@property (nonatomic, strong) NetImageView *giftGiverAvatar;
@property (nonatomic, strong) NetImageView *giftIcon;
@property (nonatomic, strong) UILabel *giftGiverNameLabel;
@property (nonatomic, strong) UILabel *actionTitleLabel;
@property (nonatomic, strong) UILabel *giftReceiverNameLabel;
@property (nonatomic, strong) UILabel *giftCountLabel;
@property (nonatomic, assign) NSInteger totalCount;
@property (nonatomic, strong) NSTimer *timer;
@end
@implementation GiftComboFlagView
- (instancetype)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
[self setupUI];
}
return self;
}
- (void)dealloc
{
[self endTimer];
}
- (void)startTimer {
if (_timer) {
[self endTimer];
}
@kWeakify(self);
_timer = [NSTimer scheduledTimerWithTimeInterval:5.0 repeats:NO block:^(NSTimer * _Nonnull timer) {
@kStrongify(self);
[self removeFromSuperview];
if (self.timerEnd) {
self.timerEnd();
}
}];
}
- (void)endTimer {
[_timer invalidate];
_timer = nil;
}
- (void)updateReceiveInfoModel:(GiftReceiveInfoModel *)model
animationType:(NSInteger)type {
if (model.comboCount < 1) {
return;
}
_receiveInfo = model;
self.giftGiverAvatar.imageUrl = model.avatar;
self.giftIcon.imageUrl = model.gift.giftUrl;
self.giftGiverNameLabel.text = model.nick;
if (model.isBatch) {
self.giftReceiverNameLabel.text = @"All mic";
} else {
if (model.targetUids.count == 1) {
self.giftReceiverNameLabel.text = model.targetNick;
} else if (model.targetUids.count > 1) {
self.giftReceiverNameLabel.text = [NSString stringWithFormat:@"%ld guys", model.targetUids.count];
} else {
self.giftReceiverNameLabel.text = model.targetNick;
}
}
NSString *countStr = [NSString stringWithFormat:@"x%ld", (long)model.comboCount * model.receiveUserCount];
NSShadow *shadow = [[NSShadow alloc] init];
shadow.shadowBlurRadius = 3;
shadow.shadowColor = [UIColor colorWithRed:255/255.0 green:153./255.0 blue:0/255.0 alpha:1];
shadow.shadowOffset =CGSizeMake(0,1);
NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:countStr
attributes: @{NSFontAttributeName: kFontSemibold(30),
NSForegroundColorAttributeName: UIColorFromRGB(0xFFE07B),
NSShadowAttributeName: shadow}];
self.giftCountLabel.attributedText = string;
if (type == 1) {
CGFloat scale = 1.1 + (0.1 * model.comboCount * model.receiveUserCount);
scale = MIN(3.0, scale);
self.giftCountLabel.transform = CGAffineTransformIdentity;
[UIView animateWithDuration:0.25
animations:^{
self.giftCountLabel.transform = CGAffineTransformMakeScale(scale, scale);
} completion:^(BOOL finished) {
self.giftCountLabel.transform = CGAffineTransformIdentity;
}];
}
[self startTimer];
}
- (void)setupUI {
[self addSubview:self.backgroundImageView];
[self.backgroundImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.top.mas_equalTo(self);
make.size.mas_equalTo(CGSizeMake(kGetScaleWidth(208), kGetScaleWidth(38)));
}];
[self addSubview:self.giftGiverAvatar];
[self.giftGiverAvatar mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerY.mas_equalTo(self.backgroundImageView);
make.leading.mas_equalTo(self).offset(4);
make.size.mas_equalTo(CGSizeMake(kGetScaleWidth(30), kGetScaleWidth(30)));
}];
[self addSubview:self.giftGiverNameLabel];
[self.giftGiverNameLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.mas_equalTo(self.giftGiverAvatar.mas_trailing).offset(6);
make.top.mas_equalTo(self).offset(5);
}];
[self addSubview:self.actionTitleLabel];
[self.actionTitleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.mas_equalTo(self.giftGiverAvatar.mas_trailing).offset(6);
make.bottom.mas_equalTo(self.backgroundImageView).offset(-5);
}];
[self addSubview:self.giftReceiverNameLabel];
[self.giftReceiverNameLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.mas_equalTo(self.actionTitleLabel.mas_trailing).offset(6);
make.centerY.mas_equalTo(self.actionTitleLabel);
}];
[self addSubview:self.giftIcon];
[self.giftIcon mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.mas_equalTo(self.giftReceiverNameLabel.mas_trailing).offset(8);
make.bottom.mas_equalTo(self.backgroundImageView);
make.size.mas_equalTo(CGSizeMake(kGetScaleWidth(48), kGetScaleWidth(48)));
}];
[self addSubview:self.giftCountLabel];
[self.giftCountLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerY.mas_equalTo(self.backgroundImageView);
make.leading.mas_equalTo(self.giftIcon.mas_trailing).offset(22);
}];
}
#pragma mark -
- (UIImageView *)backgroundImageView {
if (!_backgroundImageView) {
_backgroundImageView = [[UIImageView alloc] initWithImage:[kImage(@"gift_combo_flag_bg") ms_SetImageForRTL]];
_backgroundImageView.contentMode = UIViewContentModeScaleAspectFill;
}
return _backgroundImageView;
}
- (NetImageView *)giftGiverAvatar {
if (!_giftGiverAvatar) {
NetImageConfig * config = [[NetImageConfig alloc]init];
config.placeHolder = [UIImageConstant defaultAvatarPlaceholder];
config.imageType = ImageTypeCornerAvatar;
_giftGiverAvatar = [[NetImageView alloc] initWithConfig:config];
_giftGiverAvatar.backgroundColor = [UIColor clearColor];
_giftGiverAvatar.contentMode = UIViewContentModeScaleAspectFit;
_giftGiverAvatar.layer.cornerRadius = kGetScaleWidth(15);
_giftGiverAvatar.layer.masksToBounds = YES;
_giftGiverAvatar.clipsToBounds = YES;
}
return _giftGiverAvatar;
}
- (NetImageView *)giftIcon {
if (!_giftIcon) {
_giftIcon = [[NetImageView alloc] init];
_giftIcon.contentMode = UIViewContentModeScaleAspectFit;
_giftIcon.layer.cornerRadius = kGetScaleWidth(24);
_giftIcon.layer.masksToBounds = YES;
_giftIcon.clipsToBounds = YES;
}
return _giftIcon;
}
- (UILabel *)giftGiverNameLabel {
if (!_giftGiverNameLabel) {
_giftGiverNameLabel = [UILabel labelInitWithText:@"" font:kFontSemibold(10) textColor:UIColorFromRGB(0xFFE995)];
}
return _giftGiverNameLabel;
}
- (UILabel *)actionTitleLabel {
if (!_actionTitleLabel) {
_actionTitleLabel = [UILabel labelInitWithText:@"Send" font:kFontSemibold(10) textColor:UIColorFromRGB(0xFFffff)];
}
return _actionTitleLabel;
}
- (UILabel *)giftReceiverNameLabel {
if (!_giftReceiverNameLabel) {
_giftReceiverNameLabel = [UILabel labelInitWithText:@"" font:kFontSemibold(10) textColor:UIColorFromRGB(0xFFE995)];
}
return _giftReceiverNameLabel;
}
- (UILabel *)giftCountLabel {
if (!_giftCountLabel) {
_giftCountLabel = [UILabel labelInitWithText:@"X 1" font:kFontSemibold(36) textColor:UIColorFromRGB(0xFFE07B)];
}
return _giftCountLabel;
}
@end

View File

@@ -7,10 +7,14 @@
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface GiftComboView : UIView
- (void)updateCount;
@end
NS_ASSUME_NONNULL_END

View File

@@ -6,14 +6,155 @@
//
#import "GiftComboView.h"
#import "GiftComboManager.h"
#import "CountdownRingView.h"
#import <SVGA.h>
@interface GiftComboView ()<SVGAPlayerDelegate>
@property (nonatomic, strong) UIView *container;
@property (nonatomic, strong) UILabel *comboCountLabel;
@property (nonatomic, strong) SVGAImageView *playImageView;
@property (nonatomic, strong) SVGAVideoEntity *svgaVideoEntity;
@property (nonatomic, strong) CountdownRingView *countdownRingView;
@end
@implementation GiftComboView
- (instancetype)init {
if (self = [super init]) {
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapSpace)];
[self addGestureRecognizer:tap];
[self setupUI];
[self setupTimer];
[self updateCount];
SVGAParser *_parser = [SVGAParser new];
@kWeakify(self);
[_parser parseWithNamed:@"Combo_Boom"
inBundle:nil
completionBlock:^(SVGAVideoEntity * _Nonnull videoItem) {
@kStrongify(self);
self.svgaVideoEntity = videoItem;
self.playImageView.loops = 1;
self.playImageView.clearsAfterStop = NO;
self.playImageView.videoItem = videoItem;
} failureBlock:^(NSError * _Nullable error) {
NSLog(@"%@", error);
}];
}
return self;
}
- (void)updateCount {
NSString *countStr = [NSString stringWithFormat:@"x%ld", [[GiftComboManager sharedManager] loadComboCount]];
NSShadow *shadow = [[NSShadow alloc] init];
shadow.shadowBlurRadius = 3;
shadow.shadowColor = [UIColor colorWithRed:255/255.0 green:153./255.0 blue:0/255.0 alpha:1];
shadow.shadowOffset =CGSizeMake(0,1);
NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:countStr
attributes: @{NSFontAttributeName: kFontSemibold(30),
NSForegroundColorAttributeName: UIColorFromRGB(0xFFE07B),
NSShadowAttributeName: shadow}];
self.comboCountLabel.attributedText = string;
}
- (void)setupUI {
[self addSubview:self.container];
[self.container mas_makeConstraints:^(MASConstraintMaker *make) {
make.trailing.mas_equalTo(self).offset(-16);
make.bottom.mas_equalTo(self).offset(-20);
make.size.mas_equalTo(CGSizeMake(kGetScaleWidth(170), kGetScaleWidth(310)));
}];
[self.container addSubview:self.playImageView];
[self.playImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.bottom.trailing.mas_equalTo(self.container);
make.width.mas_equalTo(kGetScaleWidth(150));
make.height.mas_equalTo(kGetScaleWidth(300));
}];
[self.container addSubview:self.comboCountLabel];
[self.comboCountLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.mas_equalTo(self.playImageView.mas_leading);
make.bottom.mas_equalTo(self.playImageView).offset(-100);
}];
[self addSubview:self.countdownRingView];
[self.countdownRingView mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.mas_equalTo(self.playImageView);
make.bottom.mas_equalTo(self.playImageView).offset(-6);
make.width.height.mas_equalTo(kGetScaleWidth(90));
}];
}
- (void)setupTimer {
@kWeakify(self);
[self.countdownRingView setCompletionHandler:^{
@kStrongify(self);
self.userInteractionEnabled = NO;
[[GiftComboManager sharedManager] forceRemove];
}];
[self.countdownRingView startCountdown];
}
- (void)handleTap {
[[GiftComboManager sharedManager] sendGift];
[self.playImageView startAnimation];
[self.countdownRingView resetCountdown];
}
- (void)handleTapSpace {
}
// SVGAPlayerDelegate:
- (void)svgaPlayerDidFinishedAnimation:(SVGAPlayer *)player {
[self.playImageView stepToPercentage:0 andPlay:NO];
}
- (UIView *)container {
if (!_container) {
_container = [[UIView alloc] init];
_container.backgroundColor = [UIColor clearColor];
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap)];
[_container addGestureRecognizer:tap];
}
return _container;
}
- (UILabel *)comboCountLabel {
if (!_comboCountLabel) {
_comboCountLabel = [UILabel labelInitWithText:@""
font:kFontSemibold(30)
textColor:UIColorFromRGB(0xFFE07B)];
_comboCountLabel.transform = isMSRTL() ? CGAffineTransformMakeRotation(M_PI_4) : CGAffineTransformMakeRotation(-M_PI_4);
}
return _comboCountLabel;
}
- (SVGAImageView *)playImageView {
if (_playImageView == nil) {
_playImageView = [[SVGAImageView alloc]init];
_playImageView.contentMode = UIViewContentModeScaleAspectFit;
_playImageView.hidden = NO;
_playImageView.delegate = self;
}
return _playImageView;
}
- (CountdownRingView *)countdownRingView {
if (!_countdownRingView) {
_countdownRingView = [[CountdownRingView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)
duration:5];
}
return _countdownRingView;
}
@end

View File

@@ -340,7 +340,7 @@
highlightColor = [DJDKMIMOMColor giftNameSelectColor];
}
NSTextAttachment * diamondAtt = [[NSTextAttachment alloc] init];
UIImage *iconImage = [UIImage imageNamed:@"exchange_gold_icon"];;
UIImage *iconImage = [UIImage imageNamed:@"moli_money_icon"];;
diamondAtt.bounds = CGRectMake(0, roundf(self.balanceLabel.font.capHeight - 16)/2.f, 16, 16);
diamondAtt.image = iconImage;
NSAttributedString *diamondAttribute = [NSMutableAttributedString attributedStringWithAttachment:(NSTextAttachment *)diamondAtt];

View File

@@ -103,6 +103,8 @@ UIKIT_EXTERN NSString * kShowFirstRechargeView;
@property (nonatomic, strong) NSMutableArray *sendGiftMessageArray;
@property (nonatomic, strong) GiftComboView *comboView;
@end
@implementation XPSendGiftView
@@ -131,8 +133,43 @@ UIKIT_EXTERN NSString * kShowFirstRechargeView;
[self initSubViews];
[self initSubViewConstraints];
[self initHttpRequest];
@kWeakify(self);
[[GiftComboManager sharedManager] registerActions:^(ComboActionType type) {
@kStrongify(self);
switch (type) {
case ComboAction_ShowPanel: {
self.contentView.hidden = YES;
[self.view addSubview:self.comboView];
[self.comboView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.mas_equalTo(self.view);
}];
}
break;
case ComboAction_RemovePanel:{
self.contentView.hidden = NO;
[self.comboView removeFromSuperview];
self.comboView = nil;
}
break;
case ComboAction_Combo_Count_Update: {
[self.comboView updateCount];
}
default:
break;
}
}];
}
- (GiftComboView *)comboView {
if (!_comboView) {
_comboView = [[GiftComboView alloc] init];
}
return _comboView;
}
#pragma mark - Private Method
- (void)initSubViews {
[self.view addSubview:self.topView];
@@ -334,6 +371,9 @@ UIKIT_EXTERN NSString * kShowFirstRechargeView;
NSString *sessionID = self.usingplaceType == SendGiftType_User ? [NSString stringWithFormat:@"%ld", self.userArray.firstObject.uid] : [NSString stringWithFormat:@"%ld", [self.delegate getRoomInfo].roomId];
NIMMessage *message = [[NIMMessage alloc]init];
NIMCustomObject *object = [[NIMCustomObject alloc] init];
[attachment.data setObject:@([[GiftComboManager sharedManager] loadComboCount]) forKey:@"comboCount"];
object.attachment = attachment;
message.messageObject = object;
@@ -437,6 +477,9 @@ UIKIT_EXTERN NSString * kShowFirstRechargeView;
GiftInfoModel * giftInfo = self.giftInfoView.lastSelectGift;
if (self.usingplaceType == SendGiftType_Room) {
if (uids.count > 0) {
[self readyForCombo:giftCount];
///
NSString * uidString = [self dealSendGiftUids:uids];
///
@@ -814,8 +857,8 @@ UIKIT_EXTERN NSString * kShowFirstRechargeView;
dispatch_after(delayTime, dispatch_get_main_queue(), ^{
@kStrongify(self);
if (self) {
[self sendCustomMessage:receiveInfo oringinDic:originDic];
[[GiftComboManager sharedManager] resetCombo];
[self sendCustomMessage:receiveInfo oringinDic:originDic];
}
});
@@ -830,6 +873,10 @@ UIKIT_EXTERN NSString * kShowFirstRechargeView;
///
- (void)sendGiftFailWithCode:(NSInteger)code msg:(NSString *)msg {
#if DEBUG
[[GiftComboManager sharedManager] resetCombo];
// [self sendCustomMessage:nil oringinDic:nil];
#endif
self.giftBarView.sendButtonIsEnable = YES;
if (code == 31005) {//
[self showNotSufficientFundsWithToast:msg];
@@ -917,7 +964,6 @@ UIKIT_EXTERN NSString * kShowFirstRechargeView;
maskLayer.frame = CGRectMake(0, 0, KScreenWidth, KScreenHeight);
maskLayer.path = maskPath.CGPath;
_contentView.layer.mask = maskLayer;
}
return _contentView;
}

View File

@@ -168,7 +168,7 @@
- (UIImageView *)coinImageView {
if (!_coinImageView) {
_coinImageView = [[UIImageView alloc] init];
[_coinImageView setImage:[UIImage imageNamed:@"exchange_gold_icon"]];
[_coinImageView setImage:[UIImage imageNamed:@"moli_money_icon"]];
}
return _coinImageView;
}

View File

@@ -52,7 +52,7 @@
NSMutableAttributedString *numText = [[NSMutableAttributedString alloc]initWithString:@"0" attributes:@{NSFontAttributeName:kFontMedium(32),NSForegroundColorAttributeName:UIColorFromRGB(0xFF285C)}];
NSTextAttachment * attachment = [[NSTextAttachment alloc] init];
UIImage *iconImage = [UIImage imageNamed:@"exchange_gold_icon"];;
UIImage *iconImage = [UIImage imageNamed:@"moli_money_icon"];;
attachment.bounds = CGRectMake(0, roundf(kFontMedium(32).capHeight - iconImage.size.height)/2.f, iconImage.size.width, iconImage.size.height);
attachment.image =iconImage;
@@ -132,7 +132,7 @@
if (_resultModel.redEnvelopeState == RedPacketState_Success) {//
NSMutableAttributedString *numText = [[NSMutableAttributedString alloc]initWithString:_resultModel.currentUserAmount attributes:@{NSFontAttributeName:kFontMedium(32),NSForegroundColorAttributeName:UIColorFromRGB(0xFF285C)}];
NSTextAttachment * attachment = [[NSTextAttachment alloc] init];
UIImage *iconImage = [UIImage imageNamed:@"exchange_gold_icon"];;
UIImage *iconImage = [UIImage imageNamed:@"moli_money_icon"];;
attachment.bounds = CGRectMake(0, roundf(kFontMedium(32).capHeight - iconImage.size.height)/2.f, iconImage.size.width, iconImage.size.height);
attachment.image =iconImage;

View File

@@ -290,7 +290,7 @@
- (UIImageView *)diamondIconView{
if(!_diamondIconView){
_diamondIconView = [UIImageView new];
_diamondIconView.image = kImage(@"exchange_gold_icon");
_diamondIconView.image = kImage(@"moli_money_icon");
}
return _diamondIconView;
}

View File

@@ -138,7 +138,7 @@
- (UIImageView *)diamondImage {
if (!_diamondImage) {
_diamondImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"exchange_gold_icon"]];
_diamondImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"moli_money_icon"]];
}
return _diamondImage;
}

View File

@@ -681,7 +681,7 @@
- (UIImageView *)diamondImage {
if (!_diamondImage) {
_diamondImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"exchange_gold_icon"]];
_diamondImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"moli_money_icon"]];
}
return _diamondImage;
}

View File

@@ -331,7 +331,6 @@ NSString * const kHadQuitOtherRoomKey = @"kHadQuitOtherRoomKey";//是否退出
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myGiftEffectUpdate:) name:kRoomGiftEffectUpdateNotificationKey object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showRoomFirstChargeWindowFormNot:) name:kShowFirstRechargeView object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(openRedPacketNotification:) name:@"kOpenRedPacketNotification" object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showSendheadlineView:) name:@"kShowSendheadlineView" object:nil];
@kWeakify(self);
[[NSNotificationCenter defaultCenter] addObserverForName:@"kExchangeRoomAnimationViewAndGameViewIndex"
@@ -360,23 +359,6 @@ NSString * const kHadQuitOtherRoomKey = @"kHadQuitOtherRoomKey";//是否退出
[[NIMSDK sharedSDK].broadcastManager addDelegate:self];
}
- (void)setupComboManager {
// TODO: test view/ &
[[GiftComboManager sharedManager] registerActions:^(ComboActionType type) {
switch (type) {
case ComboAction_ShowPanel:
break;
case ComboAction_RemovePanel:
break;
default:
break;
}
}];
}
- (void)removeComboManager {
[[GiftComboManager sharedManager] registerActions:nil];
}
@@ -1646,6 +1628,8 @@ NSString * const kHadQuitOtherRoomKey = @"kHadQuitOtherRoomKey";//是否退出
continue;
}
NSLog(@" --- Message Raw Attach Content: %@", message.rawAttachContent);
if (message.messageType == NIMMessageTypeNotification) {
NIMNotificationObject *notiMsg = (NIMNotificationObject *)message.messageObject;
NIMChatroomNotificationContent *content = (NIMChatroomNotificationContent *)notiMsg.content;
@@ -1744,7 +1728,6 @@ NSString * const kHadQuitOtherRoomKey = @"kHadQuitOtherRoomKey";//是否退出
if (content.source.userId.integerValue != [AccountInfoStorage instance].getUid.integerValue && self.userInfo.platformRole != 1) {
onLineNumber += 1;
}else {
///
[self userEnterRoomSuccess];
///

Binary file not shown.