新增活动详情页相关功能,包括事件模型、API接口、UI组件及相关资源文件。更新版本号至20.20.60。

This commit is contained in:
edwinQQQ
2025-05-15 16:24:43 +08:00
parent bd2e5e380f
commit a99e650d45
53 changed files with 2001 additions and 431 deletions

View File

@@ -536,6 +536,9 @@
4CA532C32D5F37DC00B8F59F /* LuckyPackageMessageTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CA532C22D5F37DC00B8F59F /* LuckyPackageMessageTableViewCell.m */; };
4CA5A3342D93D4AB00CE41D6 /* 大.svga in Resources */ = {isa = PBXBuildFile; fileRef = 4CA5A3332D93D4AB00CE41D6 /* 大.svga */; };
4CACCCE42D9A695000CCB135 /* brove_gift.svga in Resources */ = {isa = PBXBuildFile; fileRef = 4CACCCE32D9A695000CCB135 /* brove_gift.svga */; };
4CAFEFF62DD2F21B00CD81DF /* CreateEventPickerContainerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CAFEFF52DD2F21B00CD81DF /* CreateEventPickerContainerView.m */; };
4CAFF00A2DD342A400CD81DF /* MessagePublicEventModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CAFF0092DD342A400CD81DF /* MessagePublicEventModel.m */; };
4CAFF00D2DD343B200CD81DF /* PublicEventTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CAFF00C2DD343B200CD81DF /* PublicEventTableViewCell.m */; };
4CB753D22D30F10900B13DF5 /* LuckyPackageViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CB753D12D30F10900B13DF5 /* LuckyPackageViewController.m */; };
4CBBB44C2DA66334001B1C6D /* MessageCPNotifyModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CBBB44B2DA66334001B1C6D /* MessageCPNotifyModel.m */; };
4CBDC4242DC0B078005A75B9 /* EventCenterViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CBDC4232DC0B078005A75B9 /* EventCenterViewController.m */; };
@@ -546,6 +549,9 @@
4CC312272D79A10100F57A07 /* ShareProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CC312262D79A10100F57A07 /* ShareProvider.m */; };
4CC6195A2CEC7770008C1EE8 /* MyDressingDataPresent.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CC619592CEC7770008C1EE8 /* MyDressingDataPresent.m */; };
4CC6195D2CEC996E008C1EE8 /* MyDressingDataModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CC6195C2CEC996E008C1EE8 /* MyDressingDataModel.m */; };
4CCFDA002DD59038009BD2FD /* EventCenterEmptyCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CCFD9FF2DD59038009BD2FD /* EventCenterEmptyCell.m */; };
4CCFDA032DD59211009BD2FD /* Api+EventCenter.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CCFDA022DD59211009BD2FD /* Api+EventCenter.m */; };
4CCFDA062DD5C127009BD2FD /* EventItemModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CCFDA052DD5C127009BD2FD /* EventItemModel.m */; };
4CD15D912D7E902800D9279F /* LoginViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD15D902D7E902800D9279F /* LoginViewController.m */; };
4CD15D922D7EC2AC00D9279F /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 23E56B3B2B03564B00C8DAC9 /* CoreTelephony.framework */; };
4CD15D952D7FE9E400D9279F /* LoginTypesViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD15D942D7FE9E400D9279F /* LoginTypesViewController.m */; };
@@ -2714,6 +2720,12 @@
4CA532C22D5F37DC00B8F59F /* LuckyPackageMessageTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LuckyPackageMessageTableViewCell.m; sourceTree = "<group>"; };
4CA5A3332D93D4AB00CE41D6 /* 大.svga */ = {isa = PBXFileReference; lastKnownFileType = file; path = "大.svga"; sourceTree = "<group>"; };
4CACCCE32D9A695000CCB135 /* brove_gift.svga */ = {isa = PBXFileReference; lastKnownFileType = file; path = brove_gift.svga; sourceTree = "<group>"; };
4CAFEFF42DD2F21B00CD81DF /* CreateEventPickerContainerView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CreateEventPickerContainerView.h; sourceTree = "<group>"; };
4CAFEFF52DD2F21B00CD81DF /* CreateEventPickerContainerView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CreateEventPickerContainerView.m; sourceTree = "<group>"; };
4CAFF0082DD342A400CD81DF /* MessagePublicEventModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MessagePublicEventModel.h; sourceTree = "<group>"; };
4CAFF0092DD342A400CD81DF /* MessagePublicEventModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MessagePublicEventModel.m; sourceTree = "<group>"; };
4CAFF00B2DD343B200CD81DF /* PublicEventTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PublicEventTableViewCell.h; sourceTree = "<group>"; };
4CAFF00C2DD343B200CD81DF /* PublicEventTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PublicEventTableViewCell.m; sourceTree = "<group>"; };
4CB753D02D30F10900B13DF5 /* LuckyPackageViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LuckyPackageViewController.h; sourceTree = "<group>"; };
4CB753D12D30F10900B13DF5 /* LuckyPackageViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LuckyPackageViewController.m; sourceTree = "<group>"; };
4CBBB44A2DA66334001B1C6D /* MessageCPNotifyModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MessageCPNotifyModel.h; sourceTree = "<group>"; };
@@ -2734,6 +2746,12 @@
4CC619592CEC7770008C1EE8 /* MyDressingDataPresent.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MyDressingDataPresent.m; sourceTree = "<group>"; };
4CC6195B2CEC996E008C1EE8 /* MyDressingDataModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MyDressingDataModel.h; sourceTree = "<group>"; };
4CC6195C2CEC996E008C1EE8 /* MyDressingDataModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MyDressingDataModel.m; sourceTree = "<group>"; };
4CCFD9FE2DD59038009BD2FD /* EventCenterEmptyCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = EventCenterEmptyCell.h; sourceTree = "<group>"; };
4CCFD9FF2DD59038009BD2FD /* EventCenterEmptyCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = EventCenterEmptyCell.m; sourceTree = "<group>"; };
4CCFDA012DD59211009BD2FD /* Api+EventCenter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Api+EventCenter.h"; sourceTree = "<group>"; };
4CCFDA022DD59211009BD2FD /* Api+EventCenter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "Api+EventCenter.m"; sourceTree = "<group>"; };
4CCFDA042DD5C127009BD2FD /* EventItemModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = EventItemModel.h; sourceTree = "<group>"; };
4CCFDA052DD5C127009BD2FD /* EventItemModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = EventItemModel.m; sourceTree = "<group>"; };
4CD15D8F2D7E902800D9279F /* LoginViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LoginViewController.h; sourceTree = "<group>"; };
4CD15D902D7E902800D9279F /* LoginViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LoginViewController.m; sourceTree = "<group>"; };
4CD15D932D7FE9E400D9279F /* LoginTypesViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LoginTypesViewController.h; sourceTree = "<group>"; };
@@ -8107,6 +8125,8 @@
4CD6FF652D673A5C00262AB7 /* AgentMessageModel.m */,
4CBBB44A2DA66334001B1C6D /* MessageCPNotifyModel.h */,
4CBBB44B2DA66334001B1C6D /* MessageCPNotifyModel.m */,
4CAFF0082DD342A400CD81DF /* MessagePublicEventModel.h */,
4CAFF0092DD342A400CD81DF /* MessagePublicEventModel.m */,
);
path = SesssionModel;
sourceTree = "<group>";
@@ -9563,6 +9583,8 @@
E885D532297798E1004DC088 /* SessionSettingTableViewCell.m */,
4CD6FF672D673F7F00262AB7 /* AgentMessageTableViewCell.h */,
4CD6FF682D673F7F00262AB7 /* AgentMessageTableViewCell.m */,
4CAFF00B2DD343B200CD81DF /* PublicEventTableViewCell.h */,
4CAFF00C2DD343B200CD81DF /* PublicEventTableViewCell.m */,
);
path = Cell;
sourceTree = "<group>";
@@ -10053,6 +10075,8 @@
E87E62522A3F55B2002F68C9 /* View */ = {
isa = PBXGroup;
children = (
4CAFEFF42DD2F21B00CD81DF /* CreateEventPickerContainerView.h */,
4CAFEFF52DD2F21B00CD81DF /* CreateEventPickerContainerView.m */,
E87DF4B82A42C7BB009C1185 /* Search */,
E87E625F2A3F5669002F68C9 /* Cell */,
E87E625E2A3F565D002F68C9 /* CustomView */,
@@ -10087,6 +10111,8 @@
children = (
E8C6FFC927548120004DC9F0 /* Api+Home.h */,
E8C6FFC827548120004DC9F0 /* Api+Home.m */,
4CCFDA012DD59211009BD2FD /* Api+EventCenter.h */,
4CCFDA022DD59211009BD2FD /* Api+EventCenter.m */,
);
path = Api;
sourceTree = "<group>";
@@ -10118,6 +10144,8 @@
23B8D8DA2B85FDDD00CA472F /* PIHomeCategoryTitleModel.m */,
54C389652C24464600FD47B1 /* HomeMineRoomModel.h */,
54C389662C24464600FD47B1 /* HomeMineRoomModel.m */,
4CCFDA042DD5C127009BD2FD /* EventItemModel.h */,
4CCFDA052DD5C127009BD2FD /* EventItemModel.m */,
);
path = Model;
sourceTree = "<group>";
@@ -10168,6 +10196,8 @@
E87E62702A3F5907002F68C9 /* XPNewHomeRecommendTableViewCell.m */,
23FF42612AA5861E0055733C /* XPNewHomePartyCollectionViewCell.h */,
23FF42622AA5861E0055733C /* XPNewHomePartyCollectionViewCell.m */,
4CCFD9FE2DD59038009BD2FD /* EventCenterEmptyCell.h */,
4CCFD9FF2DD59038009BD2FD /* EventCenterEmptyCell.m */,
4CBDC4282DC0BB95005A75B9 /* EventCenterOfficialCell.h */,
4CBDC4292DC0BB95005A75B9 /* EventCenterOfficialCell.m */,
4CBDC42B2DC0BBB7005A75B9 /* EventCenterEventCell.h */,
@@ -12256,6 +12286,7 @@
23FE47D82BB3CEAF00F09D23 /* PINobleCenterTitleView.m in Sources */,
54C9A1252C3E74AE00C6D970 /* MessageGameOrderView.m in Sources */,
9BD9A18427A0F128004186FE /* XPMineVisitorItemModel.m in Sources */,
4CAFF00D2DD343B200CD81DF /* PublicEventTableViewCell.m in Sources */,
E852D73E28631C18001465ED /* XPMonentsCommentTableViewCell.m in Sources */,
54F4693B2C2A984D00A83655 /* MedalModel.m in Sources */,
23CEFC4E2AFB8FC100576D89 /* BSNSDictionary.m in Sources */,
@@ -12264,6 +12295,7 @@
1427219829A75F6F00C7C423 /* HTTPServer.m in Sources */,
E80B0712280D0A6700A79F63 /* FansInfoModel.m in Sources */,
2305EEFB2AD696B400AD403C /* PIRoomPhotoAlbumChoosePhotoView.m in Sources */,
4CCFDA062DD5C127009BD2FD /* EventItemModel.m in Sources */,
E87E62682A3F571D002F68C9 /* XPHomeContainerPresenter.m in Sources */,
E8EEB8F326FC2050007C6EBA /* SDWaitingView.m in Sources */,
E85E7B2F2A4EB0D300B6D00A /* XPGoldIncomeSectionView.m in Sources */,
@@ -12438,6 +12470,7 @@
23CEFC4F2AFB8FC100576D89 /* BSSDLayoutUtil.m in Sources */,
E81C27AB26EF2D920031E639 /* ThirdUserInfo.m in Sources */,
23FF25682ABC3BC00064E904 /* XPHomeGameCell.m in Sources */,
4CCFDA002DD59038009BD2FD /* EventCenterEmptyCell.m in Sources */,
E8788950273A699900BF1D57 /* ThemeColor+SendGift.m in Sources */,
23B8D8D82B85F8B900CA472F /* PIHoemCategoryTitleCell.m in Sources */,
E81C279D26EEEC620031E639 /* YUMIConstant.m in Sources */,
@@ -12820,6 +12853,7 @@
E82D5C70276AE60000858D6D /* HeadwearModel.m in Sources */,
4C5C37232D0C1C7900BA9AB8 /* RegionListViewController.m in Sources */,
4CE746C62D9297C30094E496 /* BravoGiftTipModel.m in Sources */,
4CCFDA032DD59211009BD2FD /* Api+EventCenter.m in Sources */,
238B37CC2AC55A2C00BFC9D5 /* XPTreasureFairyPrizeSubView.m in Sources */,
E81125C4296E57B7000D9804 /* QinputPhotoView.m in Sources */,
E880B3A1278BD60C00A83B0D /* XPAcrossRoomPKSelectRoomView.m in Sources */,
@@ -12963,6 +12997,7 @@
9B208A362779B50100F9E54A /* GiftNobleInfoModel.m in Sources */,
E80A086227F2AC190027B30C /* RoomPKDetailInfoModel.m in Sources */,
238B37CD2AC55A2C00BFC9D5 /* XPTreasureFailyResultView.m in Sources */,
4CAFF00A2DD342A400CD81DF /* MessagePublicEventModel.m in Sources */,
E824545126F5CE6E00BE8163 /* XPMineModifPayPwdPresenter.m in Sources */,
E8098CB1282E86EF0090B9F0 /* XPMomentsContentView.m in Sources */,
E85E3FA728B7A6F000268DC8 /* MessageContentMonentsView.m in Sources */,
@@ -13160,6 +13195,7 @@
E839533F276A0CDB00CF2F24 /* XPMineNameplateTableViewCell.m in Sources */,
E80E09AE2A41336500CD2BE7 /* XPWebViewNavView.m in Sources */,
E85E7B2D2A4EB0D300B6D00A /* XPGuildHeaderView.m in Sources */,
4CAFEFF62DD2F21B00CD81DF /* CreateEventPickerContainerView.m in Sources */,
E85E7B542A4EB4AD00B6D00A /* XPMineGuildListModel.m in Sources */,
54283CE52CE48A69009729B5 /* ShoppingMallViewController.m in Sources */,
9BCE6144277D657600CC0358 /* XPReleaseRadioTableViewCell.m in Sources */,
@@ -13623,7 +13659,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 20.20.59;
MARKETING_VERSION = 20.20.60;
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
@@ -13956,7 +13992,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 20.20.59;
MARKETING_VERSION = 20.20.60;
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1004 B

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 711 B

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

View File

@@ -112,6 +112,8 @@ typedef NS_ENUM(NSUInteger, URLType) {
KLuckyPackageRule,
/// 人機驗證
kCaptchaSwitchPath,
/// 活动详情页
kEventDetailPath
};
NSString * const URLWithType(URLType type);

View File

@@ -28,7 +28,8 @@ NSString * const URLWithType(URLType type) {
@(KRoomLevelRule) : @"modules/roomLevel/index.html",///,
@(KLuckyPackageRule) : @"modules/luckyBagRules/index.html",///,
@(kCaptchaSwitchPath) : @"modules/humanMachineVerification/index.html",
@(kAccountlogoutConfirmURL) : @"modules/logout/confirm.html"
@(kAccountlogoutConfirmURL) : @"modules/logout/confirm.html",
@(kEventDetailPath) : @"modules/eventDetails/index.html?eventId=",
};
NSString * newUrl = [newDic objectForKey:@(type)];
if(newUrl != nil){

View File

@@ -46,7 +46,7 @@ isPhoneXSeries = [[UIApplication sharedApplication] delegate].window.safeAreaIns
#define kFontHeavy(font) [UIFont systemFontOfSize:kGetScaleWidth(font) weight:UIFontWeightHeavy]
///内置版本号
#define PI_App_Version @"1.0.27"
#define PI_App_Version @"1.0.27.1"
///渠道
#define PI_App_Source @"appstore"
#define PI_Test_Flight @"TestFlight"

View File

@@ -68,6 +68,8 @@ typedef NS_ENUM(NSUInteger, CustomMessageType) {
CustomMessageType_RoomBoom = 63,
/// CP 礼物
CustomMessageType_CP = 64,
/// 房间活动
CustomMessageType_Public_Event = 68,
///塔罗
CustomMessageType_Tarot = 71,
///相亲
@@ -153,6 +155,10 @@ typedef NS_ENUM(NSUInteger, CustomMessageType) {
CustomMessageType_CP_message = 117,
};
typedef NS_ENUM(NSUInteger, CustomMessageTypePublicEvent) {
Custom_Message_Sub_Public_Event_message = 681,
};
/// first = CustomMessageType_CP_message
typedef NS_ENUM(NSUInteger, CustomMessageTypeCPmessage) {
Custom_Message_Sub_CP_message_request = 1170,

View File

@@ -90,28 +90,28 @@
//cellinit
UILongPressGestureRecognizer *longPressGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressCellHandle:)];
UILongPressGestureRecognizer *longPressGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressCellHandle:)];
longPressGesture.minimumPressDuration = 0.5;
[self.messageBackground addGestureRecognizer:longPressGesture];
[self.messageBackground addGestureRecognizer:longPressGesture];
}
- (void)initLayout {
[self.leftAvatar mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.top.mas_equalTo(self).offset(15);
make.width.height.mas_equalTo(45);
make.width.height.mas_equalTo(45).priorityHigh();
}];
[self.rightAvatar mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self).offset(15);
make.trailing.mas_equalTo(self).offset(-15);
make.width.height.mas_equalTo(45);
make.width.height.mas_equalTo(45).priorityHigh();
}];
[self.messageBackground mas_makeConstraints:^(MASConstraintMaker *make) {
self.messageBackgroundLeft = make.leading.mas_equalTo(self.leftAvatar.mas_trailing).offset(15);
self.messageBackgroundRight = make.trailing.mas_equalTo(self.rightAvatar.mas_leading).offset(-15);
self.messageBackgroundLeftAvatar = make.leading.mas_equalTo(self.leftAvatar.mas_leading);
self.messageBackgroundRightAvatar = make.trailing.mas_equalTo(self.rightAvatar.mas_trailing);
self.messageBackgroundLeft = make.leading.mas_equalTo(self.leftAvatar.mas_trailing).offset(15).priorityHigh();
self.messageBackgroundRight = make.trailing.mas_equalTo(self.rightAvatar.mas_leading).offset(-15).priorityHigh();
self.messageBackgroundLeftAvatar = make.leading.mas_equalTo(self.leftAvatar.mas_leading).priorityHigh();
self.messageBackgroundRightAvatar = make.trailing.mas_equalTo(self.rightAvatar.mas_trailing).priorityHigh();
make.top.mas_equalTo(self).offset(20);
}];
@@ -161,7 +161,7 @@
- (BOOL)checkDataWith:(long)currentStr {
NSDate* date = [NSDate dateWithTimeIntervalSince1970:currentStr];
NSCalendar * calendar = [NSCalendar currentCalendar];
NSCalendarUnit unit =NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
NSCalendarUnit unit = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
NSDateComponents * cmps = [calendar components:unit fromDate:date toDate:[NSDate date] options:0];
if (cmps.minute <= 2) {
return YES;
@@ -226,9 +226,9 @@
[self.messageBackgroundRight install];
[self.messageBackgroundRightAvatar uninstall];
} else {
[self.messageBackgroundLeft uninstall];
[self.messageBackgroundRight install];
[self.messageBackgroundLeft install];
[self.messageBackgroundLeftAvatar uninstall];
[self.messageBackgroundRight install];
[self.messageBackgroundRightAvatar uninstall];
}
self.rightAvatar.imageUrl = avatarUrl;
@@ -243,7 +243,7 @@
[self.messageBackgroundRightAvatar install];
} else {
[self.messageBackgroundLeft install];
[self.messageBackgroundRight uninstall];
[self.messageBackgroundRight install];
[self.messageBackgroundLeftAvatar uninstall];
[self.messageBackgroundRightAvatar uninstall];
}
@@ -264,7 +264,11 @@
}
}
} else {
#if DEBUG
NSAssert(classStr != nil, @"message should not be nil");
#else
return;
#endif
}
[self.messageBackground addSubview:self.messageContent];
//MARK: layout

View File

@@ -0,0 +1,16 @@
//
// PublicEventTableViewCell.h
// YuMi
//
// Created by P on 2025/5/13.
//
#import "MessageContentCustomView.h"
NS_ASSUME_NONNULL_BEGIN
@interface PublicEventTableViewCell : MessageContentCustomView
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,133 @@
//
// PublicEventTableViewCell.m
// YuMi
//
// Created by P on 2025/5/13.
//
#import "PublicEventTableViewCell.h"
#import "MessagePublicEventModel.h"
@interface PublicEventTableViewCell ()
@property (nonatomic, strong) NetImageView *topImageView;
@property (nonatomic, strong) UIImageView *roomIcon;
@property (nonatomic, strong) UILabel *roomIDLabel;
@property (nonatomic, strong) UILabel *eventDescLabel;
@property (nonatomic, strong) UIButton *joinButton;
@end
@implementation PublicEventTableViewCell
- (void)initSubViews {
[super initSubViews];
// return;
[self.backView addSubview:self.topImageView];
[self.backView addSubview:self.roomIcon];
[self.backView addSubview:self.roomIDLabel];
[self.backView addSubview:self.eventDescLabel];
[self.backView addSubview:self.joinButton];
}
- (void)initSubViewConstraints {
[super initSubViewConstraints];
// return;
[self.topImageView mas_makeConstraints:^(MASConstraintMaker *make) {
// make.edges.mas_equalTo(self);
make.top.leading.mas_equalTo(self);
make.width.mas_equalTo(self);
make.height.mas_equalTo(86);
}];
[self.roomIcon mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.topImageView.mas_bottom).offset(8);
make.leading.mas_equalTo(8);
make.size.mas_equalTo(CGSizeMake(16, 16));
}];
[self.roomIDLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerY.mas_equalTo(self.roomIcon);
make.leading.mas_equalTo(self.roomIcon.mas_trailing).offset(8);
}];
[self.joinButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.bottom.trailing.mas_equalTo(-8);
make.size.mas_equalTo(CGSizeMake(96, 30));
}];
[self.eventDescLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.roomIcon.mas_bottom).offset(8);
make.leading.trailing.mas_equalTo(self.backView).inset(8);
make.bottom.mas_equalTo(self.joinButton.mas_top).offset(-8);
}];
}
- (void)didTapJoinButton {
}
- (void)render:(MessageBaseModel *)message {
if ([message isKindOfClass:[MessagePublicEventModel class]]) {
MessagePublicEventModel *model = (MessagePublicEventModel *)message;
NSLog(@"%@", model);
}
}
#pragma mark -
- (NetImageView *)topImageView {
if (!_topImageView) {
NetImageConfig * config = [[NetImageConfig alloc] init];
config.placeHolder = [UIImageConstant defaultBannerPlaceholder];
_topImageView = [[NetImageView alloc] initWithConfig:config];
[_topImageView setCornerRadius:8];
}
return _topImageView;
}
- (UIImageView *)roomIcon {
if (!_roomIcon) {
_roomIcon = [[UIImageView alloc] initWithImage:kImage(@"room_icon")];
}
return _roomIcon;
}
- (UILabel *)roomIDLabel {
if (!_roomIDLabel) {
_roomIDLabel = [UILabel labelInitWithText:YMLocalizedString(@"XPMineGuildViewController6")
font:kFontRegular(13)
textColor:UIColorFromRGB(0x313131)];
}
return _roomIDLabel;
}
- (UILabel *)eventDescLabel {
if (!_eventDescLabel) {
_eventDescLabel = [UILabel labelInitWithText:@"Your Event is about to start! Your fans and subscribers have been notified!"
font:kFontMedium(14)
textColor:UIColorFromRGB(0x313131)];
_eventDescLabel.numberOfLines = 0;
}
return _eventDescLabel;
}
- (UIButton *)joinButton {
if (!_joinButton) {
_joinButton = [UIButton buttonWithType:UIButtonTypeCustom];
[_joinButton setTitle:YMLocalizedString(@"XPCandyTreeViewController4") forState:UIControlStateNormal];
[_joinButton.titleLabel setFont:kFontMedium(14)];
[_joinButton addTarget:self
action:@selector(didTapJoinButton)
forControlEvents:UIControlEventTouchUpInside];
[_joinButton setCornerRadius:15];
[_joinButton addGradientBackgroundWithColors:@[
UIColorFromRGB(0xe29030),
UIColorFromRGB(0xfcc074)
] startPoint:CGPointMake(0, 0.5) endPoint:CGPointMake(1, 0.5) cornerRadius:15];
}
return _joinButton;
}
@end

View File

@@ -0,0 +1,24 @@
//
// MessagePublicEventModel.h
// YuMi
//
// Created by P on 2025/5/13.
//
#import "MessageBaseModel.h"
NS_ASSUME_NONNULL_BEGIN
@interface MessagePublicEventModel : MessageBaseModel
@property (nonatomic, copy) NSString *eventBanner;
@property (nonatomic, assign) NSInteger roomUid;
@property (nonatomic, copy) NSString *id;
@property (nonatomic, copy) NSString *eventTopic;
@property (nonatomic, copy) NSString *eventDetail;
@property (nonatomic, assign) NSInteger type;
@property (nonatomic, assign) NSInteger roomErbanNo;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,27 @@
//
// MessagePublicEventModel.m
// YuMi
//
// Created by P on 2025/5/13.
//
#import "MessagePublicEventModel.h"
@implementation MessagePublicEventModel
- (instancetype)initWithMessage:(NIMMessage *)message {
if (self = [super initWithMessage:message]) {
self.message = message;
self.isHiddenAvatar = NO;
self.messageType = SessionMessageType_Custom;
// TODO:
self.height = 230;
}
return self;
}
- (NSString *)cellContent:(MessageBaseModel *)model {
return @"PublicEventTableViewCell";
}
@end

View File

@@ -57,6 +57,7 @@
#import "MessageTipsModel.h"
#import "MessageTreasureFairyModel.h"
#import "MessageCPNotifyModel.h"
#import "MessagePublicEventModel.h"
///View
#import "XPMineUserInfoViewController.h"
@@ -234,6 +235,10 @@
#pragma mark - cell
- (MessageBaseModel *)modeTransformMessage:(NIMMessage *)message {
MessageBaseModel * model;
#if DEBUG
model = [[MessagePublicEventModel alloc] initWithMessage:message];
return model;
#endif
switch (message.messageType) {
case NIMMessageTypeText:
model = [[MessageTextModel alloc] initWithMessage:message];
@@ -253,7 +258,7 @@
default:
model = [[MessageUnSupportModel alloc] initWithMessage:message];
break;
break;
}
return model;
}
@@ -277,6 +282,11 @@
NSInteger second = attachment.second;
switch (first) {
case CustomMessageType_Public_Event:
if (second == Custom_Message_Sub_Public_Event_message) {
model = [[MessagePublicEventModel alloc] initWithMessage:message];
}
break;
case CustomMessageType_CP_message:
if (second == Custom_Message_Sub_CP_message_request || second == Custom_Message_Sub_CP_message_result) {
model = [[MessageCPNotifyModel alloc] initWithMessage:message];

View File

@@ -0,0 +1,33 @@
//
// Api+EventCenter.h
// YuMi
//
// Created by P on 2025/5/15.
//
#import "Api.h"
NS_ASSUME_NONNULL_BEGIN
@interface Api(EventCenter)
/// 活动广场列表
+ (void)usereventSquare:(HttpRequestHelperCompletion)complection
page:(NSNumber *)page
pageSize:(NSNumber *)pageSize;
/// 我发布的活动
+ (void)usereventMySquare:(HttpRequestHelperCompletion)complection
page:(NSNumber *)page
pageSize:(NSNumber *)pageSize
uid:(NSString *)uid;
/// 我订阅的活动
+ (void)usereventMySub:(HttpRequestHelperCompletion)complection
page:(NSNumber *)page
pageSize:(NSNumber *)pageSize
uid:(NSString *)uid;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,41 @@
//
// Api+EventCenter.m
// YuMi
//
// Created by P on 2025/5/15.
//
#import "Api+EventCenter.h"
@implementation Api(EventCenter)
/// 广
+ (void)usereventSquare:(HttpRequestHelperCompletion)complection
page:(NSNumber *)page
pageSize:(NSNumber *)pageSize {
[self makeRequest:@"userevent/square"
method:HttpRequestHelperMethodGET
completion:complection, __FUNCTION__, page, pageSize, nil];
}
///
+ (void)usereventMySquare:(HttpRequestHelperCompletion)complection
page:(NSNumber *)page
pageSize:(NSNumber *)pageSize
uid:(NSString *)uid {
[self makeRequest:@"userevent/mysquare"
method:HttpRequestHelperMethodGET
completion:complection, __FUNCTION__, page, pageSize, uid, nil];
}
///
+ (void)usereventMySub:(HttpRequestHelperCompletion)complection
page:(NSNumber *)page
pageSize:(NSNumber *)pageSize
uid:(NSString *)uid {
[self makeRequest:@"userevent/mySub"
method:HttpRequestHelperMethodGET
completion:complection, __FUNCTION__, page, pageSize, uid, nil];
}
@end

View File

@@ -0,0 +1,40 @@
//
// EventItemModel.h
// YuMi
//
// Created by P on 2025/5/15.
//
#import "PIBaseModel.h"
NS_ASSUME_NONNULL_BEGIN
@interface EventItemModel : PIBaseModel
@property (nonatomic, strong) NSString *eventTopic; // 事件主题
@property (nonatomic, assign) NSTimeInterval updateTime; // 更新时间戳
@property (nonatomic, assign) NSInteger offectTimes; // 未知字段
@property (nonatomic, assign) NSInteger shareNum; // 分享次数
@property (nonatomic, assign) NSInteger liveStatus; // 1未开始2进行中3-已结束
@property (nonatomic, assign) NSInteger eventStatus; // 0-待审核1-审核通过2-拒绝3-删除4-过期
@property (nonatomic, assign) NSInteger eventDuration; // 事件持续时间
@property (nonatomic, strong) NSString *roomAvatar; // 房间头像
@property (nonatomic, strong) NSString *eventBanner; // 事件横幅
@property (nonatomic, assign) NSInteger subNum; // 订阅数量
@property (nonatomic, strong) NSString *eventDetail; // 事件详情
@property (nonatomic, assign) NSInteger id; // 事件ID
@property (nonatomic, assign) NSInteger uid; // 用户ID
@property (nonatomic, assign) NSInteger noticeFans; // 通知粉丝
@property (nonatomic, assign) NSInteger roomErbanNo; // 房间号
@property (nonatomic, strong) NSString *eventStartTimeStr;// 事件开始时间字符串
@property (nonatomic, assign) NSTimeInterval eventEndTime;// 事件结束时间戳
@property (nonatomic, assign) BOOL subStatus; // 订阅状态
@property (nonatomic, assign) NSInteger roomUid; // 房间用户ID
@property (nonatomic, assign) NSTimeInterval eventStartTime;// 事件开始时间戳
@property (nonatomic, assign) NSTimeInterval createTime; // 创建时间戳
@property (nonatomic, copy) NSString *gender;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,12 @@
//
// EventItemModel.m
// YuMi
//
// Created by P on 2025/5/15.
//
#import "EventItemModel.h"
@implementation EventItemModel
@end

View File

@@ -51,6 +51,8 @@ typedef NS_ENUM(NSUInteger, HomeBannerInfoSkipType) {
///跳转的类型
@property (nonatomic, assign)HomeBannerInfoSkipType skipType;
@property (nonatomic, assign) NSInteger activityShow; // = 1 时,为官方活动
@property(nonatomic, strong) HomeBannerFillVoInfoModel *fillVo;
@end

View File

@@ -6,11 +6,30 @@
//
#import "BaseMvpPresenter.h"
#import "EventItemModel.h"
NS_ASSUME_NONNULL_BEGIN
@protocol CreateEventPresenterProcotol <NSObject>
@optional
- (void)eventSquareListSuccess:(NSArray <EventItemModel *>*)list;
- (void)eventSquareListFailure:(NSString *)msg;
- (void)myCreateEventListSuccess:(NSArray *)list;
- (void)myCreateEventListFailure:(NSString *)msg;
- (void)mySubEventListSuccess:(NSArray *)list;
- (void)mySubEventListFailure:(NSString *)msg;
@end
@interface CreateEventPresenter : BaseMvpPresenter
- (void)loadEventSquare:(NSInteger)page;
- (void)loadMyCreateEvents:(NSInteger)page;
- (void)loadMySubEvents:(NSInteger)page;
- (void)createEventWithTitle:(NSString *)title
image:(UIImage *)image
uploadToHome:(BOOL)uploadToHome

View File

@@ -6,20 +6,56 @@
//
#import "CreateEventPresenter.h"
#import "CreateEventViewController.h"
#import "Api+EventCenter.h"
@interface CreateEventPresenter()
@property (nonatomic, weak) CreateEventViewController *view;
@end
@implementation CreateEventPresenter
// Maybe + api call
//- (void)attachView:(id)view {
// [super attachView:view];
// self.view = view;
//}
- (void)loadEventSquare:(NSInteger)page {
[Api usereventSquare:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
if ([[self getView] respondsToSelector:@selector(eventSquareListSuccess:)]) {
[[self getView] eventSquareListSuccess:[EventItemModel modelsWithArray:data.data]];
}
} fail:^(NSInteger code, NSString * _Nullable msg) {
if ([[self getView] respondsToSelector:@selector(eventSquareListFailure:)]) {
[[self getView] eventSquareListFailure:msg];
}
} showLoading:YES errorToast:YES] page:@(page) pageSize:@20];
}
- (void)loadMyCreateEvents:(NSInteger)page {
[Api usereventMySquare:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
if ([[self getView] respondsToSelector:@selector(eventSquareListSuccess:)]) {
[[self getView] myCreateEventListSuccess:@[]];
}
} fail:^(NSInteger code, NSString * _Nullable msg) {
if ([[self getView] respondsToSelector:@selector(eventSquareListFailure:)]) {
[[self getView] myCreateEventListFailure:msg];
}
} showLoading:YES errorToast:YES]
page:@(page)
pageSize:@20
uid:[AccountInfoStorage instance].getUid];
}
- (void)loadMySubEvents:(NSInteger)page {
[Api usereventMySub:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
if ([[self getView] respondsToSelector:@selector(eventSquareListSuccess:)]) {
[[self getView] mySubEventListSuccess:@[]];
}
} fail:^(NSInteger code, NSString * _Nullable msg) {
if ([[self getView] respondsToSelector:@selector(eventSquareListFailure:)]) {
[[self getView] myCreateEventListFailure:msg];
}
} showLoading:YES errorToast:YES]
page:@(page)
pageSize:@20
uid:[AccountInfoStorage instance].getUid];
}
- (void)createEventWithTitle:(NSString *)title
image:(UIImage *)image
@@ -31,32 +67,32 @@
notifyFans:(BOOL)notifyFans {
//
if (title.length == 0) {
[self.view showError:@"请输入活动标题"];
// [[self getView] showError:@"请输入活动标题"];
return;
}
if (!image) {
[self.view showError:@"请选择活动横幅图片"];
// [[self getView] showError:@"请选择活动横幅图片"];
return;
}
if (roomId.length == 0) {
[self.view showError:@"请选择房间"];
// [[self getView] showError:@"请选择房间"];
return;
}
if (!startTime) {
[self.view showError:@"请选择开始时间"];
// [[self getView] showError:@"请选择开始时间"];
return;
}
if (duration <= 0) {
[self.view showError:@"请选择活动时长"];
// [[self getView] showError:@"请选择活动时长"];
return;
}
if (content.length == 0) {
[self.view showError:@"请输入活动内容"];
// [[self getView] showError:@"请输入活动内容"];
return;
}
@@ -67,7 +103,7 @@
//
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self.view showCreateSuccess];
// [[self getView] showCreateSuccess];
});
}

View File

@@ -21,7 +21,7 @@ NS_ASSUME_NONNULL_BEGIN
-(void)checkIpRegionAction;
- (void)getHomeTopData;
- (void)getHomeAllTopsData;
//- (void)getHomeAllTopsData;
- (void)getHomeRanks;
@end

View File

@@ -37,84 +37,90 @@
NSArray * array = [HomeBannerInfoModel modelsWithArray:data.data];
[banner sendNext:array];
[banner sendCompleted];
}fail:^(NSInteger code, NSString * _Nullable msg) {
[banner sendError:nil];
[banner sendCompleted];
} errorToast:NO] uid:uid type:@"1"];
[Api requestCurrentResourceListCompletion:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
NSArray *list = [PIHomeItemModel modelsWithArray:data.data];
[menu sendNext:list];
[menu sendCompleted];
}fail:^(NSInteger code, NSString * _Nullable msg) {
[menu sendError:nil];
[menu sendCompleted];
}]];
}
- (void)getHomeAllTopsData {
RACSubject *banner = [RACSubject subject];
RACSubject *menu = [RACSubject subject];
RACSubject *rank = [RACSubject subject];
RACSignal *bannerSignal = [banner catch:^RACSignal *(NSError *error) {
return [RACSignal return:nil];
}];
RACSignal *menuSignal = [menu catch:^RACSignal *(NSError *error) {
return [RACSignal return:nil];
}];
RACSignal *rankSignal = [rank catch:^RACSignal *(NSError *error) {
return [RACSignal return:nil];
}];
RACSignal *combinedSignal = [RACSignal combineLatest:@[bannerSignal, menuSignal, rankSignal]
reduce:^id(NSArray* bannerList, NSArray* menuList, NSArray *rankAvatars) {
return @[bannerList ?: @[],
menuList ?: @[],
rankAvatars ?: @[]];
}];
@kWeakify(self);
[[combinedSignal deliverOn:RACScheduler.mainThreadScheduler]
subscribeNext:^(NSArray *combinedValues) {
@kStrongify(self);
[[self getView] getHomeTopDataSuccess:[combinedValues xpSafeObjectAtIndex:0]
banners:[combinedValues xpSafeObjectAtIndex:1]
rankAvatars:[combinedValues xpSafeObjectAtIndex:2]];
} error:^(NSError * _Nullable error) {
}];
NSString * uid = [AccountInfoStorage instance].getUid;
[Api homeBannerList:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
NSArray * array = [HomeBannerInfoModel modelsWithArray:data.data];
[banner sendNext:array];
[banner sendCompleted];
[menu sendNext:@[]];
[menu sendCompleted];
}fail:^(NSInteger code, NSString * _Nullable msg) {
[banner sendError:nil];
[banner sendCompleted];
} errorToast:NO] uid:uid type:@"1"];
[Api requestCurrentResourceListCompletion:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
NSArray *list = [PIHomeItemModel modelsWithArray:data.data];
[menu sendNext:list];
[menu sendCompleted];
}fail:^(NSInteger code, NSString * _Nullable msg) {
[menu sendError:nil];
[menu sendCompleted];
}]];
} errorToast:NO] uid:uid type:@"1"];
[Api getHomeRanksCompletion:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
NSArray *list = [HomeRankAvatarModel modelsWithArray:data.data];
[rank sendNext:list];
[rank sendCompleted];
}fail:^(NSInteger code, NSString * _Nullable msg) {
[rank sendError:nil];
[rank sendCompleted];
}]];
// [Api requestCurrentResourceListCompletion:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
// NSArray *list = [PIHomeItemModel modelsWithArray:data.data];
// [menu sendNext:list];
// [menu sendCompleted];
// }fail:^(NSInteger code, NSString * _Nullable msg) {
// [menu sendError:nil];
// [menu sendCompleted];
// }]];
}
//- (void)getHomeAllTopsData {
// RACSubject *banner = [RACSubject subject];
// RACSubject *menu = [RACSubject subject];
// RACSubject *rank = [RACSubject subject];
//
// RACSignal *bannerSignal = [banner catch:^RACSignal *(NSError *error) {
// return [RACSignal return:nil];
// }];
// RACSignal *menuSignal = [menu catch:^RACSignal *(NSError *error) {
// return [RACSignal return:nil];
// }];
//
// RACSignal *rankSignal = [rank catch:^RACSignal *(NSError *error) {
// return [RACSignal return:nil];
// }];
//
// RACSignal *combinedSignal = [RACSignal combineLatest:@[bannerSignal, menuSignal, rankSignal]
// reduce:^id(NSArray* bannerList, NSArray* menuList, NSArray *rankAvatars) {
// return @[bannerList ?: @[],
// menuList ?: @[],
// rankAvatars ?: @[]];
// }];
//
// @kWeakify(self);
// [[combinedSignal deliverOn:RACScheduler.mainThreadScheduler]
// subscribeNext:^(NSArray *combinedValues) {
// @kStrongify(self);
// [[self getView] getHomeTopDataSuccess:[combinedValues xpSafeObjectAtIndex:0]
// banners:[combinedValues xpSafeObjectAtIndex:1]
// rankAvatars:[combinedValues xpSafeObjectAtIndex:2]];
// } error:^(NSError * _Nullable error) {
//
// }];
//
// NSString * uid = [AccountInfoStorage instance].getUid;
// [Api homeBannerList:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
// NSArray * array = [HomeBannerInfoModel modelsWithArray:data.data];
// [banner sendNext:array];
// [banner sendCompleted];
// }fail:^(NSInteger code, NSString * _Nullable msg) {
// [banner sendError:nil];
// [banner sendCompleted];
// } errorToast:NO] uid:uid type:@"1"];
//
// [Api requestCurrentResourceListCompletion:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
// NSArray *list = [PIHomeItemModel modelsWithArray:data.data];
// [menu sendNext:list];
// [menu sendCompleted];
// }fail:^(NSInteger code, NSString * _Nullable msg) {
// [menu sendError:nil];
// [menu sendCompleted];
// }]];
//
// [Api getHomeRanksCompletion:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
// NSArray *list = [HomeRankAvatarModel modelsWithArray:data.data];
// [rank sendNext:list];
// [rank sendCompleted];
// }fail:^(NSInteger code, NSString * _Nullable msg) {
// [rank sendError:nil];
// [rank sendCompleted];
// }]];
//}
///
- (void)getHomeTopBannerList{
NSString * uid = [AccountInfoStorage instance].getUid;
@@ -122,7 +128,7 @@
[Api homeBannerList:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
@kStrongify(self);
NSArray * array = [HomeBannerInfoModel modelsWithArray:data.data];
[[self getView]getHomeTopBannerListSuccess:array];
[[self getView] getHomeTopBannerListSuccess:array];
}fail:^(NSInteger code, NSString * _Nullable msg) {
} errorToast:NO] uid:uid type:@"1"];

View File

@@ -0,0 +1,9 @@
#import "UIKit/UIKit.h"
@interface EventCenterEmptyCell : UITableViewCell
+ (CGFloat)cellHeight;
+ (void)registerTo:(UITableView *)tableView;
+ (EventCenterEmptyCell *)cellFor:(UITableView *)tableView atIndexPath:(NSIndexPath *)indexPath;
@end

View File

@@ -0,0 +1,48 @@
#import "EventCenterEmptyCell.h"
@implementation EventCenterEmptyCell
{
UILabel *titleLabel;
UIImageView *ufoImageView;
}
+ (CGFloat)cellHeight {
return 170;
}
+ (void)registerTo:(UITableView *)tableView {
[tableView registerClass:[self class]
forCellReuseIdentifier:NSStringFromClass([self class])];
}
+ (EventCenterEmptyCell *)cellFor:(UITableView *)tableView atIndexPath:(NSIndexPath *)indexPath {
return [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([self class]) forIndexPath:indexPath];
}
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
self.selectionStyle = UITableViewCellSelectionStyleNone;
self.contentView.backgroundColor = [UIColor whiteColor];
titleLabel = [UILabel labelInitWithText:YMLocalizedString(@"20.20.59_text_19")
font:kFontRegular(14)
textColor:UIColorFromRGB(0xafb1b3)];
ufoImageView = [[UIImageView alloc] initWithImage:kImage(@"common_empty_UFO")];
[self.contentView addSubview:ufoImageView];
[self.contentView addSubview:titleLabel];
[ufoImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.mas_equalTo(self.contentView);
make.top.mas_equalTo(16);
make.size.mas_equalTo(CGSizeMake(110, 110));
}];
[titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.mas_equalTo(self.contentView);
make.top.mas_equalTo(ufoImageView.mas_bottom).offset(16);
make.height.mas_equalTo(20);
}];
}
return self;
}
@end

View File

@@ -6,11 +6,17 @@
//
#import <UIKit/UIKit.h>
#import "EventItemModel.h"
NS_ASSUME_NONNULL_BEGIN
@interface EventCenterEventCell : UITableViewCell
+ (CGFloat)cellHeight;
+ (void)registerTo:(UITableView *)tableView;
+ (EventCenterEventCell *)cellFor:(UITableView *)tableView atIndexPath:(NSIndexPath *)indexPath;
- (void)updateCell:(EventItemModel *)model;
@end
NS_ASSUME_NONNULL_END

View File

@@ -7,17 +7,238 @@
#import "EventCenterEventCell.h"
@interface EventCenterEventCell()
@property (nonatomic, strong) EventItemModel *model;
@property (nonatomic, strong) NetImageView *bgImageView;
@property (nonatomic, strong) NetImageView *avatarImageView;
@property (nonatomic, strong) UILabel *nameLabel;
@property (nonatomic, strong) UILabel *idLabel;
@property (nonatomic, strong) UILabel *eventDescLabel;
@property (nonatomic, strong) UILabel *timeLabel;
@property (nonatomic, strong) UILabel *subLabel;
@property (nonatomic, strong) UIImageView *sexImageView;
@property (nonatomic, strong) UIImageView *clockImageView;
@property (nonatomic, strong) UIImageView *ringImageView;
@property (nonatomic, strong) UIButton *statusButton;
@end
@implementation EventCenterEventCell
- (void)awakeFromNib {
[super awakeFromNib];
// Initialization code
+ (CGFloat)cellHeight {
return 130;
}
+ (void)registerTo:(UITableView *)tableView {
[tableView registerClass:[self class]
forCellReuseIdentifier:NSStringFromClass([self class])];
}
+ (EventCenterEventCell *)cellFor:(UITableView *)tableView atIndexPath:(NSIndexPath *)indexPath {
return [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([self class])
forIndexPath:indexPath];
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
}
// Configure the view for the selected state
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
self.selectionStyle = UITableViewCellSelectionStyleNone;
self.separatorInset = UIEdgeInsetsZero;
self.contentView.backgroundColor = [UIColor whiteColor];
[self.contentView addSubview:self.bgImageView];
[self.bgImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.contentView).inset(12);
make.leading.trailing.mas_equalTo(self.contentView).inset(15);
make.height.mas_equalTo(118);
}];
UIView *mask_1 = [self blackMask];
[self.contentView addSubview:mask_1];
[mask_1 mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.mas_equalTo(self.bgImageView);
}];
[self.contentView addSubview:self.avatarImageView];
[self.avatarImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.leading.mas_equalTo(self.bgImageView).offset(12);
make.size.mas_equalTo(CGSizeMake(35, 35));
}];
[self.contentView addSubview:self.nameLabel];
[self.nameLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.avatarImageView).offset(1);
make.leading.mas_equalTo(self.avatarImageView.mas_trailing).offset(6);
}];
[self.contentView addSubview:self.sexImageView];
[self.sexImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerY.mas_equalTo(self.nameLabel);
make.leading.mas_equalTo(2);
make.size.mas_equalTo(CGSizeMake(14, 14));
}];
[self.contentView addSubview:self.idLabel];
[self.idLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.bottom.mas_equalTo(self.avatarImageView).offset(1);
make.leading.mas_equalTo(self.nameLabel);
}];
[self.contentView addSubview:self.eventDescLabel];
[self.eventDescLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.trailing.mas_equalTo(self.bgImageView).inset(12);
make.centerY.mas_equalTo(self.bgImageView);
}];
UIView *mask_2 = [self blackMask];
[self.contentView addSubview:mask_2];
[mask_2 mas_makeConstraints:^(MASConstraintMaker *make) {
make.bottom.leading.trailing.mas_equalTo(self.bgImageView);
make.height.mas_equalTo(32);
}];
[self.contentView addSubview:self.clockImageView];
[self.clockImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerY.mas_equalTo(mask_2);
make.leading.mas_equalTo(mask_2).offset(13);
make.size.mas_equalTo(CGSizeMake(14, 14));
}];
[self.contentView addSubview:self.timeLabel];
[self.timeLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.mas_equalTo(self.clockImageView.mas_trailing).offset(1);
make.centerY.mas_equalTo(mask_2);
}];
[self.contentView addSubview:self.subLabel];
[self.subLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.trailing.mas_equalTo(mask_2).offset(-13);
make.centerY.mas_equalTo(mask_2);
}];
[self.contentView addSubview:self.ringImageView];
[self.ringImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerY.mas_equalTo(mask_2);
make.trailing.mas_equalTo(self.subLabel.mas_leading).offset(-1);
make.size.mas_equalTo(CGSizeMake(14, 14));
}];
}
return self;
}
- (void)updateCell:(EventItemModel *)model {
_model = model;
self.bgImageView.imageUrl = model.eventBanner;
self.avatarImageView.imageUrl = model.roomAvatar;
self.nameLabel.text = @"123";
self.idLabel.text = [NSString stringWithFormat:@"ID:%@", @(model.roomErbanNo)];
self.eventDescLabel.text = model.eventTopic;
self.timeLabel.text = @(model.eventStartTime).stringValue;
self.subLabel.text = @(model.subNum).stringValue;
}
#pragma mark -
- (NetImageView *)bgImageView {
if (!_bgImageView) {
NetImageConfig *config = [[NetImageConfig alloc] init];
config.placeHolder = [UIImageConstant defaultBannerPlaceholder];
_bgImageView = [[NetImageView alloc] initWithConfig:config];
[_bgImageView setCornerRadius:12];
}
return _bgImageView;
}
- (NetImageView *)avatarImageView {
if (!_avatarImageView) {
NetImageConfig *config = [[NetImageConfig alloc] init];
config.placeHolder = [UIImageConstant defaultAvatarPlaceholder];
_avatarImageView = [[NetImageView alloc] initWithConfig:config];
[_avatarImageView setCornerRadius:35/2
corners:kCALayerMaxXMaxYCorner | kCALayerMaxXMinYCorner | kCALayerMinXMaxYCorner | kCALayerMinXMinYCorner
borderWidth:1
borderColor:UIColorFromRGB(0xfffff)];
}
return _avatarImageView;
}
- (UILabel *)nameLabel {
if (!_nameLabel) {
_nameLabel = [UILabel labelInitWithText:@""
font:kFontRegular(14)
textColor:[UIColor whiteColor]];
}
return _nameLabel;
}
- (UILabel *)idLabel {
if (!_idLabel) {
_idLabel = [UILabel labelInitWithText:@""
font:kFontRegular(12)
textColor:[UIColor colorWithWhite:1 alpha:0.6]];
}
return _idLabel;
}
- (UILabel *)eventDescLabel {
if (!_eventDescLabel) {
_eventDescLabel = [UILabel labelInitWithText:@""
font:kFontMedium(14)
textColor:[UIColor colorWithWhite:1 alpha:1]];
_eventDescLabel.numberOfLines = 0;
}
return _eventDescLabel;
}
- (UILabel *)timeLabel {
if (!_timeLabel) {
_timeLabel = [UILabel labelInitWithText:@""
font:kFontRegular(12)
textColor:[UIColor colorWithWhite:1 alpha:0.6]];
}
return _timeLabel;
}
- (UILabel *)subLabel {
if (!_subLabel) {
_subLabel = [UILabel labelInitWithText:@""
font:kFontRegular(12)
textColor:[UIColor colorWithWhite:1 alpha:0.6]];
}
return _subLabel;
}
- (UIImageView *)sexImageView {
if (!_sexImageView) {
_sexImageView = [UIImageView new];
}
return _sexImageView;
}
- (UIImageView *)clockImageView {
if (!_clockImageView) {
_clockImageView = [[UIImageView alloc] initWithImage:kImage(@"event_clock")];
}
return _clockImageView;
}
- (UIImageView *)ringImageView {
if (!_ringImageView) {
_ringImageView = [[UIImageView alloc] initWithImage:kImage(@"event_ring")];
}
return _ringImageView;
}
- (UIView *)blackMask {
UIView *v = [[UIView alloc] init];
v.backgroundColor = [UIColor colorWithWhite:0 alpha:0.6];
return v;
}
@end

View File

@@ -14,7 +14,7 @@ NS_ASSUME_NONNULL_BEGIN
@property (nonatomic, strong) HomeBannerInfoModel *cellModel;
// 更新倒计时天数
- (void)updateCountdownWithDays:(NSInteger)days;
//- (void)updateCountdownWithDays:(NSInteger)days;
@end

View File

@@ -12,16 +12,16 @@
@property (nonatomic, strong) NetImageView *coverImageView;
@property (nonatomic, strong) UILabel *titleLabel;
@property (nonatomic, strong) UIStackView *countdownView;
@property (nonatomic, strong) UILabel *countdownPrefixLabel; // Countdown:
@property (nonatomic, strong) UILabel *daysNumberLabel; //
@property (nonatomic, strong) UILabel *hourNumberLabel; //
@property (nonatomic, strong) UILabel *minuteNumberLabel; //
@property (nonatomic, strong) UILabel *secondNumberLabel; //
@property (nonatomic, strong) UILabel *daysSuffixLabel; // days
@property (nonatomic, strong) UILabel *colonSuffixLabel_1; // ":"
@property (nonatomic, strong) UILabel *colonSuffixLabel_2; // ":"
@property (nonatomic, strong) NSTimer *countdownTimer; //
//@property (nonatomic, strong) UIStackView *countdownView;
//@property (nonatomic, strong) UILabel *countdownPrefixLabel; // Countdown:
//@property (nonatomic, strong) UILabel *daysNumberLabel; //
//@property (nonatomic, strong) UILabel *hourNumberLabel; //
//@property (nonatomic, strong) UILabel *minuteNumberLabel; //
//@property (nonatomic, strong) UILabel *secondNumberLabel; //
//@property (nonatomic, strong) UILabel *daysSuffixLabel; // days
//@property (nonatomic, strong) UILabel *colonSuffixLabel_1; // ":"
//@property (nonatomic, strong) UILabel *colonSuffixLabel_2; // ":"
//@property (nonatomic, strong) NSTimer *countdownTimer; //
@end
@@ -35,7 +35,7 @@
[self.contentView addSubview:self.coverImageView];
[self.contentView addSubview:self.titleLabel];
[self.contentView addSubview:self.countdownView];
// [self.contentView addSubview:self.countdownView];
[self.coverImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.contentView).offset(6);
@@ -49,11 +49,11 @@
make.height.mas_equalTo(26);
}];
[self.countdownView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.titleLabel.mas_bottom).offset(0);
make.leading.trailing.mas_equalTo(self.contentView).inset(15);
make.height.mas_equalTo(26);
}];
// [self.countdownView mas_makeConstraints:^(MASConstraintMaker *make) {
// make.top.mas_equalTo(self.titleLabel.mas_bottom).offset(0);
// make.leading.trailing.mas_equalTo(self.contentView).inset(15);
// make.height.mas_equalTo(26);
// }];
}
return self;
}
@@ -62,10 +62,6 @@
_cellModel = cellModel;
self.coverImageView.imageUrl = cellModel.bannerPic;
self.titleLabel.text = cellModel.bannerName;
//
NSInteger days = 30; // cellModel
[self updateCountdownWithDays:days];
}
#pragma mark -
@@ -86,154 +82,154 @@
return _titleLabel;
}
- (UIStackView *)countdownView {
if (!_countdownView) {
_countdownView = [[UIStackView alloc] initWithArrangedSubviews:@[
self.countdownPrefixLabel,
self.daysNumberLabel,
self.daysSuffixLabel,
self.hourNumberLabel,
self.colonSuffixLabel_1,
self.minuteNumberLabel,
self.colonSuffixLabel_2,
self.secondNumberLabel,
[UIView new]
]];
_countdownView.spacing = 6;
_countdownView.backgroundColor = [UIColor clearColor];
[self.daysNumberLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.greaterThanOrEqualTo(@30);
}];
[self.hourNumberLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.greaterThanOrEqualTo(@30);
}];
[self.minuteNumberLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.greaterThanOrEqualTo(@30);
}];
[self.secondNumberLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.greaterThanOrEqualTo(@30);
}];
}
return _countdownView;
}
//- (UIStackView *)countdownView {
// if (!_countdownView) {
// _countdownView = [[UIStackView alloc] initWithArrangedSubviews:@[
// self.countdownPrefixLabel,
// self.daysNumberLabel,
// self.daysSuffixLabel,
// self.hourNumberLabel,
// self.colonSuffixLabel_1,
// self.minuteNumberLabel,
// self.colonSuffixLabel_2,
// self.secondNumberLabel,
// [UIView new]
// ]];
// _countdownView.spacing = 6;
// _countdownView.backgroundColor = [UIColor clearColor];
//
// [self.daysNumberLabel mas_makeConstraints:^(MASConstraintMaker *make) {
// make.width.greaterThanOrEqualTo(@30);
// }];
// [self.hourNumberLabel mas_makeConstraints:^(MASConstraintMaker *make) {
// make.width.greaterThanOrEqualTo(@30);
// }];
// [self.minuteNumberLabel mas_makeConstraints:^(MASConstraintMaker *make) {
// make.width.greaterThanOrEqualTo(@30);
// }];
// [self.secondNumberLabel mas_makeConstraints:^(MASConstraintMaker *make) {
// make.width.greaterThanOrEqualTo(@30);
// }];
// }
// return _countdownView;
//}
//
//- (UILabel *)countdownPrefixLabel {
// if (!_countdownPrefixLabel) {
// _countdownPrefixLabel = [UILabel labelInitWithText:@"Countdown: " font:kFontSemibold(16) textColor:UIColorFromRGB(0xff9900)];
// }
// return _countdownPrefixLabel;
//}
//
//- (UILabel *)daysNumberLabel {
// if (!_daysNumberLabel) {
// _daysNumberLabel = [UILabel labelInitWithText:@"00" font:kFontSemibold(16) textColor:UIColorFromRGB(0xff9900)];
// _daysNumberLabel.backgroundColor = [[UIColor orangeColor] colorWithAlphaComponent:0.15];
// _daysNumberLabel.layer.cornerRadius = 6;
// _daysNumberLabel.layer.masksToBounds = YES;
// _daysNumberLabel.textAlignment = NSTextAlignmentCenter;
// }
// return _daysNumberLabel;
//}
//
//- (UILabel *)hourNumberLabel {
// if (!_hourNumberLabel) {
// _hourNumberLabel = [UILabel labelInitWithText:@"00" font:kFontSemibold(16) textColor:UIColorFromRGB(0xff9900)];
// _hourNumberLabel.backgroundColor = [[UIColor orangeColor] colorWithAlphaComponent:0.15];
// _hourNumberLabel.layer.cornerRadius = 6;
// _hourNumberLabel.layer.masksToBounds = YES;
// _hourNumberLabel.textAlignment = NSTextAlignmentCenter;
// }
// return _hourNumberLabel;
//}
//
//- (UILabel *)minuteNumberLabel {
// if (!_minuteNumberLabel) {
// _minuteNumberLabel = [UILabel labelInitWithText:@"00" font:kFontSemibold(16) textColor:UIColorFromRGB(0xff9900)];
// _minuteNumberLabel.backgroundColor = [[UIColor orangeColor] colorWithAlphaComponent:0.15];
// _minuteNumberLabel.layer.cornerRadius = 6;
// _minuteNumberLabel.layer.masksToBounds = YES;
// _minuteNumberLabel.textAlignment = NSTextAlignmentCenter;
// }
// return _minuteNumberLabel;
//}
//
//- (UILabel *)secondNumberLabel {
// if (!_secondNumberLabel) {
// _secondNumberLabel = [UILabel labelInitWithText:@"00" font:kFontSemibold(16) textColor:UIColorFromRGB(0xff9900)];
// _secondNumberLabel.backgroundColor = [[UIColor orangeColor] colorWithAlphaComponent:0.15];
// _secondNumberLabel.layer.cornerRadius = 6;
// _secondNumberLabel.layer.masksToBounds = YES;
// _secondNumberLabel.textAlignment = NSTextAlignmentCenter;
// }
// return _secondNumberLabel;
//}
//
//- (UILabel *)daysSuffixLabel {
// if (!_daysSuffixLabel) {
// _daysSuffixLabel = [UILabel labelInitWithText:@"days" font:kFontSemibold(16) textColor:UIColorFromRGB(0xff9900)];
// }
// return _daysSuffixLabel;
//}
//
//- (UILabel *)colonSuffixLabel_1 {
// if (!_colonSuffixLabel_1) {
// _colonSuffixLabel_1 = [UILabel labelInitWithText:@":" font:kFontSemibold(16) textColor:UIColorFromRGB(0xff9900)];
// }
// return _colonSuffixLabel_1;
//}
//
//- (UILabel *)colonSuffixLabel_2 {
// if (!_colonSuffixLabel_2) {
// _colonSuffixLabel_2 = [UILabel labelInitWithText:@":" font:kFontSemibold(16) textColor:UIColorFromRGB(0xff9900)];
// }
// return _colonSuffixLabel_2;
//}
- (UILabel *)countdownPrefixLabel {
if (!_countdownPrefixLabel) {
_countdownPrefixLabel = [UILabel labelInitWithText:@"Countdown: " font:kFontSemibold(16) textColor:UIColorFromRGB(0xff9900)];
}
return _countdownPrefixLabel;
}
- (UILabel *)daysNumberLabel {
if (!_daysNumberLabel) {
_daysNumberLabel = [UILabel labelInitWithText:@"00" font:kFontSemibold(16) textColor:UIColorFromRGB(0xff9900)];
_daysNumberLabel.backgroundColor = [[UIColor orangeColor] colorWithAlphaComponent:0.15];
_daysNumberLabel.layer.cornerRadius = 6;
_daysNumberLabel.layer.masksToBounds = YES;
_daysNumberLabel.textAlignment = NSTextAlignmentCenter;
}
return _daysNumberLabel;
}
- (UILabel *)hourNumberLabel {
if (!_hourNumberLabel) {
_hourNumberLabel = [UILabel labelInitWithText:@"00" font:kFontSemibold(16) textColor:UIColorFromRGB(0xff9900)];
_hourNumberLabel.backgroundColor = [[UIColor orangeColor] colorWithAlphaComponent:0.15];
_hourNumberLabel.layer.cornerRadius = 6;
_hourNumberLabel.layer.masksToBounds = YES;
_hourNumberLabel.textAlignment = NSTextAlignmentCenter;
}
return _hourNumberLabel;
}
- (UILabel *)minuteNumberLabel {
if (!_minuteNumberLabel) {
_minuteNumberLabel = [UILabel labelInitWithText:@"00" font:kFontSemibold(16) textColor:UIColorFromRGB(0xff9900)];
_minuteNumberLabel.backgroundColor = [[UIColor orangeColor] colorWithAlphaComponent:0.15];
_minuteNumberLabel.layer.cornerRadius = 6;
_minuteNumberLabel.layer.masksToBounds = YES;
_minuteNumberLabel.textAlignment = NSTextAlignmentCenter;
}
return _minuteNumberLabel;
}
- (UILabel *)secondNumberLabel {
if (!_secondNumberLabel) {
_secondNumberLabel = [UILabel labelInitWithText:@"00" font:kFontSemibold(16) textColor:UIColorFromRGB(0xff9900)];
_secondNumberLabel.backgroundColor = [[UIColor orangeColor] colorWithAlphaComponent:0.15];
_secondNumberLabel.layer.cornerRadius = 6;
_secondNumberLabel.layer.masksToBounds = YES;
_secondNumberLabel.textAlignment = NSTextAlignmentCenter;
}
return _secondNumberLabel;
}
- (UILabel *)daysSuffixLabel {
if (!_daysSuffixLabel) {
_daysSuffixLabel = [UILabel labelInitWithText:@"days" font:kFontSemibold(16) textColor:UIColorFromRGB(0xff9900)];
}
return _daysSuffixLabel;
}
- (UILabel *)colonSuffixLabel_1 {
if (!_colonSuffixLabel_1) {
_colonSuffixLabel_1 = [UILabel labelInitWithText:@":" font:kFontSemibold(16) textColor:UIColorFromRGB(0xff9900)];
}
return _colonSuffixLabel_1;
}
- (UILabel *)colonSuffixLabel_2 {
if (!_colonSuffixLabel_2) {
_colonSuffixLabel_2 = [UILabel labelInitWithText:@":" font:kFontSemibold(16) textColor:UIColorFromRGB(0xff9900)];
}
return _colonSuffixLabel_2;
}
- (void)updateCountdownWithDays:(NSInteger)days {
//
self.daysNumberLabel.text = [NSString stringWithFormat:@"%02ld", (long)days];
//
[self stopCountdownTimer];
// 0
if (days > 0) {
[self startCountdownTimerWithDays:days];
}
}
- (void)startCountdownTimerWithDays:(NSInteger)days {
//
//
self.countdownTimer = [NSTimer scheduledTimerWithTimeInterval:86400 target:self selector:@selector(updateDaysCount) userInfo:nil repeats:YES];
}
- (void)updateDaysCount {
//
NSInteger currentDays = [self.daysNumberLabel.text integerValue];
// 0
if (currentDays > 0) {
currentDays--;
self.daysNumberLabel.text = [NSString stringWithFormat:@"%02ld", (long)currentDays];
}
// 0
if (currentDays == 0) {
[self stopCountdownTimer];
}
}
- (void)stopCountdownTimer {
if (self.countdownTimer && [self.countdownTimer isValid]) {
[self.countdownTimer invalidate];
self.countdownTimer = nil;
}
}
//- (void)updateCountdownWithDays:(NSInteger)days {
// //
// self.daysNumberLabel.text = [NSString stringWithFormat:@"%02ld", (long)days];
//
// //
// [self stopCountdownTimer];
//
// // 0
// if (days > 0) {
// [self startCountdownTimerWithDays:days];
// }
//}
//
//- (void)startCountdownTimerWithDays:(NSInteger)days {
// //
// //
// self.countdownTimer = [NSTimer scheduledTimerWithTimeInterval:86400 target:self selector:@selector(updateDaysCount) userInfo:nil repeats:YES];
//}
//
//- (void)updateDaysCount {
// //
// NSInteger currentDays = [self.daysNumberLabel.text integerValue];
//
// // 0
// if (currentDays > 0) {
// currentDays--;
// self.daysNumberLabel.text = [NSString stringWithFormat:@"%02ld", (long)currentDays];
// }
//
// // 0
// if (currentDays == 0) {
// [self stopCountdownTimer];
// }
//}
//
//- (void)stopCountdownTimer {
// if (self.countdownTimer && [self.countdownTimer isValid]) {
// [self.countdownTimer invalidate];
// self.countdownTimer = nil;
// }
//}
- (void)dealloc {
// Cell
[self stopCountdownTimer];
// [self stopCountdownTimer];
}
@end

View File

@@ -0,0 +1,12 @@
#import "UIKit/UIKit.h"
typedef NS_ENUM(NSInteger, CreateEventPickerType) {
CreateEventPickerTypeDuration = 0,
CreateEventPickerTypeStartTime = 1
};
@interface CreateEventPickerContainerView : UIView <UIGestureRecognizerDelegate, UIPickerViewDataSource, UIPickerViewDelegate>
@property (nonatomic, assign) CreateEventPickerType pickerType;
@property (nonatomic, copy) void (^onConfirmDate)(NSDate *date, NSString *resultString);
- (void)showInView:(UIView *)parentView initialDate:(NSDate *)date pickerType:(CreateEventPickerType)type onConfirm:(void (^)(NSDate *date, NSString *resultString))onConfirm;
@end

View File

@@ -0,0 +1,319 @@
#import "CreateEventPickerContainerView.h"
@interface CreateEventPickerContainerView () <UIGestureRecognizerDelegate, UIPickerViewDataSource, UIPickerViewDelegate>
@property (nonatomic, strong) UIPickerView *pickerView;
@property (nonatomic, strong) NSDate *minDate;
@property (nonatomic, strong) NSDate *maxDate;
@property (nonatomic, strong) NSArray<NSDate *> *dateArray;
@property (nonatomic, strong) NSArray<NSString *> *monthArray;
@property (nonatomic, strong) NSArray<NSString *> *dayArray;
@property (nonatomic, strong) NSArray<NSString *> *hourArray;
@property (nonatomic, strong) NSDate *selectedDate;
// StartTime
@property (nonatomic, strong) NSArray<NSDictionary *> *durationsOptions;
@end
@implementation CreateEventPickerContainerView {
UIView *_pickerBg;
UILabel *_titleLabel;
UIButton *_okButton;
}
- (instancetype)init {
self = [super init];
if (self) {
[self setupUI];
}
return self;
}
- (void)setupUI {
self.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.3];
//
_pickerBg = [[UIView alloc] init];
_pickerBg.backgroundColor = [UIColor whiteColor];
_pickerBg.layer.cornerRadius = 16;
_pickerBg.clipsToBounds = YES;
[self addSubview:_pickerBg];
//
_titleLabel = [[UILabel alloc] init];
_titleLabel.font = [UIFont systemFontOfSize:16 weight:UIFontWeightMedium];
_titleLabel.textColor = [UIColor blackColor];
_titleLabel.textAlignment = NSTextAlignmentCenter;
[_pickerBg addSubview:_titleLabel];
// OK
_okButton = [UIButton buttonWithType:UIButtonTypeSystem];
[_okButton setTitle:@"OK" forState:UIControlStateNormal];
[_okButton setTitleColor:UIColorFromRGB(0xe29030) forState:UIControlStateNormal];
_okButton.titleLabel.font = [UIFont systemFontOfSize:16 weight:UIFontWeightMedium];
[_okButton addTarget:self action:@selector(okTapped) forControlEvents:UIControlEventTouchUpInside];
[_pickerBg addSubview:_okButton];
// Picker View
self.pickerView = [[UIPickerView alloc] init];
self.pickerView.dataSource = self;
self.pickerView.delegate = self;
[_pickerBg addSubview:self.pickerView];
//
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismiss)];
[self addGestureRecognizer:tap];
tap.delegate = self;
//
[_pickerBg mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.bottom.equalTo(self);
make.height.mas_equalTo(300);
}];
[_titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(_pickerBg).offset(16);
make.centerX.equalTo(_pickerBg);
}];
[_okButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerY.equalTo(_titleLabel);
make.right.equalTo(_pickerBg).offset(-16);
}];
[self.pickerView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(_titleLabel.mas_bottom).offset(8);
make.left.right.bottom.equalTo(_pickerBg);
}];
}
#pragma mark - UIGestureRecognizerDelegate
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
if ([touch.view isDescendantOfView:_pickerBg]) {
return NO;
}
return YES;
}
#pragma mark - Public Methods
- (void)buildDurationDataSource {
self.durationsOptions = @[
@{@"title": @"30分钟", @"minutes": @30},
@{@"title": @"1小时", @"minutes": @60},
@{@"title": @"2小时", @"minutes": @120},
@{@"title": @"3小时", @"minutes": @180},
@{@"title": @"4小时", @"minutes": @240},
@{@"title": @"6小时", @"minutes": @360},
@{@"title": @"12小时", @"minutes": @720},
@{@"title": @"1天", @"minutes": @1440},
@{@"title": @"2天", @"minutes": @2880},
@{@"title": @"3天", @"minutes": @4320}
];
}
- (void)buildStartTimeSourceWithInitialDate:(NSDate *)date {
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *now = [NSDate date];
NSDate *start = [calendar dateByAddingUnit:NSCalendarUnitHour value:1 toDate:now options:0];
NSDateComponents *comp = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth fromDate:start];
comp.month += 1;
NSDate *end = [calendar dateFromComponents:comp];
self.minDate = start;
self.maxDate = end;
NSMutableArray *months = [NSMutableArray array];
NSMutableArray *days = [NSMutableArray array];
NSMutableArray *hours = [NSMutableArray array];
NSDate *iter = start;
while ([iter compare:end] == NSOrderedAscending) {
NSDateComponents *c = [calendar components:NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitHour fromDate:iter];
NSString *monthStr = [NSString stringWithFormat:@"%02ld", (long)c.month];
NSString *dayStr = [NSString stringWithFormat:@"%02ld", (long)c.day];
NSString *hourStr = [NSString stringWithFormat:@"%02ld:00", (long)c.hour];
if (![months containsObject:monthStr]) [months addObject:monthStr];
if (![days containsObject:dayStr]) [days addObject:dayStr];
if (![hours containsObject:hourStr]) [hours addObject:hourStr];
iter = [calendar dateByAddingUnit:NSCalendarUnitHour value:1 toDate:iter options:0];
}
self.monthArray = months;
self.dayArray = days;
self.hourArray = hours;
self.selectedDate = start;
}
- (void)showInView:(UIView *)parentView initialDate:(NSDate *)date pickerType:(CreateEventPickerType)type onConfirm:(void (^)(NSDate *date, NSString *resultString))onConfirm{
self.pickerType = type;
self.onConfirmDate = onConfirm;
if (type == CreateEventPickerTypeStartTime) {
[self buildStartTimeSourceWithInitialDate:date];
_titleLabel.text = @"Start Time";
} else if (type == CreateEventPickerTypeDuration) {
[self buildDurationDataSource];
_titleLabel.text = @"Duration";
}
self.frame = parentView.bounds;
[parentView addSubview:self];
self.alpha = 0;
[self.pickerView reloadAllComponents];
[UIView animateWithDuration:0.25 animations:^{
self.alpha = 1;
}];
}
#pragma mark - UIPickerViewDataSource & Delegate
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
switch (self.pickerType) {
case CreateEventPickerTypeStartTime:
return 3;
break;
case CreateEventPickerTypeDuration:
default:
return 1;
break;
}
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
switch (self.pickerType) {
case CreateEventPickerTypeStartTime: {
if (component == 0) return self.monthArray.count;
if (component == 1) return self.dayArray.count;
if (component == 2) return self.hourArray.count;
}
break;
case CreateEventPickerTypeDuration:
default:
return self.durationsOptions.count;
break;
}
return 0;
}
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
switch (self.pickerType) {
case CreateEventPickerTypeStartTime: {
NSInteger monthIdx = [pickerView selectedRowInComponent:0];
NSInteger dayIdx = [pickerView selectedRowInComponent:1];
NSInteger hourIdx = [pickerView selectedRowInComponent:2];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *nowComp = [calendar components:NSCalendarUnitYear fromDate:[NSDate date]];
NSInteger year = nowComp.year;
NSInteger month = [self.monthArray[monthIdx] integerValue];
NSInteger day = [self.dayArray[dayIdx] integerValue];
NSInteger hour = [[self.hourArray[hourIdx] substringToIndex:2] integerValue];
NSDateComponents *selComp = [[NSDateComponents alloc] init];
selComp.year = year;
selComp.month = month;
selComp.day = day;
selComp.hour = hour;
selComp.minute = 0;
self.selectedDate = [calendar dateFromComponents:selComp];
}
break;
case CreateEventPickerTypeDuration: {
NSInteger minutes = [self.durationsOptions[row][@"minutes"] integerValue];
NSCalendar *calendar = [NSCalendar currentCalendar];
self.selectedDate = [calendar dateByAddingUnit:NSCalendarUnitMinute value:minutes toDate:[NSDate date] options:0];
}
break;
default:
break;
}
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[pickerView reloadComponent:component];
});
}
- (NSAttributedString *)pickerView:(UIPickerView *)pickerView attributedTitleForRow:(NSInteger)row forComponent:(NSInteger)component {
NSInteger selectedRow = [pickerView selectedRowInComponent:component];
BOOL isSelectedRow = selectedRow == row;
NSString *content = @"";
switch (self.pickerType) {
case CreateEventPickerTypeStartTime: {
if (component == 0) content = self.monthArray[row];
if (component == 1) content = self.dayArray[row];
if (component == 2) content = self.hourArray[row];
}
break;
case CreateEventPickerTypeDuration:
content = self.durationsOptions[row][@"title"];
break;
default:
break;
}
return [[NSAttributedString alloc] initWithString:content attributes:@{
NSFontAttributeName: isSelectedRow ? kFontMedium(15) : kFontRegular(14),
NSForegroundColorAttributeName: isSelectedRow ? UIColorFromRGB(0x313131) : UIColorFromRGB(0x7b7b7d)
}];
}
//- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
// __block UILabel *label = (UILabel *)view;
//// dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
// if (!label) {
// label = [[UILabel alloc] init];
// label.textAlignment = NSTextAlignmentCenter;
// }
//
// NSString *content = @"";
// switch (self.pickerType) {
// case CreateEventPickerTypeStartTime: {
// if (component == 0) content = self.monthArray[row];
// if (component == 1) content = self.dayArray[row];
// if (component == 2) content = self.hourArray[row];
// }
// break;
// case CreateEventPickerTypeDuration:
// content = self.durationsOptions[row][@"title"];
// break;
// default:
// break;
// }
//
// label.text = content;
//
// //
// NSInteger selectedRow = [pickerView selectedRowInComponent:component];
// if (row == selectedRow) {
// label.textColor = UIColorFromRGB(0x313131);
// label.font = kFontMedium(15);
// } else {
// label.textColor = UIColorFromRGB(0x7b7b7d);
// label.font = kFontRegular(14);
// }
//// });
// return label;
//}
#pragma mark - Actions
- (void)okTapped {
if (self.onConfirmDate) {
NSString *resultString = @"";
switch (self.pickerType) {
case CreateEventPickerTypeStartTime: {
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy-MM-dd-HH:mm";
resultString = [formatter stringFromDate:self.selectedDate];
}
break;
case CreateEventPickerTypeDuration: {
NSInteger selectedRow = [self.pickerView selectedRowInComponent:0];
resultString = self.durationsOptions[selectedRow][@"title"];
}
break;
default:
break;
}
self.onConfirmDate(self.selectedDate, resultString);
}
[self dismiss];
}
- (void)dismiss {
[UIView animateWithDuration:0.25 animations:^{
self.alpha = 0;
} completion:^(BOOL finished) {
[self removeFromSuperview];
}];
}
@end

View File

@@ -7,7 +7,7 @@
#import "CreateEventSelectRoomViewController.h"
#import "CreateEventPresenter.h"
#import "EventCenterEmptyCell.h"
@interface CreateEventSelectRoomEmptyCell : UITableViewCell
+ (CGFloat)cellHeight;
@@ -159,7 +159,8 @@
tableView.separatorInset = UIEdgeInsetsZero;
tableView.backgroundColor = [UIColor whiteColor];
[CreateEventSelectRoomCell registerTo:tableView];
[CreateEventSelectRoomEmptyCell registerTo:tableView];
// [CreateEventSelectRoomEmptyCell registerTo:tableView];
[EventCenterEmptyCell registerTo:tableView];
[self.view addSubview:tableView];
}
@@ -223,7 +224,7 @@
switch (indexPath.section) {
case 0: {
if (self.myRooms.count == 0) {
cell = [CreateEventSelectRoomEmptyCell cellFor:tableView atIndexPath:indexPath];
cell = [EventCenterEmptyCell cellFor:tableView atIndexPath:indexPath];
} else {
cell = [CreateEventSelectRoomCell cellFor:tableView atIndexPath:indexPath];
}
@@ -231,7 +232,7 @@
break;
case 1: {
if (self.adminRooms.count == 0) {
cell = [CreateEventSelectRoomEmptyCell cellFor:tableView atIndexPath:indexPath];
cell = [EventCenterEmptyCell cellFor:tableView atIndexPath:indexPath];
} else {
cell = [CreateEventSelectRoomCell cellFor:tableView atIndexPath:indexPath];
}

View File

@@ -9,14 +9,120 @@
#import <Masonry/Masonry.h>
#import <PhotosUI/PhotosUI.h>
#import "CreateEventPickerContainerView.h"
#import "CreateEventSelectRoomViewController.h"
#define MAX_EVENT_TITLE_LENGTH 20
#define MAX_EVENT_CONTENT_LENGTH 100
@interface CreateEventViewControllerV2 () <UITextViewDelegate, UITextFieldDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate, PHPickerViewControllerDelegate, UIPickerViewDataSource, UIPickerViewDelegate, UIScrollViewDelegate>
//@interface CreateEventPickerContainerView : UIView <UIPickerViewDataSource, UIPickerViewDelegate>
//@property (nonatomic, copy) void (^onConfirm)(NSInteger hour, NSInteger min);
//@property (nonatomic, assign) NSInteger selectedHour;
//@property (nonatomic, assign) NSInteger selectedMin;
//@property (nonatomic, strong) UIPickerView *pickerView;
//- (void)showInView:(UIView *)parentView initialHour:(NSInteger)hour initialMin:(NSInteger)min;
//- (void)dismiss;
//@end
//
//@implementation CreateEventPickerContainerView {
// UIView *_pickerBg;
// UILabel *_titleLabel;
// UIButton *_okButton;
//}
//- (instancetype)init {
// self = [super initWithFrame:CGRectZero];
// if (self) {
// self.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.3];
// _pickerBg = [[UIView alloc] init];
// _pickerBg.backgroundColor = [UIColor whiteColor];
// _pickerBg.layer.cornerRadius = 16;
// _pickerBg.clipsToBounds = YES;
// [self addSubview:_pickerBg];
// [_pickerBg mas_makeConstraints:^(MASConstraintMaker *make) {
// make.left.right.equalTo(self);
// make.bottom.equalTo(self.mas_bottom);
// make.height.mas_equalTo(300);
// }];
// _titleLabel = [[UILabel alloc] init];
// _titleLabel.text = YMLocalizedString(@"20.20.59_text_16");
// _titleLabel.font = kFontMedium(16);
// _titleLabel.textAlignment = NSTextAlignmentCenter;
// [_pickerBg addSubview:_titleLabel];
// [_titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
// make.top.equalTo(_pickerBg.mas_top).offset(16);
// make.centerX.equalTo(_pickerBg);
// }];
// _okButton = [UIButton buttonWithType:UIButtonTypeCustom];
// [_okButton setTitle:@"OK" forState:UIControlStateNormal];
// [_okButton setTitleColor:UIColorFromRGB(0xe29030) forState:UIControlStateNormal];
// _okButton.titleLabel.font = kFontMedium(16);
// [_okButton addTarget:self action:@selector(okTapped) forControlEvents:UIControlEventTouchUpInside];
// [_pickerBg addSubview:_okButton];
// [_okButton mas_makeConstraints:^(MASConstraintMaker *make) {
// make.centerY.equalTo(_titleLabel);
// make.trailing.equalTo(_pickerBg.mas_trailing).offset(-20);
// }];
// self.pickerView = [[UIPickerView alloc] init];
// self.pickerView.dataSource = self;
// self.pickerView.delegate = self;
// [_pickerBg addSubview:self.pickerView];
// [self.pickerView mas_makeConstraints:^(MASConstraintMaker *make) {
// make.left.right.bottom.equalTo(_pickerBg);
// make.top.equalTo(_titleLabel.mas_bottom).offset(8);
// }];
// UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismiss)];
// [self addGestureRecognizer:tap];
// tap.cancelsTouchesInView = NO;
// }
// return self;
//}
//- (void)showInView:(UIView *)parentView initialHour:(NSInteger)hour initialMin:(NSInteger)min {
// self.selectedHour = hour;
// self.selectedMin = min;
// self.frame = parentView.bounds;
// [parentView addSubview:self];
// self.alpha = 0;
// [self.pickerView selectRow:hour inComponent:0 animated:NO];
// [self.pickerView selectRow:min/30 inComponent:1 animated:NO];
// [UIView animateWithDuration:0.25 animations:^{
// self.alpha = 1;
// }];
//}
//- (void)dismiss {
// [UIView animateWithDuration:0.25 animations:^{
// self.alpha = 0;
// } completion:^(BOOL finished) {
// [self removeFromSuperview];
// }];
//}
//- (void)okTapped {
// if (self.onConfirm) self.onConfirm(self.selectedHour, self.selectedMin);
// [self dismiss];
//}
//// UIPickerViewDataSource
//- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { return 2; }
//- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
// if (component == 0) return 7;
// return 2;
//}
//// UIPickerViewDelegate
//- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
// if (component == 0) self.selectedHour = row;
// else self.selectedMin = row * 30;
// [pickerView reloadComponent:component];
//}
//@end
@interface CreateEventViewControllerV2 () <UITextViewDelegate, UITextFieldDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate, PHPickerViewControllerDelegate, UIScrollViewDelegate>
@property (nonatomic, strong) UIImage *selectedImage;
//@property (nonatomic, strong) UIView *durationPickerContainerView;
@property (nonatomic, strong) CreateEventPickerContainerView *durationPickerView;
@property (nonatomic, strong) UILabel *durationPickerTitleLabel;
@property (nonatomic, strong) UIButton *durationPickerOkButton;
@property (nonatomic, assign) NSInteger selectedHour;
@property (nonatomic, assign) NSInteger selectedMin;
//
- (UIButton *)createUploadBannerButtonWithTitle:(NSString *)title imageName:(NSString *)imageName selectedImageName:(NSString *)selectedImageName tag:(NSInteger)tag;
@@ -30,8 +136,7 @@
- (void)setupDurationPicker;
- (void)showDurationPicker;
- (void)hideDurationPicker;
- (void)durationPickerDoneTapped;
- (void)durationPickerCancelTapped;
- (void)durationPickerOkTapped;
@end
@implementation CreateEventViewControllerV2
@@ -46,7 +151,7 @@ static const CGFloat kSectionSpacing = 20.0;
self.title = @"Create Event";
[self setupUI];
[self setupDatePicker]; //
// [self setupDatePicker]; //
// [self setupDurationPicker]; //
[self updateEventTitleCharCount];
[self updateEventContentCharCount];
@@ -280,24 +385,21 @@ static const CGFloat kSectionSpacing = 20.0;
}
- (void)selectStartTimeTapped {
NSLog(@"Select Start Time Tapped");
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy-MM-dd HH:mm";
self.startTimePlaceholderLabel.text = [formatter stringFromDate:[NSDate date]];
self.startTimePlaceholderLabel.textColor = [UIColor blackColor];
[self checkCreateEventButtonState];
CreateEventPickerContainerView *view = [CreateEventPickerContainerView new];
__weak typeof(self) weakSelf = self;
[view showInView:self.view initialDate:[NSDate date] pickerType:CreateEventPickerTypeStartTime onConfirm:^(NSDate *date, NSString *resultString) {
weakSelf.startTimePlaceholderLabel.text = resultString;
[weakSelf checkCreateEventButtonState];
}];
}
- (void)selectDurationTapped {
NSLog(@"Select Duration Tapped");
// Placeholder: Show a duration picker
// self.durationPlaceholderLabel.text = @"2 hours";
// self.durationPlaceholderLabel.textColor = [UIColor blackColor];
self.datePickerContainerView.hidden = NO;
[self checkCreateEventButtonState];
CreateEventPickerContainerView *view = [CreateEventPickerContainerView new];
__weak typeof(self) weakSelf = self;
[view showInView:self.view initialDate:[NSDate date] pickerType:CreateEventPickerTypeDuration onConfirm:^(NSDate *date, NSString *resultString) {
weakSelf.durationPlaceholderLabel.text = resultString;
[weakSelf checkCreateEventButtonState];
}];
}
- (void)createEventButtonTapped {
@@ -490,12 +592,21 @@ static const CGFloat kSectionSpacing = 20.0;
}
- (void)showDatePicker {
[self.view bringSubviewToFront:self.datePickerContainerView];
self.datePickerContainerView.hidden = NO;
self.datePickerContainerView.alpha = 0;
[UIView animateWithDuration:0.3 animations:^{
self.datePickerContainerView.alpha = 1;
CreateEventPickerContainerView *picker = [[CreateEventPickerContainerView alloc] init];
[picker showInView:self.view initialDate:[NSDate date] pickerType:CreateEventPickerTypeStartTime onConfirm:^(NSDate *date, NSString *resultString) {
}];
// if (!_datePickerContainerView) {
// [self setupDatePicker];
// }
// [self.view bringSubviewToFront:self.datePickerContainerView];
// self.datePickerContainerView.hidden = NO;
// self.datePickerContainerView.alpha = 0;
// [UIView animateWithDuration:0.3 animations:^{
// self.datePickerContainerView.alpha = 1;
// }];
}
- (void)hideDatePicker {
@@ -542,39 +653,6 @@ static const CGFloat kSectionSpacing = 20.0;
}
}
#pragma mark - UIPickerViewDataSource
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
if (pickerView == self.durationPicker) {
return 2; // Hours and Minutes
}
return 0;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
if (pickerView == self.durationPicker) {
if (component == 0) { // Hours component
return 24; // 1 to 24 hours
} else if (component == 1) { // Minutes component
return 12; // 0, 5, 10, ..., 55 minutes (12 options)
}
}
return 0;
}
#pragma mark - UIPickerViewDelegate
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
if (pickerView == self.durationPicker) {
if (component == 0) { // Hours component
return [NSString stringWithFormat:@"%ld h", (long)row + 1];
} else if (component == 1) { // Minutes component
return [NSString stringWithFormat:@"%02ld m", (long)row * 5];
}
}
return nil;
}
#pragma mark - Event Title Section
- (void)setupEventTitleSection {
self.eventTitleLabel = [self createLabelWithText:YMLocalizedString(@"20.20.59_text_9")];
@@ -761,10 +839,10 @@ static const CGFloat kSectionSpacing = 20.0;
[self.notifyFansSwitch mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerY.equalTo(self.notifyFansLabel);
make.trailing.equalTo(self.contentView).offset(-kHorizontalPadding);
make.bottom.equalTo(self.contentView).offset(-kSectionSpacing);
make.bottom.equalTo(self.contentView).offset(-kSectionSpacing*5);
}];
[self.contentView mas_makeConstraints:^(MASConstraintMaker *make) {
make.bottom.greaterThanOrEqualTo(self.notifyFansSwitch.mas_bottom).offset(20 + 60);
make.bottom.greaterThanOrEqualTo(self.notifyFansSwitch.mas_bottom).offset(kSectionSpacing*5);
}];
}
@@ -790,4 +868,55 @@ static const CGFloat kSectionSpacing = 20.0;
}
}
#pragma mark - Duration Picker Methods
- (void)setupDurationPicker {
if (!self.durationPickerView) {
self.durationPickerView = [[CreateEventPickerContainerView alloc] init];
}
__weak typeof(self) weakSelf = self;
[self.durationPickerView showInView:self.view
initialDate:[NSDate date]
pickerType:CreateEventPickerTypeDuration
onConfirm:^(NSDate *date, NSString *resultString) {
weakSelf.durationPlaceholderLabel.text = resultString;
[weakSelf checkCreateEventButtonState];
}];
}
- (void)showDurationPicker {
[self setupDurationPicker];
[self.view bringSubviewToFront:self.durationPickerView];
self.durationPickerView.hidden = NO;
self.durationPickerView.alpha = 0;
[UIView animateWithDuration:0.25 animations:^{
self.durationPickerView.alpha = 1;
}];
}
- (void)hideDurationPicker {
[UIView animateWithDuration:0.25 animations:^{
self.durationPickerView.alpha = 0;
} completion:^(BOOL finished) {
self.durationPickerView.hidden = YES;
}];
}
- (void)durationPickerOkTapped {
[self hideDurationPicker];
// label
NSString *hourStr = [NSString stringWithFormat:@"%ldHours", (long)self.selectedHour];
NSString *minStr = [NSString stringWithFormat:@"%ldMins", (long)self.selectedMin];
if (self.selectedHour == 0 && self.selectedMin == 0) {
self.durationPlaceholderLabel.text = YMLocalizedString(@"XPAnchorPKTableViewCell2");
} else if (self.selectedMin == 0) {
self.durationPlaceholderLabel.text = hourStr;
} else if (self.selectedHour == 0) {
self.durationPlaceholderLabel.text = minStr;
} else {
self.durationPlaceholderLabel.text = [NSString stringWithFormat:@"%@ & %@", hourStr, minStr];
}
[self checkCreateEventButtonState];
}
@end

View File

@@ -11,14 +11,14 @@ NS_ASSUME_NONNULL_BEGIN
@class PIHomeItemModel;
@protocol XPNewHomeHeadViewDelegate <NSObject>
///选择
-(void)selectItemWithModel:(PIHomeItemModel *)model;
-(void)selectItemAtIndexPath:(NSIndexPath *)indexPath;
-(void)selectBannerListWithModel:(HomeBannerInfoModel *)model;
@end
@interface XPNewHomeHeadView : UIView
@property (nonatomic,copy) NSArray<HomeBannerInfoModel *> *bannerList;
@property(nonatomic,copy) NSArray *itemList;
@property (nonatomic,copy) NSArray *rankAvatars;
@property(nonatomic,weak) id<XPNewHomeHeadViewDelegate>delegate;
@end

View File

@@ -210,23 +210,6 @@
_pi_BannerView.hidden = YES;
}
}
- (void)setItemList:(NSArray *)itemList{
_itemList = itemList;
self.collectionView.scrollEnabled = _itemList.count > 2;
self.collectionView.hidden = _itemList.count == 0;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self.collectionView reloadData];
});
if (_itemList.count == 0){
[self.collectionView mas_remakeConstraints:^(MASConstraintMaker *make) {
make.leading.mas_equalTo(0);
make.trailing.mas_equalTo(0);
make.top.mas_equalTo(kGetScaleWidth(0));
make.height.mas_equalTo(kGetScaleWidth(0));
}];
}
}
- (void)setRankAvatars:(NSArray *)rankAvatars {
_rankAvatars = rankAvatars;
@@ -234,34 +217,29 @@
}
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
return self.itemList.count > 0 ? self.itemList.count : 2;
return 2;
}
- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
XPNewHomeItemCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([XPNewHomeItemCell class]) forIndexPath:indexPath];
if(indexPath.row < self.itemList.count){
if (indexPath.row == 0) {
cell.rankAvatarsModelArray = self.rankAvatars;
cell.itemModel = [self.itemList xpSafeObjectAtIndex:indexPath.row];
} else {
cell.itemModel = [self.itemList xpSafeObjectAtIndex:indexPath.row];
}
if (indexPath.row == 0) {
cell.rankAvatarsModelArray = self.rankAvatars;
}
[cell setCellWith:indexPath];
@kWeakify(self);
cell.didTapRankArea = ^{
@kStrongify(self);
PIHomeItemModel *model = [self.itemList xpSafeObjectAtIndex:indexPath.row];
if(model != nil && self.delegate && [self.delegate respondsToSelector:@selector(selectItemWithModel:)]){
[self.delegate selectItemWithModel:model];
if(self.delegate && [self.delegate respondsToSelector:@selector(selectItemAtIndexPath:)]){
[self.delegate selectItemAtIndexPath:indexPath];
}
};
return cell;
}
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{
PIHomeItemModel *model = [self.itemList xpSafeObjectAtIndex:indexPath.row];
if(model != nil && self.delegate && [self.delegate respondsToSelector:@selector(selectItemWithModel:)]){
[self.delegate selectItemWithModel:model];
if(self.delegate && [self.delegate respondsToSelector:@selector(selectItemAtIndexPath:)]){
[self.delegate selectItemAtIndexPath:indexPath];
}
}
@@ -277,9 +255,7 @@
_collectionView.dataSource = self;
_collectionView.delegate = self;
_collectionView.pagingEnabled = NO;
_collectionView.hidden = YES;
_collectionView.scrollEnabled = NO;
// _collectionView.userInteractionEnabled = NO;
_collectionView.backgroundColor = [UIColor clearColor];
[_collectionView registerClass:[XPNewHomeItemCell class] forCellWithReuseIdentifier:NSStringFromClass([XPNewHomeItemCell class])];
_collectionView.showsVerticalScrollIndicator = NO;

View File

@@ -14,6 +14,7 @@ NS_ASSUME_NONNULL_BEGIN
@property(nonatomic, strong) PIHomeItemModel *itemModel;
@property (nonatomic, copy) NSArray<HomeRankAvatarModel*> *rankAvatarsModelArray;
@property (nonatomic, copy) void(^didTapRankArea)(void);
- (void)setCellWith:(NSIndexPath *)indexPath;
@end
NS_ASSUME_NONNULL_END

View File

@@ -145,6 +145,7 @@
@property (nonatomic,strong) NSArray *avatarsList;
@end
@implementation XPNewHomeItemCell
-(instancetype)initWithFrame:(CGRect)frame{
self = [super initWithFrame:frame];
@@ -186,6 +187,14 @@
}
}
- (void)setCellWith:(NSIndexPath *)indexPath {
if (indexPath.row == 0) {
self.bgImageView.image = [UIImage imageNamed:@"home_rank_Heads_bg"];
} else {
self.bgImageView.image = [UIImage getLanguageImage:@"entrance_activities"];
}
}
- (void)setRankAvatarsModelArray:(NSArray<HomeRankAvatarModel *> *)rankAvatarsModelArray {
// if (![self.itemModel.ID isEqualToString:@"3"]) {
// return;

View File

@@ -0,0 +1,7 @@
@interface EventCenterEmptyCell : UITableViewCell
+ (CGFloat)cellHeight;
+ (void)registerTo:(UITableView *)tableView;
+ (EventCenterEmptyCell *)cellFor:(UITableView *)tableView atIndexPath:(NSIndexPath *)indexPath;
@end

View File

@@ -0,0 +1,44 @@
#import "EventCenterEmptyCell.h"
@implementation EventCenterEmptyCell
{
UILabel *titleLabel;
UIImageView *ufoImageView;
}
+ (CGFloat)cellHeight {
return 170;
}
+ (void)registerTo:(UITableView *)tableView {
[tableView registerClass:[self class]
forCellReuseIdentifier:NSStringFromClass([self class])];
}
+ (EventCenterEmptyCell *)cellFor:(UITableView *)tableView atIndexPath:(NSIndexPath *)indexPath {
return [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([self class]) forIndexPath:indexPath];
}
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
titleLabel = [UILabel labelInitWithText:YMLocalizedString(@"20.20.59_text_19")
font:kFontRegular(14)
textColor:UIColorFromRGB(0xafb1b3)];
ufoImageView = [[UIImageView alloc] initWithImage:kImage(@"common_empty_UFO")];
[self.contentView addSubview:ufoImageView];
[self.contentView addSubview:titleLabel];
[ufoImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.mas_equalTo(self.contentView);
make.top.mas_equalTo(16);
make.size.mas_equalTo(CGSizeMake(110, 110));
}];
[titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.mas_equalTo(self.contentView);
make.top.mas_equalTo(ufoImageView.mas_bottom).offset(16);
make.height.mas_equalTo(20);
}];
}
return self;
}
@end

View File

@@ -9,17 +9,26 @@
#import "EventCenterPresenter.h"
#import "EventCenterEventCell.h"
#import "EventCenterOfficialCell.h"
#import "EventCenterEmptyCell.h"
#import "CreateEventViewControllerV2.h"
#import "HomeBannerInfoModel.h"
#import "CreateEventPresenter.h"
#import "EventCenterEventCell.h"
#import "XPWebViewController.h"
#import "XPRoomViewController.h"
@interface EventCenterViewController () <UIPageViewControllerDataSource, UIPageViewControllerDelegate, UITableViewDelegate, UITableViewDataSource>
@interface EventCenterViewController () <UIPageViewControllerDataSource, UIPageViewControllerDelegate, UITableViewDelegate, UITableViewDataSource, CreateEventPresenterProcotol>
@property (nonatomic, strong) NSMutableArray *officialDatasource;
@property (nonatomic, strong) NSMutableArray *eventSquareDatasource;
@property (nonatomic, strong) NSMutableArray *myEventDatasource;
@property (nonatomic, strong) NSMutableArray <HomeBannerInfoModel *>*officialDatasource;
@property (nonatomic, strong) NSMutableArray <EventItemModel *>*eventSquareDatasource;
@property (nonatomic, strong) NSMutableArray *myCreateEventDatasource;
@property (nonatomic, strong) NSMutableArray *mySubEventDatasource;
@property (nonatomic, strong) UITableView *officialTableView;
@property (nonatomic, strong) UITableView *myEventTableView;
@property (nonatomic, strong) UITableView *eventSquareTableView;
@property (nonatomic, assign) NSInteger myEventTableViewPage;
@property (nonatomic, assign) NSInteger eventSquareTableViewPage;
@property (nonatomic, strong) UIView *tabView;
@property (nonatomic, strong) UIImageView *indicatorImageView;
@@ -36,8 +45,8 @@
@implementation EventCenterViewController
- (__kindof id)presenter {
return [[EventCenterPresenter alloc] init];
- (CreateEventPresenter *)createPresenter {
return [[CreateEventPresenter alloc] init];
}
- (void)viewDidLoad {
@@ -100,6 +109,9 @@
}
- (void)setupPageViewController {
self.myEventTableViewPage = 1;
self.eventSquareTableViewPage = 1;
//
NSMutableArray *viewControllers = [NSMutableArray array];
@@ -152,6 +164,18 @@
#pragma mark - Setup Data
- (void)setOfficialEventModels:(NSArray<HomeBannerInfoModel *> *)officialEventModels {
_officialDatasource = officialEventModels.mutableCopy;
// NSPredicate *predicate = [NSPredicate predicateWithFormat:@"activityShow == %@", @(1)];
// [_officialDatasource filterUsingPredicate:predicate];
//
if (_officialDatasource.count == 0) {
self.officialTableView.mj_header.hidden = YES;
self.officialTableView.mj_footer.hidden = YES;
} else {
self.officialTableView.mj_header.hidden = NO;
self.officialTableView.mj_footer.hidden = NO;
}
[self.officialTableView reloadData];
}
@@ -205,31 +229,47 @@
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
if (tableView == self.officialTableView) {
return self.officialDatasource.count > 0 ? self.officialDatasource.count : 0;
return self.officialDatasource.count > 0 ? self.officialDatasource.count : 1;
} else if (tableView == self.eventSquareTableView) {
return self.eventSquareDatasource.count > 0 ? self.eventSquareDatasource.count : 0;
return self.eventSquareDatasource.count > 0 ? self.eventSquareDatasource.count : 1;
} else {
return self.myEventDatasource.count > 0 ? self.myEventDatasource.count : 0;
switch (section) {
case 0:
return self.myCreateEventDatasource.count > 0 ? self.myCreateEventDatasource.count : 1;
break;
case 1:
return self.mySubEventDatasource.count > 0 ? self.mySubEventDatasource.count : 1;
break;
default:
return 0;
break;
}
}
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if (tableView == self.officialTableView) {
EventCenterOfficialCell *cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([EventCenterOfficialCell class])];
if (self.officialDatasource.count == 0) {
return [EventCenterEmptyCell cellFor:tableView atIndexPath:indexPath];
}
EventCenterOfficialCell *cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([EventCenterOfficialCell class])];
if (!cell) {
cell = [[EventCenterOfficialCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:NSStringFromClass([EventCenterOfficialCell class])];
}
// cell
cell.cellModel = [self.officialDatasource xpSafeObjectAtIndex:indexPath.row];
return cell;
} else {
EventCenterEventCell *cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([EventCenterEventCell class])];
if (!cell) {
cell = [[EventCenterEventCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:NSStringFromClass([EventCenterEventCell class])];
if ((tableView == self.eventSquareTableView && self.eventSquareDatasource.count == 0) ||
(tableView == self.myEventTableView && self.myCreateEventDatasource.count == 0)) {
return [EventCenterEmptyCell cellFor:tableView atIndexPath:indexPath];
}
EventCenterEventCell *cell = [EventCenterEventCell cellFor:tableView atIndexPath:indexPath];
if (tableView == self.eventSquareTableView) {
EventItemModel *model = [self.eventSquareDatasource xpSafeObjectAtIndex:indexPath.row];
[cell updateCell:model];
}
// 广cell
if ((tableView == self.eventSquareTableView && self.eventSquareDatasource.count > indexPath.row) ||
(tableView == self.myEventTableView && self.myEventDatasource.count > indexPath.row)) {
(tableView == self.myEventTableView && self.myCreateEventDatasource.count > indexPath.row)) {
// cell.model = tableView == self.eventSquareTableView ? self.eventSquareDatasource[indexPath.row] : self.myEventDatasource[indexPath.row];
}
return cell;
@@ -239,21 +279,79 @@
#pragma mark - UITableViewDelegate
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 150;
if (tableView == self.officialTableView) {
return self.officialDatasource.count == 0 ? [EventCenterEmptyCell cellHeight] : 120;
}
if (tableView == self.eventSquareTableView) {
return self.eventSquareDatasource.count == 0 ? [EventCenterEmptyCell cellHeight] : 150;
}
if (tableView == self.myEventTableView) {
switch (indexPath.section) {
case 0:
return self.myCreateEventDatasource.count == 0 ? [EventCenterEmptyCell cellHeight] : 150;
break;
case 1:
return self.mySubEventDatasource.count == 0 ? [EventCenterEmptyCell cellHeight] : 150;
break;
default:
return 0;
break;
}
}
return 0;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView deselectRowAtIndexPath:indexPath animated:YES];
// cell
if (tableView == self.officialTableView && self.officialDatasource.count > indexPath.row) {
//
} else if (tableView == self.eventSquareTableView && self.eventSquareDatasource.count > indexPath.row) {
// 广
} else if (tableView == self.myEventTableView && self.myEventDatasource.count > indexPath.row) {
if (tableView == self.officialTableView) {
HomeBannerInfoModel *model = [self.officialDatasource xpSafeObjectAtIndex:indexPath.row];
if (model) {
switch (model.skipType) {
case HomeBannerInfoSkipType_Room:
{
if (model.skipUri.length > 0) {
[XPRoomViewController openRoom:model.skipUri viewController:self];
}
}
break;
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];
}
break;
case HomeBannerInfoSkipType_APP:
case HomeBannerInfoSkipType_None:
default:
break;
}
}
} else if (tableView == self.eventSquareTableView) {
EventItemModel *model = [self.eventSquareDatasource xpSafeObjectAtIndex:indexPath.row];
if (model) {
[self toEventDetail:model.id];
}
} else if (tableView == self.myEventTableView && self.myCreateEventDatasource.count > indexPath.row) {
//
}
}
- (void)toEventDetail:(NSInteger)eventId {
XPWebViewController * webVC = [[XPWebViewController alloc] initWithRoomUID:nil];
webVC.url = [NSString stringWithFormat:@"%@%@",
URLWithType(kEventDetailPath),
@(eventId)];
[self.navigationController pushViewController:webVC animated:YES];
}
#pragma mark - UIPageViewControllerDataSource
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController {
@@ -276,9 +374,65 @@
NSInteger index = [self.contentViewControllers indexOfObject:pageViewController.viewControllers.firstObject];
if (index != NSNotFound) {
[self switchToIndex:index animated:YES];
// 广
if (index == 1 && self.eventSquareDatasource.count == 0) {
[self.presenter loadEventSquare:self.eventSquareTableViewPage];
}
}
}
#pragma mark - CreateEventPresenterProcotol
- (void)eventSquareListSuccess:(NSArray <EventItemModel *>*)list {
if (self.eventSquareTableViewPage == 1) {
[self.eventSquareDatasource removeAllObjects];
}
if (list.count > 0) {
[self.eventSquareDatasource addObjectsFromArray:list];
self.eventSquareTableViewPage++;
self.eventSquareTableView.mj_footer.hidden = NO;
} else {
if (self.eventSquareTableViewPage == 1) {
self.eventSquareTableView.mj_footer.hidden = YES;
} else {
//
[self.eventSquareTableView.mj_footer endRefreshingWithNoMoreData];
}
}
[self.eventSquareTableView reloadData];
[self.eventSquareTableView.mj_header endRefreshing];
if (list.count < 20) {
[self.eventSquareTableView.mj_footer endRefreshingWithNoMoreData];
} else {
[self.eventSquareTableView.mj_footer endRefreshing];
}
}
- (void)eventSquareListFailure:(NSString *)errorMsg {
[self.eventSquareTableView.mj_header endRefreshing];
[self.eventSquareTableView.mj_footer setHidden:YES];
}
- (void)myCreateEventListSuccess:(NSArray *)list {
}
- (void)myCreateEventListFailure:(NSString *)msg {
[self.eventSquareTableView.mj_header endRefreshing];
[self.eventSquareTableView.mj_footer setHidden:YES];
}
- (void)mySubEventListSuccess:(NSArray *)list {
}
- (void)mySubEventListFailure:(NSString *)msg {
[self.eventSquareTableView.mj_header endRefreshing];
[self.eventSquareTableView.mj_footer setHidden:YES];
}
#pragma mark - Lazy Loading
- (UITableView *)officialTableView {
@@ -292,6 +446,8 @@
_officialTableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
}
[_officialTableView registerClass:[EventCenterOfficialCell class] forCellReuseIdentifier:NSStringFromClass([EventCenterOfficialCell class])];
[EventCenterEmptyCell registerTo:_officialTableView];
_officialTableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
//
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
@@ -319,17 +475,18 @@
_eventSquareTableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
}
[_eventSquareTableView registerClass:[EventCenterEventCell class] forCellReuseIdentifier:NSStringFromClass([EventCenterEventCell class])];
[EventCenterEmptyCell registerTo:_eventSquareTableView];
[EventCenterEventCell registerTo:_eventSquareTableView];
__weak typeof(self) weakSelf = self;
_eventSquareTableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
//
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self.eventSquareTableView.mj_header endRefreshing];
});
//
weakSelf.eventSquareTableViewPage = 1;
[(CreateEventPresenter *)weakSelf.presenter loadEventSquare:weakSelf.eventSquareTableViewPage];
}];
_eventSquareTableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
//
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self.eventSquareTableView.mj_footer endRefreshing];
});
[(CreateEventPresenter *)weakSelf.presenter loadEventSquare:weakSelf.eventSquareTableViewPage];
}];
}
return _eventSquareTableView;
@@ -346,10 +503,16 @@
_myEventTableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
}
[_myEventTableView registerClass:[EventCenterEventCell class] forCellReuseIdentifier:NSStringFromClass([EventCenterEventCell class])];
[EventCenterEmptyCell registerTo:_myEventTableView];
[EventCenterEventCell registerTo:_myEventTableView];
_myEventTableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
//
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self.myEventTableView.mj_header endRefreshing];
if (self.myCreateEventDatasource.count == 0) {
self.myEventTableView.mj_footer.hidden = YES;
}
});
}];
_myEventTableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
@@ -376,4 +539,11 @@
return _createButton;
}
- (NSMutableArray <EventItemModel *>*)eventSquareDatasource {
if (!_eventSquareDatasource) {
_eventSquareDatasource = [NSMutableArray array];
}
return _eventSquareDatasource;
}
@end

View File

@@ -604,12 +604,8 @@ XPHomeRecommendOtherRoomViewDelegate>
#pragma mark - JXCategoryViewDelegate
- (NSUInteger)tableHeaderViewHeightInPagerView:(JXPagerView *)pagerView {
if (self.headView.itemList.count == 0 && self.headView.bannerList.count == 0){
return 0;
}else if (self.headView.itemList.count > 0 && self.headView.bannerList.count == 0){
if (self.headView.bannerList.count == 0){
return kGetScaleWidth(80);
}else if (self.headView.itemList.count == 0 && self.headView.bannerList.count > 0){
return kGetScaleWidth(90);
}
return kGetScaleWidth(170);
}
@@ -686,7 +682,6 @@ XPHomeRecommendOtherRoomViewDelegate>
}
#pragma mark - XPHomeContainerProtocol
- (void)getHomeTopDataSuccess:(NSArray*)list menuList:(NSArray *)memuList{
self.headView.itemList = memuList;
self.headView.bannerList = list;
self.bannerInfoList = list;
[self.pagingView reloadData];
@@ -696,7 +691,6 @@ XPHomeRecommendOtherRoomViewDelegate>
- (void)getHomeTopDataSuccess:(NSArray *)resourceList
banners:(NSArray *)banners
rankAvatars:(NSArray *)rankAvatars {
self.headView.itemList = resourceList;
self.headView.bannerList = banners;
self.headView.rankAvatars = rankAvatars;
[self.pagingView reloadData];
@@ -792,18 +786,37 @@ XPHomeRecommendOtherRoomViewDelegate>
}
}
///
-(void)selectItemWithModel:(PIHomeItemModel *)model{
switch (model.resourceType) {
case HomeMenuResourceType_H5: {
XPWebViewController * webVC = [[ XPWebViewController alloc] initWithRoomUID:nil];
webVC.url = model.resourceContent;
- (void)selectItemAtIndexPath:(NSIndexPath *)indexPath {
switch (indexPath.row) {
case 0: {
XPWebViewController * webVC =[[XPWebViewController alloc] initWithRoomUID:nil];
webVC.url = URLWithType(kHomeRankURL);
[self.navigationController pushViewController:webVC animated:YES];
}
break;
case HomeMenuResourceType_Match:
[self.presenter homeChatPick];
case 1: {
EventCenterViewController *vc = [[EventCenterViewController alloc] init];
[self.navigationController pushViewController:vc animated:YES];
vc.officialEventModels = self.headView.bannerList;
}
break;
case HomeMenuResourceType_Room_Game: {
default:
break;
}
}
//-(void)selectItemWithModel:(PIHomeItemModel *)model{
// switch (model.resourceType) {
// case HomeMenuResourceType_H5: {
// XPWebViewController * webVC = [[ XPWebViewController alloc] initWithRoomUID:nil];
// webVC.url = model.resourceContent;
// [self.navigationController pushViewController:webVC animated:YES];
// }
// break;
// case HomeMenuResourceType_Match:
// [self.presenter homeChatPick];
// break;
// case HomeMenuResourceType_Room_Game: {
// @kWeakify(self);
// [Api homePickResource:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) {
// @kStrongify(self);
@@ -823,16 +836,17 @@ XPHomeRecommendOtherRoomViewDelegate>
// [XNDJTDDLoadingTool showErrorWithMessage:msg];
// }
// } uid:uid rid:model.ID];
}
default:
{
EventCenterViewController *vc = [[EventCenterViewController alloc] init];
[self.navigationController pushViewController:vc animated:YES];
vc.officialEventModels = self.headView.bannerList;
}
break;
}
}
// }
// default:
// {
// EventCenterViewController *vc = [[EventCenterViewController alloc] init];
// [self.navigationController pushViewController:vc animated:YES];
// vc.officialEventModels = self.headView.bannerList;
// }
// break;
// }
//}
-(void)selectBannerListWithModel:(HomeBannerInfoModel *)model{
[self handleTapBannerItem:model];
}

View File

@@ -332,8 +332,13 @@
// GCD
self.timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, dispatch_get_main_queue());
// 0.3
//#if DEBUG
// dispatch_source_set_timer(self.timer, DISPATCH_TIME_NOW, 0.01 * NSEC_PER_SEC, 0.01 * NSEC_PER_SEC);
//#else
// 0.25
dispatch_source_set_timer(self.timer, DISPATCH_TIME_NOW, 0.25 * NSEC_PER_SEC, 0.01 * NSEC_PER_SEC);
//#endif
//
dispatch_source_set_event_handler(self.timer, ^{
@@ -502,15 +507,20 @@
@"Price": @(receive.gift.goldPrice * receive.giftNum * array.count),
@"isFromWinning":@(NO)}];
} else {
if (code > 500) {
self.errorMessage = @"Over Heat!";
if (code >= 500 && code < 600) {
NSLog(@" ----------------------------------------------------------- error here");
#if DEBUG
self.errorMessage = [NSString stringWithFormat:@"Over Heat! - %@ ", msg];
#else
self.errorMessage = @"Over Heat & try later";
#endif
} else {
self.errorMessage = msg;
[self forceRemove];
}
if (self.actionCallback) {
self.actionCallback(ComboAction_Error);
}
// [self forceRemove];
}
}
targetUids:allUIDs

View File

@@ -28,6 +28,8 @@
@property(nonatomic, strong) UIImpactFeedbackGenerator *feedbackGenerator;
@property (nonatomic, strong) NSTimer *longPressTimer;
//@property (nonatomic, strong) dispatch_queue_t animationQueue; // 线
@@ -44,6 +46,8 @@
[self.playImageView clear];
self.playImageView.delegate = nil;
[[NSNotificationCenter defaultCenter] removeObserver:self];
[self.longPressTimer invalidate];
self.longPressTimer = nil;
}
- (instancetype)init {
@@ -214,7 +218,9 @@
// NSLog(@"点击间隔过短,忽略此次点击");
return;
}
#if RELEASE
isHandlingTap = YES;
#endif
[self.feedbackGenerator impactOccurred];
[[GiftComboManager sharedManager] sendGift];
@@ -432,8 +438,8 @@
duration:5];
_countdownRingView.userInteractionEnabled = YES;
//#if DEBUG
// UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap)];
// longPress.minimumPressDuration = 0.2;
// UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPress:)];
// longPress.minimumPressDuration = 0.1;
// [_countdownRingView addGestureRecognizer:longPress];
//#else
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap)];
@@ -443,4 +449,23 @@
return _countdownRingView;
}
- (void)handleLongPress:(UILongPressGestureRecognizer *)gesture {
if (gesture.state == UIGestureRecognizerStateBegan) {
//
[self.longPressTimer invalidate];
self.longPressTimer = [NSTimer scheduledTimerWithTimeInterval:0.1
target:self
selector:@selector(handleTap)
userInfo:nil
repeats:YES];
[self handleTap];
} else if (gesture.state == UIGestureRecognizerStateEnded ||
gesture.state == UIGestureRecognizerStateCancelled ||
gesture.state == UIGestureRecognizerStateFailed) {
//
[self.longPressTimer invalidate];
self.longPressTimer = nil;
}
}
@end

View File

@@ -206,7 +206,6 @@ UIKIT_EXTERN NSString * kShowFirstRechargeView;
if (![NSString isEmpty:message]) {
[self showErrorToast:message];
}
}
break;
case ComboAction_Update_After_Send_Success: {