feat: 完成礼物连击功能 | 更换金币资源图片
@@ -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 */,
|
||||
|
6
YuMi/Assets.xcassets/1.0.15/Contents.json
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
@@ -5,11 +5,11 @@
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "luck_gift_flag@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "金币 1@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
BIN
YuMi/Assets.xcassets/1.0.15/luck_gift_flag.imageset/luck_gift_flag@2x.png
vendored
Normal file
After Width: | Height: | Size: 32 KiB |
@@ -9,7 +9,7 @@
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "mine_game_gold_icon@3x.png",
|
||||
"filename" : "luck_gift_gold@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
BIN
YuMi/Assets.xcassets/1.0.15/luck_gift_gold.imageset/luck_gift_gold@3x.png
vendored
Normal file
After Width: | Height: | Size: 48 KiB |
@@ -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"
|
||||
}
|
BIN
YuMi/Assets.xcassets/1.0.15/luck_gift_pruple.imageset/luck_gift_pruple@3x.png
vendored
Normal file
After Width: | Height: | Size: 49 KiB |
21
YuMi/Assets.xcassets/1.0.15/moli_money_icon.imageset/Contents.json
vendored
Normal 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
|
||||
}
|
||||
}
|
BIN
YuMi/Assets.xcassets/1.0.15/moli_money_icon.imageset/moli_money_icon@3x.png
vendored
Normal file
After Width: | Height: | Size: 3.0 KiB |
BIN
YuMi/Assets.xcassets/5.imageset/5@3x.png
vendored
Before Width: | Height: | Size: 725 KiB |
@@ -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
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 3.8 KiB |
@@ -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
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 3.8 KiB |
@@ -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
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 4.6 KiB |
@@ -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
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 4.5 KiB |
Before Width: | Height: | Size: 7.3 KiB |
Before Width: | Height: | Size: 2.0 KiB |
@@ -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
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 6.0 KiB |
@@ -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
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 2.7 KiB |
@@ -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
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 3.8 KiB |
@@ -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
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 5.3 KiB |
Before Width: | Height: | Size: 8.5 KiB |
Before Width: | Height: | Size: 2.7 KiB |
@@ -9,7 +9,7 @@
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "5@3x.png",
|
||||
"filename" : "飘窗bg@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
BIN
YuMi/Assets.xcassets/middle/gift_combo_flag_bg.imageset/飘窗bg@3x.png
vendored
Normal file
After Width: | Height: | Size: 24 KiB |
@@ -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
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 2.2 KiB |
@@ -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;
|
||||
|
@@ -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];
|
||||
|
@@ -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];
|
||||
|
@@ -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];
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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];
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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;
|
||||
|
@@ -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];
|
||||
}
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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];
|
||||
|
||||
|
@@ -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);
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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) {
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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];
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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
|
||||
|
||||
|
@@ -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];
|
||||
}
|
||||
}
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -257,7 +257,7 @@
|
||||
|
||||
- (UIImageView *)logoImageView {
|
||||
if (!_logoImageView) {
|
||||
_logoImageView = [self createImageView:@"exchange_gold_icon"];
|
||||
_logoImageView = [self createImageView:@"moli_money_icon"];
|
||||
}
|
||||
return _logoImageView;
|
||||
}
|
||||
|
@@ -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
|
142
YuMi/Modules/YMRoom/View/SendGiftView/View/CountdownRingView.m
Normal 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
|
@@ -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
|
223
YuMi/Modules/YMRoom/View/SendGiftView/View/GiftComboFlagView.m
Normal 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
|
@@ -7,10 +7,14 @@
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface GiftComboView : UIView
|
||||
|
||||
- (void)updateCount;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
|
@@ -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
|
||||
|
@@ -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];
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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];
|
||||
///在活动页面 判断是否显示 相亲加入的按钮 所以需要等用户进房成功之后才能获取 房间角色
|
||||
|