diff --git a/xplan-ios.xcodeproj/project.pbxproj b/xplan-ios.xcodeproj/project.pbxproj index 67f2e85a..91952fd9 100644 --- a/xplan-ios.xcodeproj/project.pbxproj +++ b/xplan-ios.xcodeproj/project.pbxproj @@ -171,8 +171,10 @@ 9B46B91728DDA893000E30DB /* XPHomeRedommendCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B46B91628DDA893000E30DB /* XPHomeRedommendCollectionViewCell.m */; }; 9B4769AD28DB270F00CCD312 /* XPHomePartyNavView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B4769AC28DB270F00CCD312 /* XPHomePartyNavView.m */; }; 9B4D148127E485EB000AA0C1 /* XPRoomTrumpetView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B4D148027E485EB000AA0C1 /* XPRoomTrumpetView.m */; }; + 9B53D57A28E2CF18005187A3 /* XPTeenagerHomeView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B53D57928E2CF18005187A3 /* XPTeenagerHomeView.m */; }; 9B5BF8A827E1BED1005DD346 /* Api+RoomTrumpet.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B5BF8A727E1BED1005DD346 /* Api+RoomTrumpet.m */; }; 9B5F1503280FF02600C3C2B1 /* anchorPk_crossPking.svga in Resources */ = {isa = PBXBuildFile; fileRef = 9B5F1502280FF02600C3C2B1 /* anchorPk_crossPking.svga */; }; + 9B64BCB028E2A3D900778F13 /* XPMineHeadTeenagerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B64BCAF28E2A3D900778F13 /* XPMineHeadTeenagerView.m */; }; 9B6B3AAB278C2EA7005551EC /* XPRoomNobleLevelUpView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B6B3AAA278C2EA7005551EC /* XPRoomNobleLevelUpView.m */; }; 9B6E856A281A982A0041A321 /* XPRoomRecommendView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B6E8569281A982A0041A321 /* XPRoomRecommendView.m */; }; 9B6E856E281AABAB0041A321 /* XPRoomRecommendModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B6E856D281AABAB0041A321 /* XPRoomRecommendModel.m */; }; @@ -1507,10 +1509,14 @@ 9B4769AC28DB270F00CCD312 /* XPHomePartyNavView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPHomePartyNavView.m; sourceTree = ""; }; 9B4D147F27E485EB000AA0C1 /* XPRoomTrumpetView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPRoomTrumpetView.h; sourceTree = ""; }; 9B4D148027E485EB000AA0C1 /* XPRoomTrumpetView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPRoomTrumpetView.m; sourceTree = ""; }; + 9B53D57828E2CF18005187A3 /* XPTeenagerHomeView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPTeenagerHomeView.h; sourceTree = ""; }; + 9B53D57928E2CF18005187A3 /* XPTeenagerHomeView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPTeenagerHomeView.m; sourceTree = ""; }; 9B5BF8A627E1BED1005DD346 /* Api+RoomTrumpet.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Api+RoomTrumpet.h"; sourceTree = ""; }; 9B5BF8A727E1BED1005DD346 /* Api+RoomTrumpet.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "Api+RoomTrumpet.m"; sourceTree = ""; }; 9B5BF8A927E1BF45005DD346 /* XPRoomTrumpetProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPRoomTrumpetProtocol.h; sourceTree = ""; }; 9B5F1502280FF02600C3C2B1 /* anchorPk_crossPking.svga */ = {isa = PBXFileReference; lastKnownFileType = file; path = anchorPk_crossPking.svga; sourceTree = ""; }; + 9B64BCAE28E2A3D900778F13 /* XPMineHeadTeenagerView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPMineHeadTeenagerView.h; sourceTree = ""; }; + 9B64BCAF28E2A3D900778F13 /* XPMineHeadTeenagerView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPMineHeadTeenagerView.m; sourceTree = ""; }; 9B6B3AA9278C2EA7005551EC /* XPRoomNobleLevelUpView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPRoomNobleLevelUpView.h; sourceTree = ""; }; 9B6B3AAA278C2EA7005551EC /* XPRoomNobleLevelUpView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPRoomNobleLevelUpView.m; sourceTree = ""; }; 9B6E8568281A982A0041A321 /* XPRoomRecommendView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPRoomRecommendView.h; sourceTree = ""; }; @@ -4271,6 +4277,15 @@ path = Cell; sourceTree = ""; }; + 9B53D57728E2CEE8005187A3 /* Teenager */ = { + isa = PBXGroup; + children = ( + 9B53D57828E2CF18005187A3 /* XPTeenagerHomeView.h */, + 9B53D57928E2CF18005187A3 /* XPTeenagerHomeView.m */, + ); + path = Teenager; + sourceTree = ""; + }; 9B6E856B281AAB8B0041A321 /* Model */ = { isa = PBXGroup; children = ( @@ -7369,6 +7384,7 @@ E8B3E8042848B842009746AB /* View */ = { isa = PBXGroup; children = ( + 9B53D57728E2CEE8005187A3 /* Teenager */, 9BFB101C2897CC3300B3985E /* AnchorCard */, 9BFB10172897C95200B3985E /* NewUserRecharge */, 9BE01AF42893E7E000B50299 /* Cell */, @@ -8265,6 +8281,8 @@ E88B5CAA26FB168200DA9178 /* Teenager */, E8E70D8126F2F51A00F03460 /* XPMineHeadView.h */, E8E70D8226F2F51A00F03460 /* XPMineHeadView.m */, + 9B64BCAE28E2A3D900778F13 /* XPMineHeadTeenagerView.h */, + 9B64BCAF28E2A3D900778F13 /* XPMineHeadTeenagerView.m */, E896EFB02771C93B00AD2CC1 /* XPMineFriendNumberView.h */, E896EFB12771C93B00AD2CC1 /* XPMineFriendNumberView.m */, 9B734F71288A787000CBDAA9 /* XPMineAccountView.h */, @@ -9495,6 +9513,7 @@ E8AC723A26F49AAE007D6E91 /* XPMineNotifyStatus.m in Sources */, 18E7B33226F317A20064BC9B /* XPWebViewController.m in Sources */, E8AEAEF927141CA30017FCE0 /* RoomHeaderView.m in Sources */, + 9B53D57A28E2CF18005187A3 /* XPTeenagerHomeView.m in Sources */, E8AB632428AE10310023B0D2 /* XPMoentsTopicListViewController.m in Sources */, E8098CAA282E03B40090B9F0 /* XPMonentsRecommendPresenter.m in Sources */, 9B1B729828002147003FACE9 /* XPMineFansTeamPresenter.m in Sources */, @@ -9638,6 +9657,7 @@ E8A6C28C27CF436300AC7442 /* XPHomeLikeViewController.m in Sources */, E878B8582835F0D300E22DCF /* MonentsInteractiveModel.m in Sources */, 9BCF586227995426008401A4 /* XPSkillCardSelectPropCell.m in Sources */, + 9B64BCB028E2A3D900778F13 /* XPMineHeadTeenagerView.m in Sources */, 9BD2ECCE288F829600F5CD9A /* XPMineFootPrintViewController.m in Sources */, E86A16BF2856D4D5004228B8 /* XPSessionFindNewGreetListView.m in Sources */, E8E70D8F26F2F5DB00F03460 /* XPMineMenuTableViewCell.m in Sources */, @@ -9908,6 +9928,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_ENTITLEMENTS = "xplan-ios/xplan-ios.entitlements"; + CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 202205051140; DEVELOPMENT_TEAM = 48UCG35Q9W; @@ -9927,6 +9948,7 @@ MARKETING_VERSION = 4.6.2; PRODUCT_BUNDLE_IDENTIFIER = com.yinyou.enterprise.ios; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; TARGETED_DEVICE_FAMILY = 1; }; name = Debug; @@ -9938,6 +9960,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_ENTITLEMENTS = "xplan-ios/xplan-iosRelease.entitlements"; + CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 202205051140; DEVELOPMENT_TEAM = 48UCG35Q9W; @@ -9957,6 +9980,7 @@ MARKETING_VERSION = 4.6.2; PRODUCT_BUNDLE_IDENTIFIER = com.yinyou.enterprise.ios; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; TARGETED_DEVICE_FAMILY = 1; }; name = Release; diff --git a/xplan-ios/Assets.xcassets/Mine/mine_normal_teenager_open.imageset/Contents.json b/xplan-ios/Assets.xcassets/Mine/mine_normal_teenager_open.imageset/Contents.json new file mode 100644 index 00000000..fecc3215 --- /dev/null +++ b/xplan-ios/Assets.xcassets/Mine/mine_normal_teenager_open.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "mine_normal_teenager_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "mine_normal_teenager_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/xplan-ios/Assets.xcassets/Mine/mine_normal_teenager_open.imageset/mine_normal_teenager_open@2x.png b/xplan-ios/Assets.xcassets/Mine/mine_normal_teenager_open.imageset/mine_normal_teenager_open@2x.png new file mode 100644 index 00000000..be88faeb Binary files /dev/null and b/xplan-ios/Assets.xcassets/Mine/mine_normal_teenager_open.imageset/mine_normal_teenager_open@2x.png differ diff --git a/xplan-ios/Assets.xcassets/Mine/mine_normal_teenager_open.imageset/mine_normal_teenager_open@3x.png b/xplan-ios/Assets.xcassets/Mine/mine_normal_teenager_open.imageset/mine_normal_teenager_open@3x.png new file mode 100644 index 00000000..a0b978b1 Binary files /dev/null and b/xplan-ios/Assets.xcassets/Mine/mine_normal_teenager_open.imageset/mine_normal_teenager_open@3x.png differ diff --git a/xplan-ios/Assets.xcassets/Mine/mine_teenager_parents_mode_icon.imageset/mine_teenager_parents_mode_icon@2x.png b/xplan-ios/Assets.xcassets/Mine/mine_teenager_parents_mode_icon.imageset/mine_teenager_parents_mode_icon@2x.png index 7f0304c4..1ee4f458 100644 Binary files a/xplan-ios/Assets.xcassets/Mine/mine_teenager_parents_mode_icon.imageset/mine_teenager_parents_mode_icon@2x.png and b/xplan-ios/Assets.xcassets/Mine/mine_teenager_parents_mode_icon.imageset/mine_teenager_parents_mode_icon@2x.png differ diff --git a/xplan-ios/Assets.xcassets/Mine/mine_teenager_parents_mode_icon.imageset/mine_teenager_parents_mode_icon@3x.png b/xplan-ios/Assets.xcassets/Mine/mine_teenager_parents_mode_icon.imageset/mine_teenager_parents_mode_icon@3x.png index 4ca1698d..7560ef36 100644 Binary files a/xplan-ios/Assets.xcassets/Mine/mine_teenager_parents_mode_icon.imageset/mine_teenager_parents_mode_icon@3x.png and b/xplan-ios/Assets.xcassets/Mine/mine_teenager_parents_mode_icon.imageset/mine_teenager_parents_mode_icon@3x.png differ diff --git a/xplan-ios/Base/UI/BaseViewController.h b/xplan-ios/Base/UI/BaseViewController.h index 9a5507de..b1a0cf7e 100644 --- a/xplan-ios/Base/UI/BaseViewController.h +++ b/xplan-ios/Base/UI/BaseViewController.h @@ -43,6 +43,8 @@ NS_ASSUME_NONNULL_BEGIN // 是否隐藏导航 默认是不隐藏的 @property(nonatomic,assign,getter=isHiddenNavBar) BOOL hiddenNavBar; +///是否青少年模式 +@property (nonatomic, assign) BOOL parentMode; /** 显示/隐藏导航 */ diff --git a/xplan-ios/Base/UI/ThemeColor.h b/xplan-ios/Base/UI/ThemeColor.h index 15a9ea8e..30b353b7 100644 --- a/xplan-ios/Base/UI/ThemeColor.h +++ b/xplan-ios/Base/UI/ThemeColor.h @@ -22,7 +22,7 @@ NS_ASSUME_NONNULL_BEGIN ///强调色2 0xFB486A + (UIColor *)appEmphasizeColor2; /* ------页面相关颜色 START------ */ -/// view的背景色 0xF4F4FA +/// view的背景色 0xF3F5FA + (UIColor *)appBackgroundColor; /// cell的背景色 0xFFFFFF + (UIColor *)appCellBackgroundColor; diff --git a/xplan-ios/Base/UI/ThemeColor.m b/xplan-ios/Base/UI/ThemeColor.m index fb276626..22d12a0a 100644 --- a/xplan-ios/Base/UI/ThemeColor.m +++ b/xplan-ios/Base/UI/ThemeColor.m @@ -29,7 +29,7 @@ } /* ------页面相关颜色 START------ */ -/// view的背景色 0xF4F4FA +/// view的背景色 0xF3F5FA + (UIColor *)appBackgroundColor { return UIColorFromRGB(0xF3F5FA); } diff --git a/xplan-ios/Global/XPConstant.h b/xplan-ios/Global/XPConstant.h index 48f9eecf..f388d6d4 100644 --- a/xplan-ios/Global/XPConstant.h +++ b/xplan-ios/Global/XPConstant.h @@ -17,6 +17,7 @@ UIKIT_EXTERN NSString * const kRoomMiniNotificationKey; UIKIT_EXTERN NSString * const kVisitorUnReadCountNotificationKey; UIKIT_EXTERN NSString * const kHadShowNewUserGiftKey; UIKIT_EXTERN NSString * const kRedPacketHistory; +UIKIT_EXTERN NSString * const kTeenagerStatusChange; typedef NS_ENUM(NSUInteger, KeyType) { KeyType_PasswordEncode,///密码 des 加密的 diff --git a/xplan-ios/Global/XPConstant.m b/xplan-ios/Global/XPConstant.m index 3b76fcbb..2304a907 100644 --- a/xplan-ios/Global/XPConstant.m +++ b/xplan-ios/Global/XPConstant.m @@ -26,6 +26,7 @@ NSString * const kNewUserRechargeKey = @"kNewUserRechargeKey";//新用户充值 NSString * const kFromSearchToHomeViewKey = @"kFromSearchToHomeViewKey";//用户第一次从搜索页返回首页 NSString * const kTabShowAnchorCardKey = @"kTabShowAnchorCardKey"; //tab展示主播卡片 NSString * const kRedPacketHistory = @"kRedPacketHistory"; +NSString * const kTeenagerStatusChange = @"kTeenagerStatusChange";//青少年状态改变 ///在里面进行判断当前环境是什么 NSString * const KeyWithType(KeyType type) { diff --git a/xplan-ios/Main/Home/View/XPHomeViewController.m b/xplan-ios/Main/Home/View/XPHomeViewController.m index 838a3b5d..db1d4fef 100644 --- a/xplan-ios/Main/Home/View/XPHomeViewController.m +++ b/xplan-ios/Main/Home/View/XPHomeViewController.m @@ -29,6 +29,7 @@ #import "XPRoomViewController.h" #import "XPLittleGameRoomOpenView.h" #import "XPHomeLivesViewController.h" +#import "XPTeenagerHomeView.h" UIKIT_EXTERN NSString *kHomeMoreScrollPageKey; @@ -44,15 +45,32 @@ UIKIT_EXTERN NSString *kHomeMoreScrollPageKey; @property (nonatomic,strong) XPHomeRecommendViewController *recommendVC; ///个播房的 @property (nonatomic, strong) XPHomeLivesViewController *anchorRoomListVC; +///青少年空白view +@property (nonatomic, strong) XPTeenagerHomeView *teenagerView; @end @implementation XPHomeViewController +@synthesize parentMode = _parentMode; - (BOOL)isHiddenNavBar { return YES; } +- (void)setParentMode:(BOOL)parentMode { + _parentMode = parentMode; + if (parentMode) { + if (!self.teenagerView.superview) { + [self.view addSubview:self.teenagerView]; + [self.teenagerView mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.mas_equalTo(self.view); + }]; + } + } else { + [self.teenagerView removeFromSuperview]; + } +} + - (void)viewDidLoad { [super viewDidLoad]; [self initSubViews]; @@ -201,4 +219,12 @@ UIKIT_EXTERN NSString *kHomeMoreScrollPageKey; } return _anchorRoomListVC; } + +- (XPTeenagerHomeView *)teenagerView { + if (!_teenagerView) { + _teenagerView = [[XPTeenagerHomeView alloc] init]; + } + return _teenagerView; +} + @end diff --git a/xplan-ios/Main/Message/View/SessionList/SessionListViewController.m b/xplan-ios/Main/Message/View/SessionList/SessionListViewController.m index b4773e92..eaec2f22 100644 --- a/xplan-ios/Main/Message/View/SessionList/SessionListViewController.m +++ b/xplan-ios/Main/Message/View/SessionList/SessionListViewController.m @@ -19,6 +19,7 @@ ///View #import "XPSessionFindNewViewController.h" #import "TTPopUp.h" +#import "XPTeenagerHomeView.h" NSString * const kMessageShowReadDotKey = @"kMessageShowReadDotKey"; @@ -44,9 +45,13 @@ NSString * const kMessageShowReadDotKey = @"kMessageShowReadDotKey"; @property (nonatomic, assign) SessionListOpenType openType; ///用户信息 @property (nonatomic,strong) UserInfoModel *userInfo; +///青少年空白view +@property (nonatomic, strong) XPTeenagerHomeView *teenagerView; + @end @implementation SessionListViewController +@synthesize parentMode = _parentMode; - (void)dealloc { [[NIMSDK sharedSDK].conversationManager removeDelegate:self]; @@ -57,6 +62,28 @@ NSString * const kMessageShowReadDotKey = @"kMessageShowReadDotKey"; return YES; } +- (void)setParentMode:(BOOL)parentMode { + _parentMode = parentMode; + if (parentMode) { + if (!self.teenagerView.superview) { + [self.view addSubview:self.teenagerView]; + [self.teenagerView mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.mas_equalTo(self.view); + }]; + } + [self setTabBarItemBadge:0]; + } else { + [self.teenagerView removeFromSuperview]; + __block int unreadCount = 0; + NSMutableArray * uids = [[NSMutableArray alloc] init]; + [self.recentSessions enumerateObjectsUsingBlock:^(NIMRecentSession * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + [uids addObject:obj.session.sessionId]; + unreadCount += obj.unreadCount; + }]; + [self setTabBarItemBadge:unreadCount]; + } +} + - (instancetype)initWithType:(SessionListOpenType)type { self = [self init]; if (self) { @@ -335,6 +362,10 @@ NSString * const kMessageShowReadDotKey = @"kMessageShowReadDotKey"; } - (void)setTabBarItemBadge:(NSInteger)value { + if (self.parentMode) { + [self.tabBarItem setBadgeValue:0]; + return; + } if (value > 0) { [self.tabBarItem setBadgeValue:[NSString stringWithFormat:@"%ld", value]]; } else { @@ -409,4 +440,11 @@ NSString * const kMessageShowReadDotKey = @"kMessageShowReadDotKey"; return _allReadButton; } +- (XPTeenagerHomeView *)teenagerView { + if (!_teenagerView) { + _teenagerView = [[XPTeenagerHomeView alloc] init]; + } + return _teenagerView; +} + @end diff --git a/xplan-ios/Main/Mine/View/SubViews/XPMineHeadTeenagerView.h b/xplan-ios/Main/Mine/View/SubViews/XPMineHeadTeenagerView.h new file mode 100644 index 00000000..e1765e8a --- /dev/null +++ b/xplan-ios/Main/Mine/View/SubViews/XPMineHeadTeenagerView.h @@ -0,0 +1,16 @@ +// +// XPMineHeadTeenagerView.h +// xplan-ios +// +// Created by GreenLand on 2022/9/27. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface XPMineHeadTeenagerView : UIView + +@end + +NS_ASSUME_NONNULL_END diff --git a/xplan-ios/Main/Mine/View/SubViews/XPMineHeadTeenagerView.m b/xplan-ios/Main/Mine/View/SubViews/XPMineHeadTeenagerView.m new file mode 100644 index 00000000..41a8b958 --- /dev/null +++ b/xplan-ios/Main/Mine/View/SubViews/XPMineHeadTeenagerView.m @@ -0,0 +1,122 @@ +// +// XPMineHeadTeenagerView.m +// xplan-ios +// +// Created by GreenLand on 2022/9/27. +// + +#import "XPMineHeadTeenagerView.h" +///Third +#import +#import +///Tool +#import "ThemeColor.h" +#import "XPMacro.h" +#import "UIImage+Utils.h" +///View +#import "NetImageView.h" +#import "UIImage+Utils.h" +#import "XPMineFriendNumberView.h" +#import "XPNobleCenterEntranceView.h" +#import "XPMineAccountView.h" +///Model +#import "UserInfoModel.h" +#import "WalletInfoModel.h" +#import "NobleCenterModel.h" + +@interface XPMineHeadTeenagerView () + +///icon +@property (nonatomic,strong) UIImageView *avatarImageView; +///名字 +@property (nonatomic,strong) UILabel *nameLabel; +///id +@property (nonatomic,strong) UILabel *descLabel; +///性别 +@property (nonatomic,strong) UIImageView *arrowImageView; + +@end + + +@implementation XPMineHeadTeenagerView + +- (instancetype)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + [self initSubViews]; + [self initSubViewConstraints]; + } + return self; +} + +#pragma mark - Private Method +- (void)initSubViews { + self.backgroundColor = [UIColor whiteColor]; + [self addSubview:self.avatarImageView]; + [self addSubview:self.nameLabel]; + [self addSubview:self.descLabel]; + [self addSubview:self.arrowImageView]; +} + +- (void)initSubViewConstraints { + [self.avatarImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.size.mas_equalTo(CGSizeMake(32, 32)); + make.left.mas_equalTo(self).offset(12); + make.centerY.mas_equalTo(self); + }]; + + [self.nameLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.avatarImageView.mas_right); + make.centerY.mas_equalTo(self); + }]; + [self.descLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.centerY.mas_equalTo(self); + make.right.mas_equalTo(self.arrowImageView.mas_left); + }]; + [self.arrowImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.centerY.mas_equalTo(self); + make.right.mas_equalTo(-8); + make.width.mas_equalTo(21); + make.height.mas_equalTo(21); + }]; +} + +#pragma mark - getter +- (UIImageView *)avatarImageView { + if (!_avatarImageView) { + _avatarImageView = [[UIImageView alloc] init]; + _avatarImageView.image = [UIImage imageNamed:@"mine_normal_teenager_open"]; + } + return _avatarImageView; +} + +- (UIImageView *)arrowImageView { + if (!_arrowImageView) { + _arrowImageView = [[UIImageView alloc] init]; + _arrowImageView.image = [UIImage imageNamed:@"skillCard_arrow"]; + } + return _arrowImageView; +} + +- (UILabel *)nameLabel { + if (!_nameLabel) { + _nameLabel = [[UILabel alloc] init]; + _nameLabel.font = [UIFont systemFontOfSize:12]; + _nameLabel.textColor = [ThemeColor mainTextColor]; + _nameLabel.text = @"青少年模式中,暂无内容"; + } + return _nameLabel; +} + +- (UILabel *)descLabel { + if (!_descLabel) { + _descLabel = [[UILabel alloc] init]; + _descLabel.font = [UIFont systemFontOfSize:12]; + _descLabel.textColor = [ThemeColor textThirdColor]; + _descLabel.text = @"已开启"; + } + return _descLabel; +} + +@end diff --git a/xplan-ios/Main/Mine/View/SubViews/XPMineHeadView.h b/xplan-ios/Main/Mine/View/SubViews/XPMineHeadView.h index 799ef10f..fcb686fb 100644 --- a/xplan-ios/Main/Mine/View/SubViews/XPMineHeadView.h +++ b/xplan-ios/Main/Mine/View/SubViews/XPMineHeadView.h @@ -26,6 +26,8 @@ NS_ASSUME_NONNULL_BEGIN - (void)xpMineHeadViewClickAcount; ///点击了贵族中心 - (void)xPMineHeadViewCliekNobleCenter; +///点击了青少年模式 +- (void)xPmineHeadViewClickTeenager; @end @interface XPMineHeadView : UIView diff --git a/xplan-ios/Main/Mine/View/SubViews/XPMineHeadView.m b/xplan-ios/Main/Mine/View/SubViews/XPMineHeadView.m index 93bd1159..f453fd9a 100644 --- a/xplan-ios/Main/Mine/View/SubViews/XPMineHeadView.m +++ b/xplan-ios/Main/Mine/View/SubViews/XPMineHeadView.m @@ -19,6 +19,7 @@ #import "XPMineFriendNumberView.h" #import "XPNobleCenterEntranceView.h" #import "XPMineAccountView.h" +#import "XPMineHeadTeenagerView.h" ///Model #import "UserInfoModel.h" #import "WalletInfoModel.h" @@ -58,6 +59,8 @@ ///贵族中心 @property (nonatomic, strong) XPNobleCenterEntranceView *nobleEntranceView; +@property (nonatomic, strong) XPMineHeadTeenagerView *teenagerView; + @end @implementation XPMineHeadView @@ -170,6 +173,9 @@ #pragma mark - Action - (void)tapAvatarImageView { + if (self.userInfo.parentMode) { + return; + } if (self.delegate && [self.delegate respondsToSelector:@selector(xPMineHeadView:didClickAvatar:)]) { [self.delegate xPMineHeadView:self didClickAvatar:self.userInfo]; } @@ -218,6 +224,13 @@ } } +///青少年模式 +- (void)tapTeenagerView { + if (self.delegate && [self.delegate respondsToSelector:@selector(xPmineHeadViewClickTeenager)]) { + [self.delegate xPmineHeadViewClickTeenager]; + } +} + #pragma mark - NSMutableAttributedString -(NSInteger) getMonth:(long )time { @@ -431,6 +444,27 @@ self.visitorView.number = [NSString stringWithFormat:@"%ld", _userInfo.visitNum]; self.footprintView.number = [NSString stringWithFormat:@"%ld", _userInfo.inRoomNum]; self.nobleEntranceView.vipInfo = userInfo.userVipInfoVO; + if (userInfo.parentMode) {//青少年模式 + if (!self.teenagerView.superview) { + [self addSubview:self.teenagerView]; + [self.teenagerView mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.mas_equalTo(self.levelLabel.mas_bottom).mas_offset(16); + make.height.mas_equalTo(44); + make.left.right.mas_equalTo(self).inset(16); + }]; + } + self.attentionStackView.hidden = YES; + self.accountView.hidden = YES; + self.nobleEntranceView.hidden = YES; + self.skillCardButton.hidden = YES; + } else { + [self.teenagerView removeFromSuperview]; + self.teenagerView = nil; + self.attentionStackView.hidden = NO; + self.accountView.hidden = NO; + self.nobleEntranceView.hidden = NO; + self.skillCardButton.hidden = NO; + } } } @@ -607,4 +641,15 @@ return _nobleEntranceView; } +- (XPMineHeadTeenagerView *)teenagerView { + if (!_teenagerView) { + _teenagerView = [[XPMineHeadTeenagerView alloc] init]; + _teenagerView.layer.cornerRadius = 8; + _teenagerView.layer.masksToBounds = YES; + UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapTeenagerView)]; + [_teenagerView addGestureRecognizer:tap]; + } + return _teenagerView; +} + @end diff --git a/xplan-ios/Main/Mine/View/Teenager/XPMineTeenagerViewController.m b/xplan-ios/Main/Mine/View/Teenager/XPMineTeenagerViewController.m index 7e0ad4ad..3bbf368c 100644 --- a/xplan-ios/Main/Mine/View/Teenager/XPMineTeenagerViewController.m +++ b/xplan-ios/Main/Mine/View/Teenager/XPMineTeenagerViewController.m @@ -15,6 +15,7 @@ #import "XPMacro.h" #import "XPHtmlUrl.h" #import "UIImage+Utils.h" +#import "XPConstant.h" ///Model #import "UserInfoModel.h" ///View @@ -139,6 +140,7 @@ UserInfoModel * userInfo = self.userInfo; userInfo.parentMode = status; self.userInfo = userInfo; + [[NSNotificationCenter defaultCenter] postNotificationName:kTeenagerStatusChange object:@{@"parentMode" : @(status)}]; } #pragma mark - Event Response - (void)openParentBtnAction:(UIButton *)sender { @@ -195,7 +197,7 @@ - (XPMineTeenagerDesView *)dominatorView { if (!_dominatorView) { _dominatorView = [[XPMineTeenagerDesView alloc] init]; - _dominatorView.title = @"针对青少年推送精选优化的内容"; + _dominatorView.title = @"部分功能可能无法使用"; } return _dominatorView; } diff --git a/xplan-ios/Main/Mine/View/XPMineViewController.m b/xplan-ios/Main/Mine/View/XPMineViewController.m index 9eeaffed..4ae2a11e 100644 --- a/xplan-ios/Main/Mine/View/XPMineViewController.m +++ b/xplan-ios/Main/Mine/View/XPMineViewController.m @@ -302,7 +302,11 @@ #pragma mark - UITableViewDelegate And UITableViewDataSource - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { - return 3; + if (self.userInfo.parentMode) { + return 0; + } else { + return 3; + } } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { @@ -412,6 +416,11 @@ [self pushViewControllerWithType:XPMineItemType_Noble_Center functionItem:nil]; } +///点击了青少年模式 +- (void)xPmineHeadViewClickTeenager { + [self pushViewControllerWithType:XPMineItemType_Teenager_Mode functionItem:nil]; +} + #pragma mark - XPMineProtocol ///获取个人中心功能 - (void)onGetMineFuntionItemSuccess:(NSArray *)items { @@ -465,15 +474,21 @@ if (userInfo.nick == nil || userInfo.avatar == nil) { return; } + self.userInfo = userInfo; + self.headView.userInfo = userInfo; + [self.tableView reloadData]; + if (userInfo.parentMode) { + if (self.userRechargeView.superview) { + [self.userRechargeView removeFromSuperview]; + self.userRechargeView = nil; + } + return; + } [self.presenter getClanDetailInfo]; [self.presenter getUserWalletInfo]; [self.presenter getPersonItemList]; [self.presenter getLittleGameList]; [self.presenter getMineBannerList]; - - self.userInfo = userInfo; - self.headView.userInfo = userInfo; - [self.tableView reloadData]; [self.presenter getNobleInfo]; if (userInfo.showLimitCharge) {//新用户充值优惠 if (!self.userRechargeView.superview) { diff --git a/xplan-ios/Main/Monents/View/XPMonentsViewController.m b/xplan-ios/Main/Monents/View/XPMonentsViewController.m index 4a5069f1..e9d10128 100644 --- a/xplan-ios/Main/Monents/View/XPMonentsViewController.m +++ b/xplan-ios/Main/Monents/View/XPMonentsViewController.m @@ -23,6 +23,7 @@ #import "XPMonentsLatestViewController.h" #import "XPMonentsInteractiveViewController.h" #import "XPMonentsPublishViewController.h" +#import "XPTeenagerHomeView.h" @interface XPMonentsViewController () ///标题 @@ -44,9 +45,12 @@ @property (nonatomic,strong) XPMonentsLatestViewController *latestVC; ///推荐 @property (nonatomic,strong) XPMonentsRecommendViewController * recommendVC; +///青少年空白view +@property (nonatomic, strong) XPTeenagerHomeView *teenagerView; @end @implementation XPMonentsViewController +@synthesize parentMode = _parentMode; - (void)dealloc { [[NIMSDK sharedSDK].systemNotificationManager removeDelegate:self]; @@ -56,6 +60,20 @@ return YES; } +- (void)setParentMode:(BOOL)parentMode { + _parentMode = parentMode; + if (parentMode) { + if (!self.teenagerView.superview) { + [self.view addSubview:self.teenagerView]; + [self.teenagerView mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.mas_equalTo(self.view); + }]; + } + } else { + [self.teenagerView removeFromSuperview]; + } +} + - (void)viewDidLoad { [super viewDidLoad]; [[NIMSDK sharedSDK].systemNotificationManager addDelegate:self]; @@ -275,5 +293,11 @@ return _recommendVC; } +- (XPTeenagerHomeView *)teenagerView { + if (!_teenagerView) { + _teenagerView = [[XPTeenagerHomeView alloc] init]; + } + return _teenagerView; +} @end diff --git a/xplan-ios/Main/Tabbar/View/TabbarViewController.m b/xplan-ios/Main/Tabbar/View/TabbarViewController.m index 65eaa2f0..dfc44ccb 100644 --- a/xplan-ios/Main/Tabbar/View/TabbarViewController.m +++ b/xplan-ios/Main/Tabbar/View/TabbarViewController.m @@ -99,6 +99,8 @@ UIKIT_EXTERN NSString *kTabShowAnchorCardKey; @property (nonatomic, strong) XPTaskCompleteTipView *taskTipView; ///代理 @property (nonatomic,weak) iddelegate; +///青少年模式 +@property (nonatomic, assign) BOOL parentMode; @end @@ -123,6 +125,7 @@ UIKIT_EXTERN NSString *kTabShowAnchorCardKey; }]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showNewUserRecharge) name:kNewUserRechargeKey object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showAnchorCardKey:) name:kTabShowAnchorCardKey object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(teenagerStatusChange:) name:kTeenagerStatusChange object:nil]; } - (void)viewWillAppear:(BOOL)animated { @@ -143,7 +146,7 @@ UIKIT_EXTERN NSString *kTabShowAnchorCardKey; - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; - if (self.needShowNewUserRecharge) { + if (self.needShowNewUserRecharge && !self.parentMode) { self.needShowNewUserRecharge = NO; XPNewUserRechargeViewController *vc = [[XPNewUserRechargeViewController alloc] initWithNavigation:self.selectedViewController.navigationController]; vc.hadAnimate = YES; @@ -157,7 +160,7 @@ UIKIT_EXTERN NSString *kTabShowAnchorCardKey; } }); } - if (self.needShowAnchorCard && !self.delayShowAnchorCard) { + if (self.needShowAnchorCard && !self.delayShowAnchorCard && !self.parentMode) { [self.presenter getAnchorCardInfo]; [[NSUserDefaults standardUserDefaults] setBool:YES forKey:kHadLaunchApp];///第一次弹主播卡片 [[NSUserDefaults standardUserDefaults] synchronize]; @@ -213,10 +216,14 @@ UIKIT_EXTERN NSString *kTabShowAnchorCardKey; } [self showTeenagerAlertView:userInfo]; [self monentsUnReadCount]; + self.parentMode = userInfo.parentMode; + for (BaseViewController *vc in self.viewControllers) { + vc.parentMode = self.parentMode; + } } - (void)checkInviteUserInfoSuccess:(InviteUserInfoModel *)inviteInfo { - if (inviteInfo && inviteInfo.isInRoom) { + if (inviteInfo && inviteInfo.isInRoom && !self.parentMode) { [XPRoomViewController openRoom:inviteInfo.roomUid fromNick:inviteInfo.inviteNick fromType:inviteInfo.fromType fromUid:inviteInfo.inviteUid viewController:self]; } else { //不在房间 ///新用户打招呼引导 @@ -242,6 +249,9 @@ UIKIT_EXTERN NSString *kTabShowAnchorCardKey; } - (void)getShortCutRecommendRoomSuccces:(NSString *)roomUid { + if (self.parentMode) { + return; + } if (roomUid.length > 0) { [XPRoomViewController openRoom:roomUid viewController:self]; } @@ -264,6 +274,9 @@ UIKIT_EXTERN NSString *kTabShowAnchorCardKey; ///获取主播卡片信息成功 - (void)getAnchorCardInfoSuccess:(XPTabAnchorCardModel *)cardInfo { + if (self.parentMode) { + return; + } if (!self.anchorCardView.superview && cardInfo && self.isViewLoaded && self.view.window) { self.anchorCardView.frame = CGRectMake(0, -90-kStatusBarHeight, KScreenWidth, 90); [UIView animateWithDuration:0.5 animations:^{ @@ -346,6 +359,9 @@ UIKIT_EXTERN NSString *kTabShowAnchorCardKey; #pragma mark - NIMChatManagerDelegate - (void)onRecvMessages:(NSArray *)messages { + if (self.parentMode) { + return; + } for (NIMMessage * message in messages) { if (message.session.sessionType == NIMSessionTypeP2P) { if(message.messageType == NIMMessageTypeCustom) { @@ -544,6 +560,9 @@ UIKIT_EXTERN NSString *kTabShowAnchorCardKey; } #pragma mark -NIMSystemNotificationManagerDelegate - (void)onReceiveCustomSystemNotification:(NIMCustomSystemNotification *)notification { + if (self.parentMode) { + return; + } if (notification.receiverType == NIMSessionTypeP2P) { if (notification.content != nil) { NSData *jsonData = [notification.content dataUsingEncoding:NSUTF8StringEncoding]; @@ -582,6 +601,9 @@ UIKIT_EXTERN NSString *kTabShowAnchorCardKey; } - (void)receiveNobleLevelUp:(NSDictionary *)data { + if (self.parentMode) { + return; + } XPNobleUpgradeLevelView *view = [[XPNobleUpgradeLevelView alloc] initWithFrame:CGRectMake(0, 0, 300, 285 + 22 + 44)]; NobleLevelUpModel *receiveInfo = [NobleLevelUpModel modelWithDictionary:data[@"data"]]; view.levelUpInfo = receiveInfo; @@ -606,6 +628,15 @@ UIKIT_EXTERN NSString *kTabShowAnchorCardKey; return [[NSUserDefaults standardUserDefaults] valueForKey:kHadLaunchApp]; } +///青少年模式改变 +- (void)teenagerStatusChange:(NSNotification *)noti { + NSDictionary * dic = noti.object; + self.parentMode = [[dic objectForKey:@"parentMode"] boolValue]; + for (BaseViewController *vc in self.viewControllers) { + vc.parentMode = self.parentMode; + } +} + - (BOOL)canShowAnchorCard { if ([[XPRoomMiniManager shareManager] getRoomInfo]) {//在房间时不弹 return NO; diff --git a/xplan-ios/Main/Tabbar/View/Teenager/XPTeenagerHomeView.h b/xplan-ios/Main/Tabbar/View/Teenager/XPTeenagerHomeView.h new file mode 100644 index 00000000..9105981f --- /dev/null +++ b/xplan-ios/Main/Tabbar/View/Teenager/XPTeenagerHomeView.h @@ -0,0 +1,16 @@ +// +// XPTeenagerHomeView.h +// xplan-ios +// +// Created by GreenLand on 2022/9/27. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface XPTeenagerHomeView : UIView + +@end + +NS_ASSUME_NONNULL_END diff --git a/xplan-ios/Main/Tabbar/View/Teenager/XPTeenagerHomeView.m b/xplan-ios/Main/Tabbar/View/Teenager/XPTeenagerHomeView.m new file mode 100644 index 00000000..72dd9037 --- /dev/null +++ b/xplan-ios/Main/Tabbar/View/Teenager/XPTeenagerHomeView.m @@ -0,0 +1,66 @@ +// +// XPTeenagerHomeView.m +// xplan-ios +// +// Created by GreenLand on 2022/9/27. +// + +#import "XPTeenagerHomeView.h" +///Third +#import +#import "ThemeColor.h" + +@interface XPTeenagerHomeView() + +@property (nonatomic, strong) UIImageView *imageView; +@property (nonatomic, strong) UILabel *titleLabel; + +@end + +@implementation XPTeenagerHomeView + +- (instancetype)initWithFrame:(CGRect)frame { + if (self = [super initWithFrame:frame]) { + [self initView]; + [self initConstraints]; + } + return self; +} + +- (void)initView { + self.backgroundColor = [ThemeColor appBackgroundColor]; + [self addSubview:self.imageView]; + [self addSubview:self.titleLabel]; +} + +- (void)initConstraints { + [self.imageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.centerX.centerY.mas_equalTo(self); + make.size.mas_equalTo(CGSizeMake(163, 108)); + }]; + [self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.centerX.mas_equalTo(self); + make.top.mas_equalTo(self.imageView.mas_bottom).mas_offset(24); + }]; +} + +- (UIImageView *)imageView { + if (!_imageView) { + _imageView = [[UIImageView alloc] init]; + _imageView.image = [UIImage imageNamed:@"mine_teenager_parents_mode_icon"]; + } + return _imageView; +} + +- (UILabel *)titleLabel { + if (!_titleLabel) { + UILabel *label = [[UILabel alloc] init]; + label.font = [UIFont systemFontOfSize:14]; + label.textColor = [ThemeColor secondTextColor]; + label.text = @"青少年模式中,暂无内容"; + _titleLabel = label; + } + return _titleLabel; +} + +@end