From 81a0094dbf26e34619be9e336b13aa7c0a8416ec Mon Sep 17 00:00:00 2001 From: edwinQQQ Date: Tue, 31 Dec 2024 15:09:44 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AE=8C=E6=88=90=20=E4=BB=A3=E5=85=85?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E4=BF=AE=E6=94=B9=20=EF=BD=9C=20=E5=BC=80?= =?UTF-8?q?=E5=B1=8F=20&=20=E9=A6=96=E9=A1=B5banner=20=E6=94=AF=E6=8C=81?= =?UTF-8?q?=20svga?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- YuMi.xcodeproj/project.pbxproj | 6 + YuMi/Appdelegate/AppDelegate+ThirdConfig.m | 9 +- .../diamond_help.imageset/Contents.json | 21 ++ .../diamond_help.imageset/切图 31@3x.png | Bin 0 -> 2219 bytes .../Contents.json | 21 ++ .../椭圆 6@3x.png | Bin 0 -> 86671 bytes YuMi/CustomUI/Adbvertise/AdvertiseModel.h | 20 +- YuMi/CustomUI/Adbvertise/AdvertiseModel.m | 13 +- YuMi/CustomUI/Adbvertise/XPAdImageTool.m | 39 ++-- YuMi/CustomUI/Adbvertise/XPAdvertiseView.h | 5 +- YuMi/CustomUI/Adbvertise/XPAdvertiseView.m | 69 +++++- YuMi/Modules/YMMine/Model/RechargeUserModel.h | 29 +++ YuMi/Modules/YMMine/Model/RechargeUserModel.m | 19 ++ .../View/GiveDiamond/Api/Api+GiveDiamond.h | 3 + .../View/GiveDiamond/Api/Api+GiveDiamond.m | 3 + .../Presenter/XPMineGiveDiamondPresenter.h | 3 + .../Presenter/XPMineGiveDiamondPresenter.m | 15 +- .../Protocol/XPMineGiveDiamondProtocol.h | 5 +- .../View/Cell/XPMineChooseGiveDiamondView.m | 6 +- .../GiveDiamond/View/XPMineGiveDiamondVC.m | 217 ++++++++++++++++-- .../YMMine/View/XPMineViewController.m | 3 - .../YMNewHome/Model/HomeBannerInfoModel.h | 22 ++ .../YMNewHome/Model/HomeBannerInfoModel.m | 10 +- .../View/CustomView/XPNewHomeHeadView.m | 121 ++++++++++ .../YMNewHome/View/XPNewHomeViewController.m | 6 +- .../View/ActivityContainerView/RoomSideMenu.m | 105 ++++++--- .../LuckyGiftWinningBannerView.m | 36 ++- .../AnimationView/LuckyGiftWinningFlagView.m | 9 +- .../View/XPNetImageYYLabel.m | 12 - .../View/RoomMode/RoomModeViewController.m | 22 +- .../View/RoomPK/View/XPRoomPKPanelView.m | 7 +- .../View/StageView/MicroView/MicroView.m | 3 - .../YMRoom/View/XPRoomViewController.m | 17 ++ YuMi/Tools/File/UploadFile.h | 2 + YuMi/Tools/File/UploadFile.m | 30 +++ YuMi/ar.lproj/Localizable.strings | 2 + YuMi/en.lproj/Localizable.strings | 2 + YuMi/tr.lproj/Localizable.strings | 2 + YuMi/zh-Hant.lproj/Localizable.strings | 2 + 39 files changed, 801 insertions(+), 115 deletions(-) create mode 100644 YuMi/Assets.xcassets/1.0.34/diamond_help.imageset/Contents.json create mode 100644 YuMi/Assets.xcassets/1.0.34/diamond_help.imageset/切图 31@3x.png create mode 100644 YuMi/Assets.xcassets/1.0.34/luck_gift_flag_ball_BIG.imageset/Contents.json create mode 100644 YuMi/Assets.xcassets/1.0.34/luck_gift_flag_ball_BIG.imageset/椭圆 6@3x.png create mode 100644 YuMi/Modules/YMMine/Model/RechargeUserModel.h create mode 100644 YuMi/Modules/YMMine/Model/RechargeUserModel.m diff --git a/YuMi.xcodeproj/project.pbxproj b/YuMi.xcodeproj/project.pbxproj index 162a7a92..61c8a027 100644 --- a/YuMi.xcodeproj/project.pbxproj +++ b/YuMi.xcodeproj/project.pbxproj @@ -513,6 +513,7 @@ 4C815A172CFEB758002A46A6 /* SuperBlockViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C815A162CFEB758002A46A6 /* SuperBlockViewController.m */; }; 4CC6195A2CEC7770008C1EE8 /* MyDressingDataPresent.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CC619592CEC7770008C1EE8 /* MyDressingDataPresent.m */; }; 4CC6195D2CEC996E008C1EE8 /* MyDressingDataModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CC6195C2CEC996E008C1EE8 /* MyDressingDataModel.m */; }; + 4CE3A9462D22754C003F0796 /* RechargeUserModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CE3A9452D22754C003F0796 /* RechargeUserModel.m */; }; 4CEB9EA72D09643E00443480 /* UserRoomCardViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CEB9EA62D09643E00443480 /* UserRoomCardViewController.m */; }; 4CEB9EAA2D097E8400443480 /* MoliAvatar.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CEB9EA92D097E8400443480 /* MoliAvatar.m */; }; 4CEB9EAD2D09AA0400443480 /* SexAgeLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CEB9EAC2D09AA0400443480 /* SexAgeLabel.m */; }; @@ -2629,6 +2630,8 @@ 4CC619592CEC7770008C1EE8 /* MyDressingDataPresent.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MyDressingDataPresent.m; sourceTree = ""; }; 4CC6195B2CEC996E008C1EE8 /* MyDressingDataModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MyDressingDataModel.h; sourceTree = ""; }; 4CC6195C2CEC996E008C1EE8 /* MyDressingDataModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MyDressingDataModel.m; sourceTree = ""; }; + 4CE3A9442D22754C003F0796 /* RechargeUserModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RechargeUserModel.h; sourceTree = ""; }; + 4CE3A9452D22754C003F0796 /* RechargeUserModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RechargeUserModel.m; sourceTree = ""; }; 4CEB9EA52D09643E00443480 /* UserRoomCardViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UserRoomCardViewController.h; sourceTree = ""; }; 4CEB9EA62D09643E00443480 /* UserRoomCardViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UserRoomCardViewController.m; sourceTree = ""; }; 4CEB9EA82D097E8400443480 /* MoliAvatar.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MoliAvatar.h; sourceTree = ""; }; @@ -11089,6 +11092,8 @@ 54C9A11E2C3DA08000C6D970 /* XPMineGamePartnerInfoModel.m */, 54CE5EF72CCA4A2600A67898 /* LocationModel.h */, 54CE5EF82CCA4A2600A67898 /* LocationModel.m */, + 4CE3A9442D22754C003F0796 /* RechargeUserModel.h */, + 4CE3A9452D22754C003F0796 /* RechargeUserModel.m */, ); path = Model; sourceTree = ""; @@ -12200,6 +12205,7 @@ E8A3540A28FEC0510014A784 /* XPWishGiftListView.m in Sources */, 238B37BF2AC55A2C00BFC9D5 /* XPTreasureFairyStoreResultView.m in Sources */, E88863CF278EC393004BCFAB /* XPAcrossRoomPKPrizeView.m in Sources */, + 4CE3A9462D22754C003F0796 /* RechargeUserModel.m in Sources */, 239D0FFD2C05D086002977CE /* MSRoomGameQuitGameView.m in Sources */, 23E9EA8E2A84BC9000B792F2 /* XPMineUserInfoHeaderTagCell.m in Sources */, E87DF5082A42CE79009C1185 /* XPInRoomRecordPresenter.m in Sources */, diff --git a/YuMi/Appdelegate/AppDelegate+ThirdConfig.m b/YuMi/Appdelegate/AppDelegate+ThirdConfig.m index fe6b8d97..43f1a78b 100644 --- a/YuMi/Appdelegate/AppDelegate+ThirdConfig.m +++ b/YuMi/Appdelegate/AppDelegate+ThirdConfig.m @@ -179,10 +179,12 @@ UIKIT_EXTERN NSString * adImageName; } if (isExist) {// 图片存在 - if ([kUserDefaults integerForKey:@"adShow"] > 4) { + if ([kUserDefaults integerForKey:@"adShow"] > 4 || [kUserDefaults integerForKey:@"adShow"] == 0) { @kWeakify(self); AdvertiseModel *info = [XPAdImageTool.shareImageTool getAdInfoFromCacheInMainWith:adName]; XPAdvertiseView *advertiseView = [[XPAdvertiseView alloc] initWithFrame:self.window.bounds]; + advertiseView.type = info.type; + advertiseView.fileModel = info.fillVo; advertiseView.filePath = filePath; advertiseView.dismissHandler = ^(BOOL shouldJump) { @kStrongify(self) @@ -217,7 +219,10 @@ UIKIT_EXTERN NSString * adImageName; } } break; - case SplashInfoSkipTypeWeb: { + case SplashInfoSkipTypeWeb: + case SplashInfoSkipTypeWeb_CP: + case SplashInfoSkipTypeWeb_Custom: + case SplashInfoSkipTypeWeb_WeekStar: { // 跳转 H5 if (info.link.length > 0) { XPWebViewController *webView = [[XPWebViewController alloc] initWithRoomUID:nil]; diff --git a/YuMi/Assets.xcassets/1.0.34/diamond_help.imageset/Contents.json b/YuMi/Assets.xcassets/1.0.34/diamond_help.imageset/Contents.json new file mode 100644 index 00000000..777706f2 --- /dev/null +++ b/YuMi/Assets.xcassets/1.0.34/diamond_help.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "切图 31@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/YuMi/Assets.xcassets/1.0.34/diamond_help.imageset/切图 31@3x.png b/YuMi/Assets.xcassets/1.0.34/diamond_help.imageset/切图 31@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..8fdd4c7da8c378d462b9581be917801462729bb5 GIT binary patch literal 2219 zcmV;c2vqlpP)Px-Wl2OqRA@u(T6t^~=N13GZ@h=WP9lzgp;gr?38+a?MM#v;Ak|gGvG(kEZM-3E zRTbqR9157Cib_pgH-C^uNF)eC2uZ1$ri3Nfo>|*K8sVy?X+#NX38_e0^^i);Rg{Fo zyE{AIE8iaJ#@*S&UQBB-|5^Ly&HKIYoxjh7G5XLL#f9s@{@+ga`iWgXvHuYdT$NB{ zX4%y!TsTI_+q61ju=>bd%Ku5Yt|I1@*0A$ zni(^PV;m7qNXE0AOqj=x9Xs98(IJPUC;QHbfJGvaYLDOl03T0PsZsH+>2K<1hqovtzN{;c$3xxZs8j?7)Eo<1feTR{;JR zfZ9(CARGtdMThteSygog7pn&+Pe!c1zCNjBjvP7S85kJwNGWR_O`A+o-Ve}2VBC=d z;sQVi$N4?qSg>HhrQv`p8<+~c*|YDtm0`ccps%DqN;ZMt2k~=>SZrsxp5DHFyQi-1 zGXaO4Cjl`NU{6Xb__qYlLr0Ik_2+U!vut3dxo-x;enB$sBO<}TDFSxdacm8T^^?Q# zZuT9^vOe!HJwm`z2BtEz6of+r&!dL1=)H1umjz6P-(W0$Kr-%Cpg?q<87uuB(G>^; z;^lnUO}4ME&u7~*Bnex=JRt+_ch!F1f^x#LWMHX6;TyLLU?UxUbRLkaLc!p!LV%*t z=s1;6$*L;9lB-H4V?u}vx~`{+iQCg%#G8P?m|J2jq^Isx~9a2uHF(hlJPFy3d-evw?Z$p(0%&!cs?h2P%Z-p^@Cxru>=0IFRK z|CoT+HG$>2uAj>%qrx(7JM93iOBEExVd*5AT3T8LiiLeiz&g$7V+3qVE8}-Gf)NY` z|CUdAG#Z_hWc25h@5>CFB=CC#8qdII0ZaohE~O1Pn2dW`!{LSJ^XZF3qSL)T9AMz~ zjQsLuLw|n6z|@%J^;iEsJ5gvPnu5UwGrtl2HD2GvpD@sx$-_S~V>3y+Q-z$GA$xjy zCMG4d67l1oOeutyZ>p_%w7$MRmQQcDWvyVQt?AUpi9~Ghu43a?(G%O-9bGI4d(wvD z_?dwZW-nW|%+6;(XEb`RV01ELDiKaHp*f`Mhlk2Cv*@y{`2-QkH1{(CqSY`Oex2W8 zYQm{LoQ(p>Xl-fIUn_KK1%W9Kcbh%?L71OO{I*aq_>60^cUx^l^kV=X0`_=4+QWfB z;NyJqrfJqn63<^LBwvRbjEUDa1%uDIR!K9u8o;J>-^S}rM&rUlTR}l!k-omk9@}{n zz%2kiWR2!EH#QzG0Bju*ZOHuIVaEqIgu`LSy)ej)0IvezFys5pP5M)Ax?i)b+cl-D+x?BZd+nE0cw9!zWTdHv_{th(NaLEH!21!Hx!9z3|;+Q*3;S3a|b!B z`j#SpM%JK*j8uwwY6}_qvt?NXpc25kENcyz)JUaj;>boSrDNz2Y{v%gE;o$2%%~ch zo(7;w`udQeZz;z)itM?$Zrag`4Z-T;L)R7}URh{Zb?skCxmdBlzA6!IXlOW94lv8= zH5``RsU}gWwI$U*au&@}#-DPGE+(61u3!T6rF0acGK*#^9LuBza*b7a+G$yH1%wJk zu)w-dW8+(;Ttr-TYG5dtqqszX+L{ZHIXPvzmZ81C;MBldPCqowo+Vf4aK)Wm9Wp1A zYr~@7`uh5ANZ8JcS-OB3uOt&Sj}>e5qe8!By`PUT6^xahB7~`BS$8FwHWNWG;XBQ` ze#kAiRQSbg8KTi5O#c&FpQgAK$H-8-8t-spuGG7xc_?*pVHo#aa08_nDUS~;8Ca^g z#8IQTl|gQo5`a9Rk@m#Ez(4!k$R2k7P}RbC_ALCU8LSq`{UAJi&99Miy?*`3l0A`*(<9bKhwGUX;5ZO=Bwg tt?R%l>CMs5b^XLf!^@TY#+W^^e*->xdUI##n}7fS002ovPDHLkV1f-=A}jy^ literal 0 HcmV?d00001 diff --git a/YuMi/Assets.xcassets/1.0.34/luck_gift_flag_ball_BIG.imageset/Contents.json b/YuMi/Assets.xcassets/1.0.34/luck_gift_flag_ball_BIG.imageset/Contents.json new file mode 100644 index 00000000..6f0746d0 --- /dev/null +++ b/YuMi/Assets.xcassets/1.0.34/luck_gift_flag_ball_BIG.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "椭圆 6@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/YuMi/Assets.xcassets/1.0.34/luck_gift_flag_ball_BIG.imageset/椭圆 6@3x.png b/YuMi/Assets.xcassets/1.0.34/luck_gift_flag_ball_BIG.imageset/椭圆 6@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..d23ad3ab3d9b31fc48a64c6cb026085a253472be GIT binary patch literal 86671 zcmV)8K*qm`P)Tt<<00001b5ch_0Itp) z=>PyA07*naRCr$Oy;+lG=XE8vzBAq-=d7#&g(?6AfB*rK5(S0WExEgCKR7}Ue$-#^ z-!T0*{1^1q}sgVDC^c2g83N~8dg00|H^psF$}hdZ9>v)11G`_8!us4bZo3P2U& z;^uhsPG_C9*Is*VhiCu3vCn|_aF-tZ@N;k9yZkf!GQaoFeLdc!bMkY~{(Xa-U=%lM&up5P4tkC4d2*+zm3Bsc#`; zY3=i_NRi|T+B^aOYqJE2PtcC_+GQ+%0Avnr>cIcxU)DcUX~Tmb@U16|AZt9jwnNu+ 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 WX!TETme$Vz0000 + +@property(nonatomic, copy) NSString *loverNick; +@property(nonatomic, copy) NSString *loverErbanNo; +@property(nonatomic, copy) NSString *loverAvatar; +@property(nonatomic, copy) NSString *nick; +@property(nonatomic, copy) NSString *erbanNo; +@property(nonatomic, copy) NSString *avatar; +@property(nonatomic, copy) NSString *picUrl; +@property(nonatomic, copy) NSString *giftName; +@property(nonatomic, copy) NSString *giftId; + +@end + @interface AdvertiseModel : PIBaseModel @property (nonatomic, strong) NSString *link; -@property (nonatomic, assign) SplashInfoSkipType type;// 1跳app页面,2跳聊天室,3跳h5页面 +@property (nonatomic, assign) SplashInfoSkipType type;// 1跳app页面,2跳聊天室,3跳h5页面, @property (nonatomic, copy) NSString *pict; +@property(nonatomic, strong) AdvertiseFillModel *fillVo; @end diff --git a/YuMi/CustomUI/Adbvertise/AdvertiseModel.m b/YuMi/CustomUI/Adbvertise/AdvertiseModel.m index 09d8506a..48f80724 100644 --- a/YuMi/CustomUI/Adbvertise/AdvertiseModel.m +++ b/YuMi/CustomUI/Adbvertise/AdvertiseModel.m @@ -7,6 +7,17 @@ #import "AdvertiseModel.h" -@implementation AdvertiseModel +@implementation AdvertiseFillModel + + +@end + +@implementation AdvertiseModel + ++ (NSDictionary *)objectClassInArray { + return @{ + @"fillVo": [AdvertiseFillModel class], + }; +} @end diff --git a/YuMi/CustomUI/Adbvertise/XPAdImageTool.m b/YuMi/CustomUI/Adbvertise/XPAdImageTool.m index 52bebc9e..d541946a 100644 --- a/YuMi/CustomUI/Adbvertise/XPAdImageTool.m +++ b/YuMi/CustomUI/Adbvertise/XPAdImageTool.m @@ -7,6 +7,7 @@ #import "XPAdImageTool.h" #import +#import "UploadFile.h" #define CACHENAME @"XPUserCache" @@ -100,20 +101,32 @@ static XPAdImageTool* tool; */ - (void)downloadAdImageWithUrl:(NSString *)imageUrl imageName:(NSString *)imageName { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + NSString *filePath = [self getFilePathWithImageName:imageName]; // 保存文件的名称 + + if ([imageUrl.lowercaseString hasSuffix:@"svga"]) { + @kWeakify(self); + [[UploadFile share] download:imageUrl path:filePath complete:^{ + @kStrongify(self); + [self deleteOldImage]; + [[NSUserDefaults standardUserDefaults] setValue:imageName forKey:adImageName]; + [[NSUserDefaults standardUserDefaults] synchronize]; + } failure:^{ + @kStrongify(self); + [self deleteOldImage]; + }]; + } else { + NSString *encode = [imageUrl stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]; + NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:encode]]; + UIImage *image = [UIImage imageWithData:data]; - NSString *encode = [imageUrl stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]; - NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:encode]]; - UIImage *image = [UIImage imageWithData:data]; - - NSString *filePath = [self getFilePathWithImageName:imageName]; // 保存文件的名称 - if ([UIImagePNGRepresentation(image) writeToFile:filePath atomically:YES]) {// 保存成功 - [self deleteOldImage]; - [[NSUserDefaults standardUserDefaults] setValue:imageName forKey:adImageName]; - [[NSUserDefaults standardUserDefaults] synchronize]; - }else{ - [self deleteOldImage]; - } - + if ([UIImagePNGRepresentation(image) writeToFile:filePath atomically:YES]) {// 保存成功 + [self deleteOldImage]; + [[NSUserDefaults standardUserDefaults] setValue:imageName forKey:adImageName]; + [[NSUserDefaults standardUserDefaults] synchronize]; + }else{ + [self deleteOldImage]; + } + } }); } diff --git a/YuMi/CustomUI/Adbvertise/XPAdvertiseView.h b/YuMi/CustomUI/Adbvertise/XPAdvertiseView.h index 2b150fee..81de7eff 100644 --- a/YuMi/CustomUI/Adbvertise/XPAdvertiseView.h +++ b/YuMi/CustomUI/Adbvertise/XPAdvertiseView.h @@ -6,7 +6,7 @@ // #import - +#import "AdvertiseModel.h" NS_ASSUME_NONNULL_BEGIN @interface XPAdvertiseView : UIView @@ -16,7 +16,8 @@ NS_ASSUME_NONNULL_BEGIN /** 图片路径*/ @property (nonatomic, copy) NSString *filePath; - +@property(nonatomic, assign) SplashInfoSkipType type; +@property(nonatomic, strong) AdvertiseFillModel *fileModel; @property (nonatomic, strong) UIImage *adImage; @property (nonatomic, copy) void(^dismissHandler)(BOOL shouldJump); //闪屏消失回调 diff --git a/YuMi/CustomUI/Adbvertise/XPAdvertiseView.m b/YuMi/CustomUI/Adbvertise/XPAdvertiseView.m index 90f15a55..3e9b8337 100644 --- a/YuMi/CustomUI/Adbvertise/XPAdvertiseView.m +++ b/YuMi/CustomUI/Adbvertise/XPAdvertiseView.m @@ -8,6 +8,7 @@ #import "XPAdvertiseView.h" #import "AppDelegate.h" //tool +#import #import #import #import "YUMIMacroUitls.h" @@ -18,7 +19,9 @@ NSString *const adUrl = @"adUrl"; // 广告显示的时间 static int const showtime = 3; -@interface XPAdvertiseView() +@interface XPAdvertiseView() + +@property(nonatomic, strong) SVGAImageView *svgaView; @property (nonatomic, strong) UIImageView *adView;//广告图片 @@ -33,6 +36,8 @@ static int const showtime = 3; @end +// TODO: 处理不同类型的 svga 内容嵌入 | 处理播放 SVGA 时的点击事件 | 处理不同类型的播放时间 + @implementation XPAdvertiseView #pragma mark - Initialize Methods @@ -94,6 +99,7 @@ static int const showtime = 3; // GCD倒计时方法 - (void)gcdCoundownHander { __block int timeout = showtime; + dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_source_t _timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue); dispatch_source_set_timer(_timer, DISPATCH_TIME_NOW, 1.0 * NSEC_PER_SEC, 0); //每秒执行 @@ -170,8 +176,62 @@ static int const showtime = 3; #pragma mark - Setter - (void)setFilePath:(NSString *)filePath { _filePath = filePath; - UIImage *image = [UIImage imageWithContentsOfFile:filePath]; - _adView.image = [image cutImage:[UIScreen mainScreen].bounds.size]; + + if (self.type == SplashInfoSkipTypeWeb_CP || self.type == SplashInfoSkipTypeWeb_Custom || self.type == SplashInfoSkipTypeWeb_WeekStar) { + _svgaView = [[SVGAImageView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, KScreenHeight)]; + _svgaView.delegate = self; + UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onTapAdViewAction)]; + [_svgaView addGestureRecognizer:tap]; + [self addSubview:_svgaView]; + SVGAParser *p = [[SVGAParser alloc] init]; + @kWeakify(self); + [p parseWithURL:[[NSURL alloc] initFileURLWithPath:filePath] completionBlock:^(SVGAVideoEntity * _Nullable videoItem) { + @kStrongify(self); + if (videoItem) { + self.svgaView.autoPlay = YES; + self.svgaView.clearsAfterStop = YES; + self.svgaView.videoItem = videoItem; + + if (self.fileModel) { + [self updateSvgaImage:self.fileModel.avatar key:@"avatar"]; + [self updateSvgaImage:self.fileModel.picUrl key:@"gift"]; + [self updateSvgaImage:self.fileModel.avatar key:@"avatar_1"]; + [self updateSvgaImage:self.fileModel.loverAvatar key:@"avatar_2"]; + + [self updateSvgaText:[NSString stringWithFormat:@"ID: %@", self.fileModel.erbanNo] key:@"id"]; + [self updateSvgaText:self.fileModel.giftName key:@"name"]; + [self updateSvgaText:[NSString stringWithFormat:@"ID: %@", self.fileModel.erbanNo] key:@"id_1"]; + [self updateSvgaText:[NSString stringWithFormat:@"ID: %@", self.fileModel.loverErbanNo] key:@"id_2"]; + } + [self.svgaView startAnimation]; + } + } failureBlock:^(NSError * _Nullable error) { + @kStrongify(self); + UIImage *image = [UIImage imageWithContentsOfFile:filePath]; + self.adView.image = [image cutImage:[UIScreen mainScreen].bounds.size]; + }]; + } else { + UIImage *image = [UIImage imageWithContentsOfFile:filePath]; + self.adView.image = [image cutImage:[UIScreen mainScreen].bounds.size]; + } +} + +- (void)updateSvgaImage:(NSString *)imagePath key:(NSString *)key { + if (self.svgaView && ![NSString isEmpty:imagePath] && ![NSString isEmpty:key]) { + [self.svgaView setImageWithURL:[NSURL URLWithString:imagePath] forKey:key]; + } +} + +- (void)updateSvgaText:(NSString *)content key:(NSString *)key { + if (self.svgaView && ![NSString isEmpty:content] && ![NSString isEmpty:key]) { + NSAttributedString *string = [[NSAttributedString alloc] initWithString:content + attributes:@{ + NSFontAttributeName: kFontMedium(36), + NSForegroundColorAttributeName: UIColorFromRGB(0xF9F8CF) + }]; + [self.svgaView setAttributedText:string + forKey:key]; + } } - (void)setAdImage:(UIImage *)adImage { @@ -180,6 +240,9 @@ static int const showtime = 3; } +#pragma mark - SVGAPlayerDelegate + + #pragma mark - Getter - (UIWindow *)window { diff --git a/YuMi/Modules/YMMine/Model/RechargeUserModel.h b/YuMi/Modules/YMMine/Model/RechargeUserModel.h new file mode 100644 index 00000000..76adf688 --- /dev/null +++ b/YuMi/Modules/YMMine/Model/RechargeUserModel.h @@ -0,0 +1,29 @@ +// +// RechargeUserModel.h +// YuMi +// +// Created by P on 2024/12/30. +// + +#import "PIBaseModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface RechargeUserModel : PIBaseModel + +@property(nonatomic, copy) NSString *avatar; +@property(nonatomic, copy) NSString *erbanNo; +@property(nonatomic, assign) NSInteger giveGold; +@property(nonatomic, copy) NSString *id; +@property(nonatomic, assign) BOOL isOnline; +@property(nonatomic, copy) NSString *nick; +@property(nonatomic, assign) NSInteger roomId; +@property(nonatomic, assign) NSInteger starLevel; +@property(nonatomic, assign) NSInteger type; +@property(nonatomic, assign) NSInteger uid; + ++ (RechargeUserModel *)testModel; + +@end + +NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMMine/Model/RechargeUserModel.m b/YuMi/Modules/YMMine/Model/RechargeUserModel.m new file mode 100644 index 00000000..3ee42a10 --- /dev/null +++ b/YuMi/Modules/YMMine/Model/RechargeUserModel.m @@ -0,0 +1,19 @@ +// +// RechargeUserModel.m +// YuMi +// +// Created by P on 2024/12/30. +// + +#import "RechargeUserModel.h" + +@implementation RechargeUserModel + ++ (RechargeUserModel *)testModel { + RechargeUserModel *model = [[RechargeUserModel alloc] init]; + model.starLevel = 3; + + return model; +} + +@end diff --git a/YuMi/Modules/YMMine/View/GiveDiamond/Api/Api+GiveDiamond.h b/YuMi/Modules/YMMine/View/GiveDiamond/Api/Api+GiveDiamond.h index fedb690a..471ad337 100644 --- a/YuMi/Modules/YMMine/View/GiveDiamond/Api/Api+GiveDiamond.h +++ b/YuMi/Modules/YMMine/View/GiveDiamond/Api/Api+GiveDiamond.h @@ -43,6 +43,9 @@ NS_ASSUME_NONNULL_BEGIN /// @param giftId 礼物id /// @param giftNum 礼物数量 +(void)giveGift:(HttpRequestHelperCompletion)completion toUid:(NSString *)toUid giftId:(NSString *)giftId giftNum:(NSString *)giftNum; + ++(void)rechargeUserInfo:(HttpRequestHelperCompletion)completion; + @end NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMMine/View/GiveDiamond/Api/Api+GiveDiamond.m b/YuMi/Modules/YMMine/View/GiveDiamond/Api/Api+GiveDiamond.m index d26e0cb6..db3b63f5 100644 --- a/YuMi/Modules/YMMine/View/GiveDiamond/Api/Api+GiveDiamond.m +++ b/YuMi/Modules/YMMine/View/GiveDiamond/Api/Api+GiveDiamond.m @@ -25,4 +25,7 @@ +(void)giveGift:(HttpRequestHelperCompletion)completion toUid:(NSString *)toUid giftId:(NSString *)giftId giftNum:(NSString *)giftNum{ [self makeRequest:@"user/diamond/giveGift" method:HttpRequestHelperMethodPOST completion:completion, __FUNCTION__, toUid,giftId,giftNum, nil]; } ++(void)rechargeUserInfo:(HttpRequestHelperCompletion)completion { + [self makeRequest:@"recharge/user/info" method:HttpRequestHelperMethodGET completion:completion, __FUNCTION__, nil]; +} @end diff --git a/YuMi/Modules/YMMine/View/GiveDiamond/Presenter/XPMineGiveDiamondPresenter.h b/YuMi/Modules/YMMine/View/GiveDiamond/Presenter/XPMineGiveDiamondPresenter.h index 0ea70679..bec75e93 100644 --- a/YuMi/Modules/YMMine/View/GiveDiamond/Presenter/XPMineGiveDiamondPresenter.h +++ b/YuMi/Modules/YMMine/View/GiveDiamond/Presenter/XPMineGiveDiamondPresenter.h @@ -25,6 +25,9 @@ NS_ASSUME_NONNULL_BEGIN -(void)getPackGiftList; ///转赠礼物 -(void)giveGiftWithToUid:(NSString *)toUid giftId:(NSString *)giftId giftNum:(NSString *)giftNum; + +///充值代理信息 +- (void)rechargeUserInfo; @end NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMMine/View/GiveDiamond/Presenter/XPMineGiveDiamondPresenter.m b/YuMi/Modules/YMMine/View/GiveDiamond/Presenter/XPMineGiveDiamondPresenter.m index 9c021635..5b05f716 100644 --- a/YuMi/Modules/YMMine/View/GiveDiamond/Presenter/XPMineGiveDiamondPresenter.m +++ b/YuMi/Modules/YMMine/View/GiveDiamond/Presenter/XPMineGiveDiamondPresenter.m @@ -15,7 +15,7 @@ #import "XPMineGiveDiamondDetailsModel.h" #import "UserGiftWallInfoModel.h" #import "GiftInfoModel.h" - +#import "RechargeUserModel.h" #import "XPMineGiveDiamondProtocol.h" #import "XPHomeSearchProtocol.h" @@ -72,18 +72,31 @@ -(void)getPackGiftList{ NSString * uid = [AccountInfoStorage instance].getUid; NSString * ticket = [AccountInfoStorage instance].getTicket; + @kWeakify(self); [Api requestPackGiftList:[self createHttpCompletion:^(BaseModel * _Nonnull data) { + @kStrongify(self); NSArray * info = [GiftInfoModel modelsWithArray:data.data]; [[self getView] getPacketGiftListSuccess:info]; }fail:^(NSInteger code, NSString * _Nullable msg) { + @kStrongify(self); [[self getView] getPacketGiftListFail:msg]; }] uid:uid ticket:ticket]; } -(void)giveGiftWithToUid:(NSString *)toUid giftId:(NSString *)giftId giftNum:(NSString *)giftNum{ + @kWeakify(self); [Api giveGift:[self createHttpCompletion:^(BaseModel * _Nonnull data) { + @kStrongify(self); [[self getView] giveGiftSuccess]; }] toUid:toUid giftId:giftId giftNum:giftNum]; } + +- (void)rechargeUserInfo { + [Api rechargeUserInfo:[self createHttpCompletion:^(BaseModel * _Nonnull data) { + [[self getView] loadRechargeUserSuccess:[RechargeUserModel modelWithJSON:data.data]]; + } fail:^(NSInteger code, NSString * _Nullable msg) { + + } showLoading:YES errorToast:YES]]; +} @end diff --git a/YuMi/Modules/YMMine/View/GiveDiamond/Protocol/XPMineGiveDiamondProtocol.h b/YuMi/Modules/YMMine/View/GiveDiamond/Protocol/XPMineGiveDiamondProtocol.h index ffa92654..7d7db810 100644 --- a/YuMi/Modules/YMMine/View/GiveDiamond/Protocol/XPMineGiveDiamondProtocol.h +++ b/YuMi/Modules/YMMine/View/GiveDiamond/Protocol/XPMineGiveDiamondProtocol.h @@ -6,7 +6,7 @@ // #import -@class WalletInfoModel,XPMineGiveDiamondSearchModel,XPMineGiveDiamondDetailsModel,GiftInfoModel; +@class WalletInfoModel,XPMineGiveDiamondSearchModel,XPMineGiveDiamondDetailsModel,GiftInfoModel, RechargeUserModel; NS_ASSUME_NONNULL_BEGIN @protocol XPMineGiveDiamondProtocol @@ -37,6 +37,9 @@ NS_ASSUME_NONNULL_BEGIN - (void)getPacketGiftListFail:(NSString *)message; ///转赠礼物 -(void)giveGiftSuccess; + +- (void)loadRechargeUserSuccess:(RechargeUserModel *)userModel; + @end NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMMine/View/GiveDiamond/View/Cell/XPMineChooseGiveDiamondView.m b/YuMi/Modules/YMMine/View/GiveDiamond/View/Cell/XPMineChooseGiveDiamondView.m index 3740955a..f5ee543a 100644 --- a/YuMi/Modules/YMMine/View/GiveDiamond/View/Cell/XPMineChooseGiveDiamondView.m +++ b/YuMi/Modules/YMMine/View/GiveDiamond/View/Cell/XPMineChooseGiveDiamondView.m @@ -76,8 +76,6 @@ [self.typeStackView addArrangedSubview:self.diamondBtn]; [self.typeStackView addArrangedSubview:self.giftBtn]; - - [self addSubview:self.numIcon]; [self addSubview:self.diamondNumView]; [self addSubview:self.lineView]; @@ -85,9 +83,7 @@ [self addSubview:self.myDiamondNumView]; [self addSubview:self.confirmBtn]; [self addSubview:self.giveGiftView]; - - - + } - (void)initSubViewConstraints { [self.headView mas_makeConstraints:^(MASConstraintMaker *make) { diff --git a/YuMi/Modules/YMMine/View/GiveDiamond/View/XPMineGiveDiamondVC.m b/YuMi/Modules/YMMine/View/GiveDiamond/View/XPMineGiveDiamondVC.m index 75648269..60ed1e34 100644 --- a/YuMi/Modules/YMMine/View/GiveDiamond/View/XPMineGiveDiamondVC.m +++ b/YuMi/Modules/YMMine/View/GiveDiamond/View/XPMineGiveDiamondVC.m @@ -24,6 +24,8 @@ #import "XPHomeSearchProtocol.h" #import "DJDKMIMOMColor.h" +#import "RechargeUserModel.h" + @interface XPMineGiveDiamondVC () @property (nonatomic,strong) UITableView *tableView; @@ -35,12 +37,17 @@ @property(nonatomic, strong) UILabel *idLabel; @property(nonatomic, strong) UIStackView *starsStack; @property(nonatomic, strong) UIButton *helpButton; +@property(nonatomic, strong) UIButton *star_1; +@property(nonatomic, strong) UIButton *star_2; +@property(nonatomic, strong) UIButton *star_3; +@property(nonatomic, strong) UIButton *star_4; +@property(nonatomic, strong) UIButton *star_5; ///搜索 @property (nonatomic,strong) XPMineGiveDiamondSearchView *searchView; ///数据源 @property (nonatomic,strong) NSMutableArray *datasource; -@property (nonatomic,strong) UIView *headView; +//@property (nonatomic,strong) UIView *headView; ///搜索的id @property (nonatomic,copy) NSString *text; ///显示tag @@ -56,25 +63,95 @@ [self initSubViews]; [self initSubViewConstraints]; [self.presenter getGiveDiamondRecord]; + [self.presenter rechargeUserInfo]; } + - (void)initSubViews { self.view.backgroundColor = [UIColor whiteColor]; self.title = YMLocalizedString(@"XPMineGiveDiamondVC0"); + [self.view addSubview: self.infoContainer]; [self.view addSubview:self.searchView]; [self.view addSubview:self.tableView]; [self.view addSubview:self.tagView]; - + + [self.infoContainer addSubview:self.avatarImageView]; + [self.infoContainer addSubview:self.nameLabel]; + [self.infoContainer addSubview:self.icon1ImageView]; + [self.infoContainer addSubview:self.icon2ImageView]; + [self.infoContainer addSubview:self.idLabel]; + [self.infoContainer addSubview:self.starsStack]; + [self.infoContainer addSubview:self.helpButton]; } - (void)initSubViewConstraints { + [self.infoContainer mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.equalTo(self.view); + make.leading.trailing.equalTo(self.view).inset(15); + make.height.mas_equalTo(kGetScaleWidth(81)); + }]; + + [self.avatarImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.centerY.mas_equalTo(self.infoContainer); + make.leading.mas_equalTo(self.infoContainer).offset(12); + make.width.height.mas_equalTo(kGetScaleWidth(59)); + }]; + [self.nameLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.leading.mas_equalTo(self.avatarImageView.mas_trailing).offset(10); + make.top.mas_equalTo(self.avatarImageView); + make.height.mas_equalTo(22); + }]; + [self.icon1ImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.centerY.mas_equalTo(self.nameLabel); + make.leading.mas_equalTo(self.nameLabel.mas_trailing).offset(4); + make.size.mas_equalTo(CGSizeMake(38, 18)); + }]; + [self.icon2ImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.centerY.mas_equalTo(self.nameLabel); + make.leading.mas_equalTo(self.icon1ImageView.mas_trailing).offset(4); + make.size.mas_equalTo(CGSizeMake(38, 18)); + }]; + [self.idLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.leading.mas_equalTo(self.avatarImageView.mas_trailing).offset(10); + make.top.mas_equalTo(self.nameLabel.mas_bottom).offset(4); + make.height.mas_equalTo(18); + }]; + [self.starsStack mas_makeConstraints:^(MASConstraintMaker *make) { + make.leading.mas_equalTo(self.avatarImageView.mas_trailing).offset(10); + make.top.mas_equalTo(self.idLabel.mas_bottom).offset(4); + make.height.mas_equalTo(15); + }]; + + [self.star_1 mas_makeConstraints:^(MASConstraintMaker *make) { + make.size.mas_equalTo(CGSizeMake(15, 15)); + }]; + [self.star_2 mas_makeConstraints:^(MASConstraintMaker *make) { + make.size.mas_equalTo(CGSizeMake(15, 15)); + }]; + [self.star_3 mas_makeConstraints:^(MASConstraintMaker *make) { + make.size.mas_equalTo(CGSizeMake(15, 15)); + }]; + [self.star_4 mas_makeConstraints:^(MASConstraintMaker *make) { + make.size.mas_equalTo(CGSizeMake(15, 15)); + }]; + [self.star_5 mas_makeConstraints:^(MASConstraintMaker *make) { + make.size.mas_equalTo(CGSizeMake(15, 15)); + }]; + + [self.helpButton mas_makeConstraints:^(MASConstraintMaker *make) { + make.centerY.mas_equalTo(self.starsStack); + make.leading.mas_equalTo(self.starsStack.mas_trailing).offset(8); + make.size.mas_equalTo(CGSizeMake(22, 22)); + }]; + [self.searchView mas_makeConstraints:^(MASConstraintMaker *make) { - make.top.leading.trailing.equalTo(self.view); - make.height.mas_equalTo(kGetScaleWidth(32)); + make.top.equalTo(self.infoContainer.mas_bottom).offset(14); + make.leading.trailing.equalTo(self.view); + make.height.mas_equalTo(kGetScaleWidth(32)); }]; [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) { make.leading.trailing.mas_equalTo(self.view); make.bottom.mas_equalTo(-kGetScaleWidth(148)); - make.top.mas_equalTo(kGetScaleWidth(32)); + make.top.mas_equalTo(self.searchView.mas_bottom).offset(14); }]; [self.tagView mas_makeConstraints:^(MASConstraintMaker *make) { make.height.mas_equalTo(kGetScaleWidth(14)); @@ -82,6 +159,15 @@ make.bottom.mas_equalTo(-kGetScaleWidth(73)); }]; } + +- (void)didTapHelp { + TTAlertConfig *config = [[TTAlertConfig alloc]init]; + config.title = YMLocalizedString(@"1.0.33_text_16"); + config.message = YMLocalizedString(@"1.0.33_text_17"); + config.actionStyle = TTAlertActionConfirmStyle; + [TTPopup alertWithConfig:config showBorder:NO confirmHandler:^{} cancelHandler:^{}]; +} + #pragma mark -XPMineChooseGiveDiamondVCDelegate - (void)xpMineChooseGiveDiamondVCCompleteWithModel:(XPMineGiveDiamondModel *)model{ if(model != nil){ @@ -101,16 +187,17 @@ [self.tableView reloadData]; } } + #pragma mark - UITableViewDelegate -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ return self.datasource.count > 0 ? kGetScaleWidth(70) : self.tableView.frame.size.height; - } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return self.datasource.count > 0 ? self.datasource.count : 1; } + -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ if(self.datasource.count > 0){ XPMineGiveDiamondCell *cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPMineGiveDiamondCell class]) forIndexPath:indexPath]; @@ -131,13 +218,14 @@ vc.toUid = model.targetUid; [self.navigationController pushViewController:vc animated:YES]; } + #pragma mark - XPMineGiveDiamondProtocol -(void)getGiveDiamondListSuccess:(NSArray *)array{ self.datasource = [NSMutableArray arrayWithArray:array]; [self.tableView reloadData]; } -#pragma mark - XPHomeSearchProtocol +#pragma mark - XPHomeSearchProtocol -(void)searchGivePeopleWihtModel:(XPMineGiveDiamondSearchModel *)model{ [self hideHUD]; if(model != nil){ @@ -154,7 +242,6 @@ } } - -(void)searchEndWithText:(NSString *)text{ if(text.length == 0){ [self showErrorToast:YMLocalizedString(@"XPMineGiveDiamondSearchView1")]; @@ -164,6 +251,35 @@ [self showLoading]; [self.presenter searchGivePeopleWith:text]; } + +- (void)loadRechargeUserSuccess:(RechargeUserModel *)userModel { + if (!userModel) { + return; + } + + self.avatarImageView.imageUrl = userModel.avatar; + self.nameLabel.text = userModel.nick; + self.icon1ImageView.imageUrl = self.userInfo.userLevelVo.charmUrl; + self.icon2ImageView.imageUrl = self.userInfo.userLevelVo.experUrl; + self.idLabel.text = [NSString stringWithFormat:@"ID: %@", userModel.erbanNo]; + + if (userModel.starLevel > 0) { + [self.star_1 setSelected:YES]; + } + if (userModel.starLevel > 1) { + [self.star_2 setSelected:YES]; + } + if (userModel.starLevel > 2) { + [self.star_3 setSelected:YES]; + } + if (userModel.starLevel > 3) { + [self.star_4 setSelected:YES]; + } + if (userModel.starLevel > 4) { + [self.star_5 setSelected:YES]; + } +} + #pragma mark - Getters And Setters - (UITableView *)tableView { if (!_tableView) { @@ -173,7 +289,7 @@ _tableView.showsVerticalScrollIndicator = NO; _tableView.separatorStyle = UITableViewCellSeparatorStyleNone; _tableView.backgroundColor = [UIColor clearColor]; - _tableView.tableHeaderView = self.headView; +// _tableView.tableHeaderView = self.headView; [_tableView registerClass:[XPMineGiveDiamondCell class] forCellReuseIdentifier:NSStringFromClass([XPMineGiveDiamondCell class])]; [_tableView registerClass:[XPMineFriendEmptyTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPMineFriendEmptyTableViewCell class])]; } @@ -186,17 +302,17 @@ } return _searchView; } --(UIView *)headView{ - if (!_headView){ - _headView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, KScreenWidth, kGetScaleWidth(64))]; - UILabel *titleView = [[UILabel alloc]initWithFrame:CGRectMake(kGetScaleWidth(15), kGetScaleWidth(25), KScreenWidth - kGetScaleWidth(30), kGetScaleWidth(19))]; - titleView.text = YMLocalizedString(@"XPMineGiveDiamondVC1"); - titleView.font = [UIFont systemFontOfSize:kGetScaleWidth(16) weight:UIFontWeightMedium]; - titleView.textColor = [DJDKMIMOMColor mainTextColor]; - [_headView addSubview:titleView]; - } - return _headView; -} +//-(UIView *)headView{ +// if (!_headView){ +// _headView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, KScreenWidth, kGetScaleWidth(64))]; +// UILabel *titleView = [[UILabel alloc]initWithFrame:CGRectMake(kGetScaleWidth(15), kGetScaleWidth(25), KScreenWidth - kGetScaleWidth(30), kGetScaleWidth(19))]; +// titleView.text = YMLocalizedString(@"XPMineGiveDiamondVC1"); +// titleView.font = [UIFont systemFontOfSize:kGetScaleWidth(16) weight:UIFontWeightMedium]; +// titleView.textColor = [DJDKMIMOMColor mainTextColor]; +// [_headView addSubview:titleView]; +// } +// return _headView; +//} -(UILabel *)tagView{ if (!_tagView){ _tagView = [UILabel new]; @@ -210,6 +326,7 @@ - (UIView *)infoContainer { if (!_infoContainer) { _infoContainer = [[UIView alloc] init]; + _infoContainer.backgroundColor = UIColorFromRGB(0xf7f7f7); [_infoContainer setCornerRadius:10]; } return _infoContainer; @@ -219,6 +336,7 @@ if (!_avatarImageView) { _avatarImageView = [[NetImageView alloc] init]; _avatarImageView.contentMode = UIViewContentModeScaleAspectFill; + [_avatarImageView setCornerRadius:kGetScaleWidth(59/2)]; } return _avatarImageView; } @@ -253,9 +371,66 @@ return _icon2ImageView; } +- (UIStackView *)starsStack { + if (!_starsStack) { + _starsStack = [[UIStackView alloc] initWithArrangedSubviews:@[ + self.star_1, + self.star_2, + self.star_3, + self.star_4, + self.star_5, + ]]; + _starsStack.spacing = 4; + } + return _starsStack; +} + +- (UIButton *)star_1 { + if (!_star_1) { + _star_1 = [UIButton buttonWithType:UIButtonTypeCustom]; + [_star_1 setBackgroundImage:kImage(@"star_white") forState:UIControlStateNormal]; + [_star_1 setBackgroundImage:kImage(@"star_yellow") forState:UIControlStateSelected]; + } + return _star_1; +} +- (UIButton *)star_2 { + if (!_star_2) { + _star_2 = [UIButton buttonWithType:UIButtonTypeCustom]; + [_star_2 setBackgroundImage:kImage(@"star_white") forState:UIControlStateNormal]; + [_star_2 setBackgroundImage:kImage(@"star_yellow") forState:UIControlStateSelected]; + } + return _star_2; +} +- (UIButton *)star_3 { + if (!_star_3) { + _star_3 = [UIButton buttonWithType:UIButtonTypeCustom]; + [_star_3 setBackgroundImage:kImage(@"star_white") forState:UIControlStateNormal]; + [_star_3 setBackgroundImage:kImage(@"star_yellow") forState:UIControlStateSelected]; + } + return _star_3; +} +- (UIButton *)star_4 { + if (!_star_4) { + _star_4 = [UIButton buttonWithType:UIButtonTypeCustom]; + [_star_4 setBackgroundImage:kImage(@"star_white") forState:UIControlStateNormal]; + [_star_4 setBackgroundImage:kImage(@"star_yellow") forState:UIControlStateSelected]; + } + return _star_4; +} +- (UIButton *)star_5 { + if (!_star_5) { + _star_5 = [UIButton buttonWithType:UIButtonTypeCustom]; + [_star_5 setBackgroundImage:kImage(@"star_white") forState:UIControlStateNormal]; + [_star_5 setBackgroundImage:kImage(@"star_yellow") forState:UIControlStateSelected]; + } + return _star_5; +} + - (UIButton *)helpButton { if (!_helpButton) { - + _helpButton = [UIButton buttonWithType:UIButtonTypeCustom]; + [_helpButton setBackgroundImage:kImage(@"diamond_help") forState:UIControlStateNormal]; + [_helpButton addTarget:self action:@selector(didTapHelp) forControlEvents:UIControlEventTouchUpInside]; } return _helpButton; } diff --git a/YuMi/Modules/YMMine/View/XPMineViewController.m b/YuMi/Modules/YMMine/View/XPMineViewController.m index 683fc555..53990013 100644 --- a/YuMi/Modules/YMMine/View/XPMineViewController.m +++ b/YuMi/Modules/YMMine/View/XPMineViewController.m @@ -587,9 +587,6 @@ UIKIT_EXTERN NSString *kRequestTicket; [self.functionArray removeAllObjects]; [self.functionArray addObjectsFromArray:items]; -#if DEBUG - self.isHavePermission = YES; -#endif for (XPMineFunctionItemModel * _Nonnull obj in self.functionArray) { if(obj.skipType == XPMineItemType_My_Gift && self.isHavePermission == NO){ [self.functionArray removeObject:obj]; diff --git a/YuMi/Modules/YMNewHome/Model/HomeBannerInfoModel.h b/YuMi/Modules/YMNewHome/Model/HomeBannerInfoModel.h index 1f0cf14a..25968418 100644 --- a/YuMi/Modules/YMNewHome/Model/HomeBannerInfoModel.h +++ b/YuMi/Modules/YMNewHome/Model/HomeBannerInfoModel.h @@ -16,10 +16,29 @@ typedef NS_ENUM(NSUInteger, HomeBannerInfoSkipType) { HomeBannerInfoSkipType_Room = 2, /// 跳转h5 HomeBannerInfoSkipType_Web = 3, + /// SVGA + HomeBannerInfoSkipType_Web_CP = 4, + /// WeekStar + HomeBannerInfoSkipType_Web_WeekStar = 5, + HomeBannerInfoSkipType_Web_Custom = 6, /// 無跳轉 HomeBannerInfoSkipType_None = 100, }; +@interface HomeBannerFillVoInfoModel : PIBaseModel + +@property(nonatomic, copy) NSString *loverNick; +@property(nonatomic, copy) NSString *loverErbanNo; +@property(nonatomic, copy) NSString *loverAvatar; +@property(nonatomic, copy) NSString *nick; +@property(nonatomic, copy) NSString *erbanNo; +@property(nonatomic, copy) NSString *avatar; +@property(nonatomic, copy) NSString *picUrl; +@property(nonatomic, copy) NSString *giftName; +@property(nonatomic, copy) NSString *giftId; + +@end + @interface HomeBannerInfoModel : PIBaseModel ///ID @property (nonatomic,copy)NSString *bannerId; @@ -31,6 +50,9 @@ typedef NS_ENUM(NSUInteger, HomeBannerInfoSkipType) { @property (nonatomic, copy)NSString *skipUri; ///跳转的类型 @property (nonatomic, assign)HomeBannerInfoSkipType skipType; + +@property(nonatomic, strong) HomeBannerFillVoInfoModel *fillVo; + @end NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMNewHome/Model/HomeBannerInfoModel.m b/YuMi/Modules/YMNewHome/Model/HomeBannerInfoModel.m index 682417c0..ad625ed3 100644 --- a/YuMi/Modules/YMNewHome/Model/HomeBannerInfoModel.m +++ b/YuMi/Modules/YMNewHome/Model/HomeBannerInfoModel.m @@ -7,6 +7,14 @@ #import "HomeBannerInfoModel.h" -@implementation HomeBannerInfoModel +@implementation HomeBannerFillVoInfoModel @end + +@implementation HomeBannerInfoModel ++ (NSDictionary *)objectClassInArray { + return @{ + @"fillVo": [HomeBannerFillVoInfoModel class], + }; +} +@end diff --git a/YuMi/Modules/YMNewHome/View/CustomView/XPNewHomeHeadView.m b/YuMi/Modules/YMNewHome/View/CustomView/XPNewHomeHeadView.m index 02bf9982..bd81f5ad 100644 --- a/YuMi/Modules/YMNewHome/View/CustomView/XPNewHomeHeadView.m +++ b/YuMi/Modules/YMNewHome/View/CustomView/XPNewHomeHeadView.m @@ -9,6 +9,114 @@ #import #import "XPNewHomeItemCell.h" #import "PIPageControl.h" +#import + +@interface HomeBannerCell : UICollectionViewCell + +@property(nonatomic, assign) HomeBannerInfoSkipType type; +@property(nonatomic, strong) HomeBannerFillVoInfoModel *cellFillVoMode; +@property(nonatomic, strong) NSString *imageURLString; +@property(nonatomic, strong) NetImageView *imageView; +@property(nonatomic, strong) SVGAImageView *svgaImageView; +@property(nonatomic, strong) SVGAVideoEntity *videoItem; + +@end + +@implementation HomeBannerCell + +- (instancetype)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + _imageView = [[NetImageView alloc] init]; + [self.contentView addSubview:self.imageView]; + [self.imageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.mas_equalTo(self.contentView); + }]; + + _svgaImageView = [[SVGAImageView alloc] init]; + self.svgaImageView.loops = -1; + self.svgaImageView.autoPlay = YES; + self.svgaImageView.clearsAfterStop = NO; + [self.contentView addSubview:self.svgaImageView]; + [self.svgaImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.mas_equalTo(self.contentView); + }]; + } + return self; +} + +- (void)prepareForReuse { + [super prepareForReuse]; +} + +- (void)setImageURLString:(NSString *)imageURLString { + + if (self.type == HomeBannerInfoSkipType_Web_CP || + self.type == HomeBannerInfoSkipType_Web_Custom || + self.type == HomeBannerInfoSkipType_Web_WeekStar) { + self.imageView.hidden = YES; + if (self.videoItem) { + [self playSVGAWith:self.videoItem]; + } else { + SVGAParser *p = [[SVGAParser alloc] init]; + @kWeakify(self); + [p parseWithURL:[NSURL URLWithString:imageURLString] completionBlock:^(SVGAVideoEntity * _Nullable videoItem) { + @kStrongify(self); + if (videoItem) { + self.videoItem = videoItem; + [self playSVGAWith:videoItem]; + } + } failureBlock:^(NSError * _Nullable error) { + @kStrongify(self); + self.imageView.hidden = NO; + self.imageView.imageUrl = imageURLString; + }]; + } + } else { + self.imageView.hidden = NO; + self.imageView.imageUrl = imageURLString; + } +} + +- (void)playSVGAWith:(SVGAVideoEntity *)videoItem { + self.svgaImageView.videoItem = videoItem; + if (self.cellFillVoMode) { + [self updateSvgaImage:self.cellFillVoMode.avatar key:@"avatar"]; + [self updateSvgaImage:self.cellFillVoMode.picUrl key:@"gift"]; + [self updateSvgaImage:self.cellFillVoMode.avatar key:@"avatar_1"]; + [self updateSvgaImage:self.cellFillVoMode.loverAvatar key:@"avatar_2"]; + + [self updateSvgaText:[NSString stringWithFormat:@"ID: %@", self.cellFillVoMode.erbanNo] key:@"id"]; + [self updateSvgaText:self.cellFillVoMode.giftName key:@"name"]; + [self updateSvgaText:[NSString stringWithFormat:@"ID: %@", self.cellFillVoMode.erbanNo] key:@"id_1"]; + [self updateSvgaText:[NSString stringWithFormat:@"ID: %@", self.cellFillVoMode.loverErbanNo] key:@"id_2"]; + } + + [self.svgaImageView startAnimation]; +} + +- (void)updateSvgaImage:(NSString *)imagePath key:(NSString *)key { + if (self.svgaImageView && ![NSString isEmpty:imagePath] && ![NSString isEmpty:key]) { + [self.svgaImageView setImageWithURL:[NSURL URLWithString:imagePath] forKey:key]; + } +} + +- (void)updateSvgaText:(NSString *)content key:(NSString *)key { + if (self.svgaImageView && ![NSString isEmpty:content] && ![NSString isEmpty:key]) { + NSAttributedString *string = [[NSAttributedString alloc] initWithString:content + attributes:@{ + NSFontAttributeName: kFontMedium(30), + NSForegroundColorAttributeName: UIColorFromRGB(0xF9F8CF) + }]; + [self.svgaImageView setAttributedText:string + forKey:key]; + } +} + +@end + + @interface XPNewHomeHeadView () @property(nonatomic,strong) UICollectionView *collectionView; ///轮播图 @@ -44,6 +152,19 @@ }]; } #pragma mark - SDCycleScrollViewDelegate + +- (Class)customCollectionViewCellClassForCycleScrollView:(SDCycleScrollView *)view { + return [HomeBannerCell class]; +} + +- (void)setupCustomCell:(UICollectionViewCell *)cell forIndex:(NSInteger)index cycleScrollView:(SDCycleScrollView *)view { + HomeBannerCell *bannerCell = (HomeBannerCell *)cell; + HomeBannerInfoModel * bannerInfo = [self.bannerList xpSafeObjectAtIndex:index]; + bannerCell.type = bannerInfo.skipType; + bannerCell.cellFillVoMode = bannerInfo.fillVo; + bannerCell.imageURLString = bannerInfo.bannerPic; +} + - (void)cycleScrollView:(SDCycleScrollView *)cycleScrollView didSelectItemAtIndex:(NSInteger)index { HomeBannerInfoModel * bannerInfo = [self.bannerList xpSafeObjectAtIndex:index]; if(bannerInfo != nil && self.delegate && [self.delegate respondsToSelector:@selector(selectBannerListWithModel:)]){ diff --git a/YuMi/Modules/YMNewHome/View/XPNewHomeViewController.m b/YuMi/Modules/YMNewHome/View/XPNewHomeViewController.m index 1e8e8401..9d168028 100644 --- a/YuMi/Modules/YMNewHome/View/XPNewHomeViewController.m +++ b/YuMi/Modules/YMNewHome/View/XPNewHomeViewController.m @@ -790,7 +790,11 @@ XPHomeRecommendViewControllerDelegate> } } break; - case HomeBannerInfoSkipType_Web:{ + case HomeBannerInfoSkipType_Web: + case HomeBannerInfoSkipType_Web_CP: + case HomeBannerInfoSkipType_Web_Custom: + case HomeBannerInfoSkipType_Web_WeekStar: + { XPWebViewController *vc = [[XPWebViewController alloc] initWithRoomUID:nil]; vc.url = model.skipUri; [self.navigationController pushViewController:vc animated:YES]; diff --git a/YuMi/Modules/YMRoom/View/ActivityContainerView/RoomSideMenu.m b/YuMi/Modules/YMRoom/View/ActivityContainerView/RoomSideMenu.m index 71fed7e3..d9099cdf 100644 --- a/YuMi/Modules/YMRoom/View/ActivityContainerView/RoomSideMenu.m +++ b/YuMi/Modules/YMRoom/View/ActivityContainerView/RoomSideMenu.m @@ -27,13 +27,13 @@ #import "XPRoomAnimationView.h" #import "XPWebViewController.h" #import "XPRoomViewController.h" +#import "PIRoomActivityWebView.h" #import "BoomInfoViewController.h" #import "XPSailingViewController.h" #import "XCCurrentVCStackManager.h" #import "XPCandyTreeViewController.h" #import "XPFirstRechargeSuccessView.h" #import "XPArrangeMicViewController.h" -#import "PIRoomActivityWebView.h" #import "XPTreasureFairyViewController.h" UIKIT_EXTERN NSString *kShowFirstRechargeView; @@ -51,6 +51,7 @@ UIKIT_EXTERN NSString *kShowFirstRechargeView; @property (nonatomic,strong) UIImageView *joinView; @property(nonatomic,strong) PIRoomEnterRedPacketView *redPacketView; +@property(nonatomic, strong) UIView *scrollContain; @property(nonatomic, strong) UIScrollView *scrollView; @property (nonatomic,strong) SDCycleScrollView *cycleScrollView; @property (nonatomic, weak) id hostDelegate; @@ -69,8 +70,6 @@ UIKIT_EXTERN NSString *kShowFirstRechargeView; @end -// TODO: 补充红包视图 - @implementation RoomSideMenu - (void)dealloc { @@ -92,8 +91,11 @@ UIKIT_EXTERN NSString *kShowFirstRechargeView; #pragma mark - Setup - (void)setupViews { + self.scrollContain = [[UIView alloc] init]; + self.scrollContain.backgroundColor = [UIColor purpleColor]; [self addSubview:self.cycleScrollView]; [self addSubview:self.scrollView]; + [self.scrollView addSubview:self.scrollContain]; [self addSubview:self.expandButton]; [self.cycleScrollView mas_makeConstraints:^(MASConstraintMaker *make) { @@ -130,7 +132,13 @@ UIKIT_EXTERN NSString *kShowFirstRechargeView; } - (void)updateMenuItem:(UIView *)itemView isRemove:(BOOL)isRemove { + if (itemView.tag == 0) { + return; + } if (isRemove) { + if (itemView.superview == nil) { + return; + } if ([self.menuItemViews containsObject:itemView]) { [self.menuItemViews removeObject:itemView]; } @@ -151,7 +159,7 @@ UIKIT_EXTERN NSString *kShowFirstRechargeView; } }]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [self.menuItemViewsSubject sendNext:self.menuItemViews]; }); } @@ -200,29 +208,53 @@ UIKIT_EXTERN NSString *kShowFirstRechargeView; } - (void)updateScrollView:(NSArray *)data { - // 清空当前 scrollView 的 subviews [self.scrollView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; + if (data.count == 0) { + return; + } - // 设置 contentSize CGFloat inset = 15; - CGFloat width = self.scrollView.bounds.size.width - 30; - self.scrollView.contentSize = CGSizeMake(self.scrollView.bounds.size.width, - MAX(self.scrollView.bounds.size.height, width * data.count)); + CGFloat spacing = 4; + CGSize size = CGSizeMake(self.scrollView.bounds.size.width-30, self.scrollView.bounds.size.width-30); - // 动态添加 subviews - CGFloat yOffset = self.scrollView.contentSize.height; // 从底部开始布局 +// NSLog(@"--------------- blkaa 1 blkaa: %@", [NSValue valueWithCGRect:self.scrollView.frame]); + + CGFloat totalHeight = size.height * data.count + spacing * data.count; + if (totalHeight > self.scrollView.bounds.size.height) { + [self.scrollView mas_remakeConstraints:^(MASConstraintMaker *make) { + make.top.mas_equalTo(self.cycleScrollView.mas_bottom); + make.bottom.leading.trailing.mas_equalTo(self); + }]; + } else { + [self.scrollView mas_remakeConstraints:^(MASConstraintMaker *make) { + make.bottom.leading.trailing.mas_equalTo(self); + make.height.mas_equalTo(totalHeight); + }]; + } + + [self layoutIfNeeded]; + +// NSLog(@"--------------- blkaa 2 blkaa: %@", [NSValue valueWithCGRect:self.scrollView.frame]); + + self.scrollView.contentSize = CGSizeMake(self.scrollView.bounds.size.width, totalHeight); + + UIView *lastItemView = nil; + CGFloat yOffset = totalHeight; // 从底部开始布局 for (UIView *view in data) { + yOffset -= size.height; [self.scrollView addSubview:view]; - yOffset -= width; - view.frame = CGRectMake(inset, yOffset, width, width); - [view layoutIfNeeded]; - } - - // 滚动到底部 - if (self.scrollView.contentSize.height > self.scrollView.bounds.size.height) { - [self.scrollView setContentOffset:CGPointMake(0, self.scrollView.contentSize.height - self.scrollView.bounds.size.height) - animated:NO]; + view.frame = CGRectMake(inset, yOffset, size.width, size.height); + yOffset -= spacing; + + lastItemView = view; +// NSLog(@"--------------- blkaa %@ blkaa: %@", @(view.tag), [NSValue valueWithCGRect:view.frame]); } + dispatch_async(dispatch_get_main_queue(), ^{ + CGFloat bottomOffset = self.scrollView.contentSize.height - self.scrollView.bounds.size.height; + if (bottomOffset > 0) { + [self.scrollView setContentOffset:CGPointMake(0, bottomOffset) animated:YES]; + } + }); } - (void)configLittleGameActivity { @@ -401,6 +433,9 @@ UIKIT_EXTERN NSString *kShowFirstRechargeView; if(self.openRedPacketHandle){ self.openRedPacketHandle(nil,self.hostDelegate.getRoomInfo.type,YES); } + if (self.redPacketList.count > 0) { + [self updateMenuItem:self.redPacketView isRemove:NO]; + } } #pragma mark - User Response @@ -509,7 +544,10 @@ UIKIT_EXTERN NSString *kShowFirstRechargeView; - (void)onRoomUpdate { RoomInfoModel *roomInfo = self.hostDelegate.getRoomInfo; - + + [self.menuItemViews removeAllObjects]; + [self.menuItemViewsSubject sendNext:self.menuItemViews]; + switch (roomInfo.type) { case RoomType_MiniGame: [self displayForMiniGame]; @@ -517,12 +555,10 @@ UIKIT_EXTERN NSString *kShowFirstRechargeView; break; case RoomType_19Mic: case RoomType_20Mic: { - [self.menuItemViews removeAllObjects]; - [self.menuItemViewsSubject sendNext:self.menuItemViews]; - [self displayExpandButton:YES]; [self dealWithData]; + if (self.isExpand) { [self loadPKView:roomInfo]; [self loadJoinView:roomInfo]; @@ -537,6 +573,7 @@ UIKIT_EXTERN NSString *kShowFirstRechargeView; [self displayExpandButton:NO]; [self dealWithData]; + [self loadPKView:roomInfo]; [self loadJoinView:roomInfo]; [self loadRedPacket:roomInfo]; @@ -555,15 +592,22 @@ UIKIT_EXTERN NSString *kShowFirstRechargeView; } - (void)loadRedPacket:(RoomInfoModel *)roomInfo { - self.redPacketView.type = roomInfo.type; - self.redPacketView.redPacketList = self.redPacketList; - [self updateMenuItem:self.redPacketView isRemove:NO]; + if (self.redPacketList.count > 0) { + self.redPacketView.type = roomInfo.type; + self.redPacketView.redPacketList = self.redPacketList; + [self updateMenuItem:self.redPacketView isRemove:NO]; + } } - (void)loadPKView:(RoomInfoModel *)roomInfo { - if (roomInfo.roomModeType == RoomModeType_Open_PK_Mode && - (roomInfo.type == RoomType_Anchor || roomInfo.roomModeType == RoomModeType_Open_Blind)) { - [self updateMenuItem:self.pkMenuButton isRemove:NO]; + if (roomInfo.type == RoomType_Anchor || roomInfo.roomModeType == RoomModeType_Open_Blind) { + [self updateMenuItem:self.pkMenuButton isRemove:YES]; + } else { + if (roomInfo.roomModeType == RoomModeType_Open_PK_Mode) { + [self updateMenuItem:self.pkMenuButton isRemove:NO]; + } else { + [self updateMenuItem:self.pkMenuButton isRemove:YES]; + } } } @@ -861,6 +905,7 @@ UIKIT_EXTERN NSString *kShowFirstRechargeView; if(!_redPacketView){ _redPacketView = [[PIRoomEnterRedPacketView alloc]initWithFrame:CGRectZero]; _redPacketView.hidden = YES; + _redPacketView.tag = 106; _redPacketView.delegate = self; } return _redPacketView; diff --git a/YuMi/Modules/YMRoom/View/AnimationView/LuckyGiftWinningBannerView.m b/YuMi/Modules/YMRoom/View/AnimationView/LuckyGiftWinningBannerView.m index bf0c2773..dcd3180c 100644 --- a/YuMi/Modules/YMRoom/View/AnimationView/LuckyGiftWinningBannerView.m +++ b/YuMi/Modules/YMRoom/View/AnimationView/LuckyGiftWinningBannerView.m @@ -19,7 +19,7 @@ static const CGFloat kBannerHeight = 82.5f; static const CGFloat kBannerTopMargin = 80.0f; static const CGFloat kAvatarSize = 43.0f; static const CGFloat kAnimationDuration = 0.25f; -static const CGFloat kDisplayDuration = 2.5f; +static const CGFloat kDisplayDuration = 2.0f; static const CGFloat kRoomTransitionDelay = 2.0f; @interface LuckyGiftWinningBannerViewModel : PIBaseModel @@ -56,6 +56,7 @@ static const CGFloat kRoomTransitionDelay = 2.0f; @property (nonatomic, strong) LuckyGiftWinningBannerViewModel *model; @property (nonatomic, strong) UIImageView *backgroundImageView; @property (nonatomic, strong) UIImageView *ballImageView; +@property (nonatomic, strong) UIImageView *bigBallImageView; @property (nonatomic, strong) NetImageView *avatarImageView; @property (nonatomic, strong) UILabel *giftNameLabel; @property (nonatomic, strong) UILabel *timesLabel; @@ -135,7 +136,14 @@ exitCurrentRoom:(void(^)(void))exit { self.avatarImageView.imageUrl = model.avatar; self.giftNameLabel.text = [model giftName]; self.timesLabel.text = model.times; - self.coinsLabel.text = [NSString formatNumberToKOrM:model.coins]; + self.coinsLabel.text = model.coins; + + if (self.coinsLabel.text.integerValue > 9999) { + self.bigBallImageView.hidden = NO; + } else { + self.ballImageView.hidden = NO; + } + } - (instancetype)initWithFrame:(CGRect)frame { @@ -176,6 +184,12 @@ exitCurrentRoom:(void(^)(void))exit { make.edges.mas_equalTo(self); }]; + [self addSubview:self.bigBallImageView]; + [self.bigBallImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.centerY.trailing.mas_equalTo(self); + make.width.height.mas_equalTo(kGetScaleWidth(91)); + }]; + [self addSubview:self.ballImageView]; [self.ballImageView mas_makeConstraints:^(MASConstraintMaker *make) { make.trailing.bottom.top.mas_equalTo(self); @@ -227,7 +241,7 @@ exitCurrentRoom:(void(^)(void))exit { make.centerX.mas_equalTo(self.ballImageView); make.top.mas_equalTo(self).offset(kGetScaleWidth(18)); make.height.mas_equalTo(kGetScaleWidth(28)); - make.width.mas_equalTo(self.ballImageView); + make.width.mas_lessThanOrEqualTo(self.bigBallImageView).multipliedBy(0.8); }]; UILabel *titleLabel_4 = [UILabel labelInitWithText:YMLocalizedString(@"Combo_5") font:kFontSemibold(14) textColor:[UIColor whiteColor]]; @@ -251,10 +265,20 @@ exitCurrentRoom:(void(^)(void))exit { if (!_ballImageView) { _ballImageView = [[UIImageView alloc] initWithImage:kImage(@"luck_gift_flag_ball")]; _ballImageView.contentMode = UIViewContentModeScaleAspectFill; + _ballImageView.hidden = YES; } return _ballImageView; } +- (UIImageView *)bigBallImageView { + if (!_bigBallImageView) { + _bigBallImageView = [[UIImageView alloc] initWithImage:kImage(@"luck_gift_flag_ball_BIG")]; + _bigBallImageView.contentMode = UIViewContentModeScaleAspectFill; + _bigBallImageView.hidden = YES; + } + return _bigBallImageView; +} + - (NetImageView *)avatarImageView { if (!_avatarImageView) { NetImageConfig * config = [[NetImageConfig alloc]init]; @@ -270,14 +294,14 @@ exitCurrentRoom:(void(^)(void))exit { - (UILabel *)giftNameLabel { if (!_giftNameLabel) { - _giftNameLabel = [UILabel labelInitWithText:@"Gift" font:kFontSemibold(14) textColor:UIColorFromRGB(0xffe375)]; + _giftNameLabel = [UILabel labelInitWithText:@"" font:kFontSemibold(14) textColor:UIColorFromRGB(0xffe375)]; } return _giftNameLabel; } - (UILabel *)coinsLabel { if (!_coinsLabel) { - _coinsLabel = [UILabel labelInitWithText:@"14K" font:kFontSemibold(20) textColor:UIColorFromRGB(0xffe375)]; + _coinsLabel = [UILabel labelInitWithText:@"" font:kFontSemibold(20) textColor:UIColorFromRGB(0xffe375)]; _coinsLabel.adjustsFontSizeToFitWidth = YES; _coinsLabel.minimumScaleFactor = 0.5; _coinsLabel.textAlignment = NSTextAlignmentCenter; @@ -287,7 +311,7 @@ exitCurrentRoom:(void(^)(void))exit { - (UILabel *)timesLabel { if (!_timesLabel) { - _timesLabel = [UILabel labelInitWithText:@"913" font:kFontSemibold(14) textColor:UIColorFromRGB(0xffe375)]; + _timesLabel = [UILabel labelInitWithText:@"" font:kFontSemibold(14) textColor:UIColorFromRGB(0xffe375)]; } return _timesLabel; } diff --git a/YuMi/Modules/YMRoom/View/AnimationView/LuckyGiftWinningFlagView.m b/YuMi/Modules/YMRoom/View/AnimationView/LuckyGiftWinningFlagView.m index 46c66ece..878537fe 100644 --- a/YuMi/Modules/YMRoom/View/AnimationView/LuckyGiftWinningFlagView.m +++ b/YuMi/Modules/YMRoom/View/AnimationView/LuckyGiftWinningFlagView.m @@ -108,6 +108,8 @@ [self addSubview:stackView]; [stackView mas_makeConstraints:^(MASConstraintMaker *make) { make.centerX.mas_equalTo(self.backgroundImageView); + make.width.mas_lessThanOrEqualTo(self.backgroundImageView); +// make.leading.trailing.mas_equalTo(self.backgroundImageView).inset(4); make.top.mas_equalTo(self.winLabel.mas_bottom).offset(11); make.height.mas_equalTo(35); }]; @@ -120,6 +122,8 @@ [self addSubview:stackView_2]; [stackView_2 mas_makeConstraints:^(MASConstraintMaker *make) { make.centerX.mas_equalTo(self.backgroundImageView); + make.width.mas_lessThanOrEqualTo(self.backgroundImageView); +// make.leading.trailing.mas_equalTo(self.backgroundImageView).inset(4); make.top.mas_equalTo(stackView.mas_bottom).offset(11); make.height.mas_equalTo(17); }]; @@ -135,7 +139,7 @@ - (void)setModel:(LuckyGiftWinningFlagViewModel *)model { _model = model; self.winPriceLabel.text = model.coins; - self.winTimesLabel.text = model.times; + self.winTimesLabel.text = model.times; self.backgroundImageView.image = model.level == 1 ? kImage(@"luck_gift_gold") : kImage(@"luck_gift_pruple"); [[NSNotificationCenter defaultCenter] postNotificationName:@"receiveLuckGiftWinning" object:model.coins]; @@ -169,6 +173,7 @@ - (UILabel *)winPriceLabel { if (!_winPriceLabel) { _winPriceLabel = [UILabel labelInitWithText:@"" font:kFontSemibold(26) textColor:UIColorFromRGB(0xffe375)]; + _winPriceLabel.adjustsFontSizeToFitWidth = YES; _winPriceLabel.minimumScaleFactor = 0.5f; } return _winPriceLabel; @@ -177,6 +182,8 @@ - (UILabel *)winTimesLabel { if (!_winTimesLabel) { _winTimesLabel = [UILabel labelInitWithText:@"" font:kFontSemibold(14) textColor:UIColorFromRGB(0xffe375)]; + _winTimesLabel.adjustsFontSizeToFitWidth = YES; + _winTimesLabel.minimumScaleFactor = 0.5f; } return _winTimesLabel; } diff --git a/YuMi/Modules/YMRoom/View/MessageContainerView/View/XPNetImageYYLabel.m b/YuMi/Modules/YMRoom/View/MessageContainerView/View/XPNetImageYYLabel.m index 591224ce..afd99476 100644 --- a/YuMi/Modules/YMRoom/View/MessageContainerView/View/XPNetImageYYLabel.m +++ b/YuMi/Modules/YMRoom/View/MessageContainerView/View/XPNetImageYYLabel.m @@ -57,16 +57,10 @@ options:NSStringDrawingUsesFontLeading | NSStringDrawingUsesLineFragmentOrigin context:nil].size; self.updateLayoutSize(size); -#if DEBUG - NSLog(@" ;;;; content ! size: %@ ||| %@", attributedTextCopy.string, [NSValue valueWithCGSize:size]); -#endif }else { YYTextLayout *lastlayout = [YYTextLayout layoutWithContainerSize:maxSize text:attributedTextCopy]; self.updateLayoutSize(lastlayout.textBoundingSize); -#if DEBUG - NSLog(@"content ! size: %@ ||| %@", attributedTextCopy.string, [NSValue valueWithCGSize:layout.textBoundingSize]); -#endif } } } else { @@ -104,16 +98,10 @@ CGSize size = [updatedAttributes boundingRectWithSize:maxSize options:NSStringDrawingUsesFontLeading | NSStringDrawingUsesLineFragmentOrigin context:nil].size; -#if DEBUG - NSLog(@"---- ;;;; content ! size: %@ ||| %@", updatedAttributes.string, [NSValue valueWithCGSize:size]); -#endif if (self.updateLayoutSize) { self.updateLayoutSize(size); } } else { -#if DEBUG - NSLog(@"---- content ! size: %@ ||| %@", updatedAttributes.string, [NSValue valueWithCGSize:layout.textBoundingSize]); -#endif if (self.updateLayoutSize) { self.updateLayoutSize(layout.textBoundingSize); } diff --git a/YuMi/Modules/YMRoom/View/RoomMode/RoomModeViewController.m b/YuMi/Modules/YMRoom/View/RoomMode/RoomModeViewController.m index 8e7858e3..9ea61dad 100644 --- a/YuMi/Modules/YMRoom/View/RoomMode/RoomModeViewController.m +++ b/YuMi/Modules/YMRoom/View/RoomMode/RoomModeViewController.m @@ -11,6 +11,7 @@ #import "RoomModePresenter.h" #import "RoomResourceManager.h" +#import "XPWebViewController.h" @interface RoomModeCollectionCell : UICollectionViewCell @property(nonatomic, strong) RoomMicInfoModel *micInfoModel; @@ -44,6 +45,10 @@ } } +- (void)layoutSubviews { + [super layoutSubviews]; +} + - (void)setMicInfoModel:(RoomMicInfoModel *)micInfoModel { _micInfoModel = micInfoModel; @@ -52,7 +57,7 @@ self.imageView.image = kImage(@"room_mode_default_skin"); }else { self.imageView.backgroundColor = [UIColor colorWithWhite:1 alpha:0.5]; - [self.imageView setCornerRadius:20 + [self.imageView setCornerRadius:kGetScaleWidth(27) corners:kCALayerMaxXMaxYCorner | kCALayerMaxXMinYCorner | kCALayerMinXMaxYCorner | kCALayerMinXMinYCorner borderWidth:1 borderColor:[UIColor whiteColor]]; @@ -70,7 +75,9 @@ if (!_svgaImageView) { [self.contentView addSubview:self.svgaImageView]; [self.svgaImageView mas_makeConstraints:^(MASConstraintMaker *make) { - make.edges.mas_equalTo(self.imageView); +// make.edges.mas_equalTo(self.imageView); + make.center.mas_equalTo(self.statusView); + make.width.height.mas_equalTo(self.statusView.mas_height).multipliedBy(0.85); }]; } @kWeakify(self); @@ -108,14 +115,15 @@ [self.contentView addSubview:self.imageView]; [self.imageView mas_makeConstraints:^(MASConstraintMaker *make) { make.center.mas_equalTo(self.statusView); - make.width.height.mas_equalTo(self.statusView.mas_height).multipliedBy(0.7); + make.width.height.mas_equalTo(self.statusView.mas_height).multipliedBy(0.65); }]; } return self; } - (void)setSelected:(BOOL)selected { - self.statusView.backgroundColor = selected ? UIColorFromRGB(0xFF8C03) : UIColorFromRGB(0x1b1b1d); + self.statusView.layer.borderWidth = selected ? 1 : 0; + self.statusView.backgroundColor = selected ? UIColorRGBAlpha(0xFF8C03, 0.1) : UIColorFromRGB(0x1b1b1d); self.nameLabel.textColor = [UIColor colorWithWhite:1 alpha:selected ? 1 : 0.5]; } @@ -123,6 +131,8 @@ if (!_statusView) { _statusView = [[UIView alloc] init]; _statusView.backgroundColor = UIColorFromRGB(0x1b1b1d); + _statusView.layer.borderColor = UIColorFromRGB(0xFF8C03).CGColor; + _statusView.layer.borderWidth = 0; [_statusView setCornerRadius:12]; } return _statusView; @@ -856,7 +866,9 @@ } - (void)didTapHelp { - + XPWebViewController *vc = [[XPWebViewController alloc] initWithRoomUID:@(self.roomInfo.uid).stringValue]; + vc.url = @"https://jandan.net/pic"; + [self.navigationController pushViewController:vc animated:YES]; } - (void)didTapUse { diff --git a/YuMi/Modules/YMRoom/View/RoomPK/View/XPRoomPKPanelView.m b/YuMi/Modules/YMRoom/View/RoomPK/View/XPRoomPKPanelView.m index f2ee070e..52774e5f 100644 --- a/YuMi/Modules/YMRoom/View/RoomPK/View/XPRoomPKPanelView.m +++ b/YuMi/Modules/YMRoom/View/RoomPK/View/XPRoomPKPanelView.m @@ -53,8 +53,6 @@ ///蓝队收到礼物个数(按照收礼个数) @property (nonatomic, strong) NSMutableDictionary * blueTeamGiftPersonDic; - - @property (nonatomic, strong) UIImageView *backgroundImageView; @property (nonatomic, strong) UIImageView *topImageView; @property (nonatomic, strong) UIButton *minionButton; @@ -114,7 +112,10 @@ } - (void)setupUI { - self.frame = CGRectMake(0, 0, UIScreen.mainScreen.bounds.size.width, UIScreen.mainScreen.bounds.size.height - 86); + self.frame = CGRectMake(0, + 0, + KScreenWidth, + KScreenHeight - 86); [self addSubview:self.pkPanelContentView]; [self.pkPanelContentView mas_makeConstraints:^(MASConstraintMaker *make) { diff --git a/YuMi/Modules/YMRoom/View/StageView/MicroView/MicroView.m b/YuMi/Modules/YMRoom/View/StageView/MicroView/MicroView.m index b8a3a04d..fc4b50f9 100644 --- a/YuMi/Modules/YMRoom/View/StageView/MicroView/MicroView.m +++ b/YuMi/Modules/YMRoom/View/StageView/MicroView/MicroView.m @@ -267,9 +267,6 @@ - (void)userSpeaking { UserInfoModel * userInfo = self.microModel.userInfo; -#if DEBUG - userInfo.micCircle = @""; -#endif if (userInfo.micCircle.length) { [self.nobleWaveView startWaveAnimationWithUrl:userInfo.micCircle]; } else if ([[RoomResourceManager sharedManager] loadMicEffect]) { diff --git a/YuMi/Modules/YMRoom/View/XPRoomViewController.m b/YuMi/Modules/YMRoom/View/XPRoomViewController.m index 0e6f7317..24b86dff 100644 --- a/YuMi/Modules/YMRoom/View/XPRoomViewController.m +++ b/YuMi/Modules/YMRoom/View/XPRoomViewController.m @@ -875,6 +875,23 @@ XPCandyTreeInsufficientBalanceViewDelegate> if (!self.stageView.superview) { [self.view insertSubview:self.stageView belowSubview:self.roomHeaderView]; + + // 防止小屏机麦位挡住按钮 + NSInteger index_sideMenu = -1; + NSInteger index_stageView = -1; + for (UIView *view in self.view.subviews) { + if (index_sideMenu == -1 || index_stageView == -1) { + if (view == self.sideMenu) { + index_sideMenu = [self.view.subviews indexOfObject:view]; + } + if (view == self.stageView) { + index_stageView = [self.view.subviews indexOfObject:view]; + } + } else { + [self.view exchangeSubviewAtIndex:index_sideMenu withSubviewAtIndex:index_stageView]; + break; + } + } } self.stageView.alpha = 1; diff --git a/YuMi/Tools/File/UploadFile.h b/YuMi/Tools/File/UploadFile.h index b4ce8cf6..0ce0e05b 100644 --- a/YuMi/Tools/File/UploadFile.h +++ b/YuMi/Tools/File/UploadFile.h @@ -44,6 +44,8 @@ NS_ASSUME_NONNULL_BEGIN - (void)pauseBatchDownload; - (void)resumeBatchDownload; +- (void)download:(NSString *)targetURLString path:(NSString *)localFilePath complete:(void(^)(void))complete failure:(void(^)(void))failure; + @end NS_ASSUME_NONNULL_END diff --git a/YuMi/Tools/File/UploadFile.m b/YuMi/Tools/File/UploadFile.m index 8ec66d7a..7e76de65 100644 --- a/YuMi/Tools/File/UploadFile.m +++ b/YuMi/Tools/File/UploadFile.m @@ -377,4 +377,34 @@ static UploadFile* manager; return [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) xpSafeObjectAtIndex:0] stringByAppendingPathComponent:@"GiftDynamicEffectList"]; } +- (void)download:(NSString *)targetURLString path:(NSString *)localFilePath complete:(void(^)(void))complete failure:(void(^)(void))failure { + AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; + NSURL *pathURL = [NSURL fileURLWithPath:localFilePath]; + if ([[NSFileManager defaultManager] fileExistsAtPath:pathURL.path]) { + return; + } + + NSURL *url = [NSURL URLWithString:targetURLString]; + NSURLRequest *request = [NSURLRequest requestWithURL:url]; + + @kWeakify(self); + NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:request + progress:nil + destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) { + return pathURL; + } completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) { + if (error) { + if (failure) { + failure(); + } + } else { + if (complete) { + complete(); + } + } + }]; + + [downloadTask resume]; +} + @end diff --git a/YuMi/ar.lproj/Localizable.strings b/YuMi/ar.lproj/Localizable.strings index 2328794f..29578cda 100644 --- a/YuMi/ar.lproj/Localizable.strings +++ b/YuMi/ar.lproj/Localizable.strings @@ -4052,3 +4052,5 @@ ineHeadView12" = "الحمل"; "1.0.33_text_13" = "Celebration"; "1.0.33_text_14" = "Unique"; "1.0.33_text_15" = "房間等級不夠,不能使用該皮膚。"; +"1.0.33_text_16" = "Rules"; +"1.0.33_text_17" = "1. You can contact the official customer service and provide relevant evidence to improve the star rating. \n2. The star rating is divided into 1~5 stars.5 stars is the best recharge agent. \n3. The star rating will be displayed when the user found the recharge agent. \n4. The higher the star rating, the higher the ranking in the transfer list. \n5. All interpretation rights belong to the official and have nothing to do with Google or Apple."; diff --git a/YuMi/en.lproj/Localizable.strings b/YuMi/en.lproj/Localizable.strings index 8c38e7bf..0d569ede 100644 --- a/YuMi/en.lproj/Localizable.strings +++ b/YuMi/en.lproj/Localizable.strings @@ -3845,3 +3845,5 @@ "1.0.33_text_13" = "Celebration"; "1.0.33_text_14" = "Unique"; "1.0.33_text_15" = "房間等級不夠,不能使用該皮膚。"; +"1.0.33_text_16" = "Rules"; +"1.0.33_text_17" = "1. You can contact the official customer service and provide relevant evidence to improve the star rating. \n2. The star rating is divided into 1~5 stars.5 stars is the best recharge agent. \n3. The star rating will be displayed when the user found the recharge agent. \n4. The higher the star rating, the higher the ranking in the transfer list. \n5. All interpretation rights belong to the official and have nothing to do with Google or Apple."; diff --git a/YuMi/tr.lproj/Localizable.strings b/YuMi/tr.lproj/Localizable.strings index 34707830..229234ed 100644 --- a/YuMi/tr.lproj/Localizable.strings +++ b/YuMi/tr.lproj/Localizable.strings @@ -3631,3 +3631,5 @@ "1.0.33_text_13" = "Celebration"; "1.0.33_text_14" = "Unique"; "1.0.33_text_15" = "房間等級不夠,不能使用該皮膚。"; +"1.0.33_text_16" = "Rules"; +"1.0.33_text_17" = "1. You can contact the official customer service and provide relevant evidence to improve the star rating. \n2. The star rating is divided into 1~5 stars.5 stars is the best recharge agent. \n3. The star rating will be displayed when the user found the recharge agent. \n4. The higher the star rating, the higher the ranking in the transfer list. \n5. All interpretation rights belong to the official and have nothing to do with Google or Apple."; diff --git a/YuMi/zh-Hant.lproj/Localizable.strings b/YuMi/zh-Hant.lproj/Localizable.strings index 7f85234b..ec80e9e3 100644 --- a/YuMi/zh-Hant.lproj/Localizable.strings +++ b/YuMi/zh-Hant.lproj/Localizable.strings @@ -3503,3 +3503,5 @@ "1.0.33_text_13" = "Celebration"; "1.0.33_text_14" = "Unique"; "1.0.33_text_15" = "房間等級不夠,不能使用該皮膚。"; +"1.0.33_text_16" = "Rules"; +"1.0.33_text_17" = "1. You can contact the official customer service and provide relevant evidence to improve the star rating. \n2. The star rating is divided into 1~5 stars.5 stars is the best recharge agent. \n3. The star rating will be displayed when the user found the recharge agent. \n4. The higher the star rating, the higher the ranking in the transfer list. \n5. All interpretation rights belong to the official and have nothing to do with Google or Apple.";