Commit 6233ebb8 cgx

初步优化我的界面

1 个父辈 3905ce03
正在显示 91 个修改的文件 包含 1002 行增加138 行删除
......@@ -45,6 +45,9 @@
D046FE1628100342000295AC /* TencentOpenApi_IOS_Bundle.bundle in Resources */ = {isa = PBXBuildFile; fileRef = D046FE0A28100342000295AC /* TencentOpenApi_IOS_Bundle.bundle */; };
D046FE1728100342000295AC /* TencentOpenAPI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D046FE0B28100342000295AC /* TencentOpenAPI.framework */; };
D046FE1828100342000295AC /* UMDevice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D046FE0C28100342000295AC /* UMDevice.framework */; };
D0496798283484CC00FB81E5 /* ProfileTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = D0496797283484CC00FB81E5 /* ProfileTableView.m */; };
D049679A2834C95100FB81E5 /* introduce.webp in Resources */ = {isa = PBXBuildFile; fileRef = D04967992834C95100FB81E5 /* introduce.webp */; };
D049679D2834E1AB00FB81E5 /* ProfileHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = D049679C2834E1AB00FB81E5 /* ProfileHeaderView.m */; };
D04B3D9A27F6D4D90022F8DF /* LeadingController.m in Sources */ = {isa = PBXBuildFile; fileRef = D04B3D9827F6D4D90022F8DF /* LeadingController.m */; };
D04B3DAC27F6EEB50022F8DF /* DSTabBarController.m in Sources */ = {isa = PBXBuildFile; fileRef = D04B3DAA27F6EEB40022F8DF /* DSTabBarController.m */; };
D04B3DB327F6F6070022F8DF /* Home.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D04B3DB227F6F6070022F8DF /* Home.storyboard */; };
......@@ -273,6 +276,11 @@
D046FE0A28100342000295AC /* TencentOpenApi_IOS_Bundle.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = TencentOpenApi_IOS_Bundle.bundle; sourceTree = "<group>"; };
D046FE0B28100342000295AC /* TencentOpenAPI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = TencentOpenAPI.framework; sourceTree = "<group>"; };
D046FE0C28100342000295AC /* UMDevice.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = UMDevice.framework; sourceTree = "<group>"; };
D0496796283484CC00FB81E5 /* ProfileTableView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ProfileTableView.h; sourceTree = "<group>"; };
D0496797283484CC00FB81E5 /* ProfileTableView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ProfileTableView.m; sourceTree = "<group>"; };
D04967992834C95100FB81E5 /* introduce.webp */ = {isa = PBXFileReference; lastKnownFileType = file; path = introduce.webp; sourceTree = "<group>"; };
D049679B2834E1AB00FB81E5 /* ProfileHeaderView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ProfileHeaderView.h; sourceTree = "<group>"; };
D049679C2834E1AB00FB81E5 /* ProfileHeaderView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ProfileHeaderView.m; sourceTree = "<group>"; };
D04B3D9727F6D4D90022F8DF /* LeadingController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LeadingController.h; sourceTree = "<group>"; };
D04B3D9827F6D4D90022F8DF /* LeadingController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LeadingController.m; sourceTree = "<group>"; };
D04B3DA927F6EEB40022F8DF /* DSTabBarController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DSTabBarController.h; sourceTree = "<group>"; };
......@@ -678,6 +686,7 @@
D04567A827F6D018009F0A82 /* Resource */ = {
isa = PBXGroup;
children = (
D04967992834C95100FB81E5 /* introduce.webp */,
D051032D282A4E9200560A0D /* fse.mp3 */,
D051032C282A4E9200560A0D /* instant_eternity.mp3 */,
D020CE1E280D915D00E7E82F /* invite_friend.webp */,
......@@ -832,6 +841,10 @@
D04B3DBC27F6F8090022F8DF /* Profile.storyboard */,
D04B3DBE27F6F82D0022F8DF /* ProfileController.h */,
D04B3DBF27F6F82D0022F8DF /* ProfileController.m */,
D0496796283484CC00FB81E5 /* ProfileTableView.h */,
D0496797283484CC00FB81E5 /* ProfileTableView.m */,
D049679B2834E1AB00FB81E5 /* ProfileHeaderView.h */,
D049679C2834E1AB00FB81E5 /* ProfileHeaderView.m */,
);
path = Me;
sourceTree = "<group>";
......@@ -1568,6 +1581,7 @@
D0B5ECB127F2D9E0003EDFE3 /* Assets.xcassets in Resources */,
D04B3DBD27F6F8090022F8DF /* Profile.storyboard in Resources */,
D046FE1628100342000295AC /* TencentOpenApi_IOS_Bundle.bundle in Resources */,
D049679A2834C95100FB81E5 /* introduce.webp in Resources */,
D051032F282A4E9200560A0D /* fse.mp3 in Resources */,
D046FE1328100342000295AC /* README.txt in Resources */,
D0C09EDA28007D9100709D4C /* relax_lottie.json in Resources */,
......@@ -1671,6 +1685,7 @@
D0DF90AE2814390000FC0F64 /* BannerModel.m in Sources */,
D0E65FFF2807AC5E006562F2 /* DSProgressHUD.m in Sources */,
D08F79E2281A1838000D99DD /* TZGifPhotoPreviewController.m in Sources */,
D0496798283484CC00FB81E5 /* ProfileTableView.m in Sources */,
D0E660022807B5AE006562F2 /* SafeSleepRequestModel.m in Sources */,
D0E6600828080F97006562F2 /* SystemSetController.m in Sources */,
D091BBB72808F9DA00487A50 /* BreathTextView.m in Sources */,
......@@ -1731,6 +1746,7 @@
D055BEC528252B8900BC11A4 /* AudioDetailHeaderView.m in Sources */,
D07DACA72810557D0067A1BF /* UIApplication+RSKImageCropper.m in Sources */,
D027EE2927FB51D0004BBA61 /* DSGifHeader.m in Sources */,
D049679D2834E1AB00FB81E5 /* ProfileHeaderView.m in Sources */,
D0FAC421281B817D00D4B859 /* GKPhotoView.m in Sources */,
D00A63572824C42300AFFEAA /* DSNetworkCache.m in Sources */,
D0A72E42282B8BA600EED7BE /* CourseMusicCell.m in Sources */,
......
......@@ -42,6 +42,8 @@ NS_ASSUME_NONNULL_BEGIN
+ (instancetype)btnWithTitle:(NSString *)title font:(UIFont *)font;
+ (instancetype)btnWithTitle:(NSString *)title titleColor:(UIColor *)titleColor font:(UIFont *)font;
- (void)setTitle:(NSString *)title font:(UIFont *)font;
@end
NS_ASSUME_NONNULL_END
......@@ -96,4 +96,9 @@
return btn;
}
- (void)setTitle:(NSString *)title font:(UIFont *)font {
[self setTitle:title forState:UIControlStateNormal];
[self.titleLabel setFont:font];
}
@end
......@@ -62,7 +62,7 @@
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
[[NoisePlayerManager sharedNoisePlayerManager] stopAll];
[[NoisePlayerManager sharedNoisePlayerManager] pauseAll];
}
- (void)dealloc {
......
......@@ -82,6 +82,11 @@
return NaviStyleDefault;
}
#pragma mark - 关闭侧滑
- (BOOL)enableInteractivePopGestureRecognizer {
return NO;
}
#pragma mark - lazy
- (UserInfoView *)userInfoView {
if (!_userInfoView) {
......
......@@ -4,6 +4,7 @@
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="System colors in document resources" minToolsVersion="11.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
......@@ -20,7 +21,7 @@
</navigationBar>
<nil name="viewControllers"/>
<connections>
<segue destination="yBJ-h0-v4i" kind="relationship" relationship="rootViewController" id="jqf-uo-1t8"/>
<segue destination="3UA-xm-aaX" kind="relationship" relationship="rootViewController" id="7z4-md-Van"/>
</connections>
</navigationController>
<placeholder placeholderIdentifier="IBFirstResponder" id="G1r-vr-Uad" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
......@@ -28,33 +29,20 @@
<point key="canvasLocation" x="1567" y="916"/>
</scene>
<!--Profile Controller-->
<scene sceneID="BCE-Q0-nsW">
<scene sceneID="Va8-Jn-m7w">
<objects>
<tableViewController id="yBJ-h0-v4i" customClass="ProfileController" sceneMemberID="viewController">
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="-1" estimatedSectionHeaderHeight="-1" sectionFooterHeight="-1" estimatedSectionFooterHeight="-1" id="cPA-gQ-sne">
<viewController id="3UA-xm-aaX" customClass="ProfileController" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="evQ-O7-OnN">
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<viewLayoutGuide key="safeArea" id="x6y-F0-6iH"/>
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
<prototypes>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" indentationWidth="10" reuseIdentifier="profileCell" id="Ngp-72-dyg">
<rect key="frame" x="0.0" y="44.5" width="414" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="Ngp-72-dyg" id="oK7-pb-nmX">
<rect key="frame" x="0.0" y="0.0" width="414" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
</tableViewCellContentView>
</tableViewCell>
</prototypes>
<connections>
<outlet property="dataSource" destination="yBJ-h0-v4i" id="TkL-Sb-y2M"/>
<outlet property="delegate" destination="yBJ-h0-v4i" id="hue-eL-5s2"/>
</connections>
</tableView>
<navigationItem key="navigationItem" id="SIx-Mw-05b"/>
</tableViewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="puR-y9-BaN" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
</view>
<navigationItem key="navigationItem" id="uuW-ha-QvI"/>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="MVJ-W9-9wl" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="2336" y="915"/>
<point key="canvasLocation" x="2456" y="921"/>
</scene>
</scenes>
<resources>
......
......@@ -36,14 +36,14 @@
}
- (void)showAlertView {
self.alertLab.text = self.indexPath.row == 4 ? @"即将前往小梦睡眠微信小程序" : @"请前往微信粘贴搜索";
self.alertLab.text = self.indexPath.row == 0 ? @"即将前往小梦睡眠微信小程序" : @"请前往微信粘贴搜索";
[self.alertLab sizeToFit];
[self.alertLab mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.equalTo(self.alertView);
make.top.equalTo(self.alertView).offset(97);
}];
if (self.indexPath.row != 4) {
if (self.indexPath.row != 0) {
// 关注公众号和添加客服微信
[self.alertView addSubview:self.copySuccessBtn];
[self.copySuccessBtn mas_makeConstraints:^(MASConstraintMaker *make) {
......@@ -121,7 +121,7 @@
[self closeAction];
switch (self.indexPath.row) {
case 4: // 前往小程序
case 0: // 前往小程序
{
WXLaunchMiniProgramReq *launchMiniProgramReq = [WXLaunchMiniProgramReq object];
launchMiniProgramReq.userName = @"gh_cb2b2c83afc8";
......@@ -130,7 +130,7 @@
}];
}
break;
case 5: // 关注公众号
case 1: // 关注公众号
{
NSURL *wxURL = [NSURL URLWithString:@"weixin://"];
if ([[UIApplication sharedApplication] canOpenURL:wxURL]) {
......@@ -138,7 +138,7 @@
}
}
break;
case 6: // 添加客服微信
case 2: // 添加客服微信
{
NSURL *wxURL = [NSURL URLWithString:@"weixin://"];
if ([[UIApplication sharedApplication] canOpenURL:wxURL]) {
......
......@@ -9,7 +9,7 @@
NS_ASSUME_NONNULL_BEGIN
@interface ProfileController : UITableViewController
@interface ProfileController : UIViewController
@end
......
......@@ -11,12 +11,11 @@
#import "SystemSetController.h"
#import "InviteController.h"
#import "ProfileAlertView.h"
#import "ProfileTableView.h"
@interface ProfileController ()
@property (nonatomic, strong) UIView *userInfoView;
@property (nonatomic, strong) NSArray *tmpDatas;
@property (nonatomic, strong) UIImageView *headIV;
@property (nonatomic, strong) UILabel *nickLab;
@interface ProfileController () <ProfileTableViewDelegate>
@property (nonatomic, strong) UIImageView *bgIV;
@property (nonatomic, strong) ProfileTableView *profileTableView;
@end
@implementation ProfileController
......@@ -25,17 +24,14 @@
[super viewDidLoad];
self.navigationItem.title = @"我的";
self.tableView.dk_backgroundColorPicker = DKColorPickerWithKey(VCViewBG);
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
self.tmpDatas = @[@"意见反馈", @"系统设置", @"邀请好友", @"关于我们", @"前往小程序", @"关注公众号", @"添加客服微信", @"失眠的认知行为疗法"];
self.tableView.tableHeaderView = self.userInfoView;
// 监听用户数据更新通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateUserView) name:HasUpdateUserDataNoti object:nil];
self.view.dk_backgroundColorPicker = DKColorPickerWithKey(VCViewBG);
[self.view addSubview:self.bgIV];
[self.view addSubview:self.profileTableView];
}
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self name:HasUpdateUserDataNoti object:nil];
#pragma mark - 隐藏导航栏
- (BOOL)isShowNavigationBar {
return YES;
}
#pragma mark - 导航栏日间、黑夜模式
......@@ -48,71 +44,62 @@
}
}
#pragma mark - Table view data source
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return self.tmpDatas.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"profileCell" forIndexPath:indexPath];
cell.dk_backgroundColorPicker = DKColorPickerWithKey(VCViewBG);
cell.selectionStyle = UITableViewCellSelectionStyleNone;
cell.textLabel.text = self.tmpDatas[indexPath.row];
cell.textLabel.dk_textColorPicker = DKColorPickerWithKey(TEXT);
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
return cell;
#pragma mark - 设置状态栏文字颜色
- (UIStatusBarStyle)preferredStatusBarStyle {
return [self.dk_manager.themeVersion isEqualToString:DKThemeVersionNormal] ? UIStatusBarStyleDefault : UIStatusBarStyleLightContent;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView deselectRowAtIndexPath:indexPath animated:YES];
switch (indexPath.row) {
case 0: // 意见反馈入口
{
[self jumpViewController:@"FeedbackController"];
}
break;
case 1: // 系统设置入口
{
SystemSetController *sysVC = [SystemSetController new];
[self.navigationController pushViewController:sysVC animated:YES];
}
break;
case 2: // 邀请好友
{
InviteController *inviteVC = [InviteController new];
[self.navigationController pushViewController:inviteVC animated:YES];
}
break;
case 3: // 关于我们
{
[self.navigationController pushViewController:[[DsWebController alloc] initWithTitle:@"关于我们" link:AboutUS] animated:YES];
#pragma mark - ProfileTableViewDelegate
- (void)didSelectedIndexPath:(NSIndexPath *)indexPath {
if (indexPath.section == 0) {
switch (indexPath.row) {
case 0: // 意见反馈入口
{
[self jumpViewController:@"FeedbackController"];
}
break;
case 1: // 系统设置入口
{
SystemSetController *sysVC = [SystemSetController new];
[self.navigationController pushViewController:sysVC animated:YES];
}
break;
case 2: // 邀请好友
{
InviteController *inviteVC = [InviteController new];
[self.navigationController pushViewController:inviteVC animated:YES];
}
break;
case 3: // 关于我们
{
[self.navigationController pushViewController:[[DsWebController alloc] initWithTitle:@"关于我们" link:AboutUS] animated:YES];
}
break;
default:
break;
}
break;
case 4: // 前往小程序
{
[[[ProfileAlertView alloc] initWithIndexPath:indexPath] showAlertView];
} else if (indexPath.section == 1) {
switch (indexPath.row) {
case 0: // 前往小程序
{
[[[ProfileAlertView alloc] initWithIndexPath:indexPath] showAlertView];
}
break;
case 1: // 关注公众号
{
[UIPasteboard generalPasteboard].string = @"xiaomeng-sleep";
[[[ProfileAlertView alloc] initWithIndexPath:indexPath] showAlertView];
}
break;
case 2: // 添加客服微信
{
[UIPasteboard generalPasteboard].string = @"xiaomengsleep";
[[[ProfileAlertView alloc] initWithIndexPath:indexPath] showAlertView];
}
break;
default:
break;
}
break;
case 5: // 关注公众号
{
[UIPasteboard generalPasteboard].string = @"xiaomeng-sleep";
[[[ProfileAlertView alloc] initWithIndexPath:indexPath] showAlertView];
}
break;
case 6: // 添加客服微信
{
[UIPasteboard generalPasteboard].string = @"xiaomengsleep";
[[[ProfileAlertView alloc] initWithIndexPath:indexPath] showAlertView];
}
break;
case 7: // CBTI
{
[self.navigationController pushViewController:[[DsWebController alloc] initWithTitle:@"失眠的认知行为疗法(CBTI)" link:MYCBTI] animated:YES];
}
break;;
default:
break;
}
}
......@@ -134,42 +121,20 @@
}
}
- (void)updateUserView {
UserModel *model = [LoginUtils getUserLoginData];
if (model) {
[self.headIV yy_setImageWithURL:[NSURL URLWithString:model.face_img] placeholder:[UIImage imageNamed:@"portrait"]];
self.nickLab.text = model.nick_name;
} else {
self.headIV.image = [UIImage imageNamed:@"portrait"];
self.nickLab.text = @"";
#pragma mark - lazy
- (UIImageView *)bgIV {
if (!_bgIV) {
_bgIV = [[UIImageView alloc] dk_initWithImagePicker:DKImagePickerWithNames(@"bg_person_normal", @"dk_bg_person_normal", @"bg_person_normal")];
_bgIV.frame = CGRectMake(0, 0, kScreenWidth, 220);
}
return _bgIV;
}
#pragma mark - lazy
- (UIView *)userInfoView {
if (!_userInfoView) {
_userInfoView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 100)];
_headIV = [[UIImageView alloc] initWithFrame:CGRectMake(10, 10, 60, 60)];
_headIV.centerY = _userInfoView.centerY;
[_headIV cornerRadius:30];
_headIV.dk_alphaPicker = DKAlphaPickerWithAlphas(1.0, .5, .5);
[_userInfoView addSubview:_headIV];
_nickLab = [UILabel dkLabWithFont:BoldFont(15)];
_nickLab.frame = CGRectMake(CGRectGetMaxX(_headIV.frame) + 5, 0, 100, 20);
_nickLab.centerY = _userInfoView.centerY;
[_userInfoView addSubview:_nickLab];
UIButton *btn = [UIButton btnWithTitle:@"点击修改信息" titleColor:BrandColor font:SysFont(16) bgColor:DSClearColor];
btn.frame = CGRectMake(CGRectGetMaxX(_nickLab.frame) + 5, 0, 150, 40);
btn.centerY = _userInfoView.centerY;
[btn addTarget:self action:@selector(modifyUserInfoAction) forControlEvents:UIControlEventTouchUpInside];
[_userInfoView addSubview:btn];
[self updateUserView];
- (ProfileTableView *)profileTableView {
if (!_profileTableView) {
_profileTableView = [[ProfileTableView alloc] initWithDelegate:self];
}
return _userInfoView;
return _profileTableView;
}
@end
//
// ProfileHeaderView.h
// DreamSleep
//
// Created by peter on 2022/5/18.
//
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@protocol ProfileHeaderViewDelegate <NSObject>
- (void)didClickModifyUserBtn;
@end
@interface ProfileHeaderView : UIView
@property (nonatomic, weak) id<ProfileHeaderViewDelegate> delegate;
- (instancetype)initWithDelegate:(id<ProfileHeaderViewDelegate>)delegate;
@end
NS_ASSUME_NONNULL_END
//
// ProfileHeaderView.m
// DreamSleep
//
// Created by peter on 2022/5/18.
//
#import "ProfileHeaderView.h"
@interface ProfileHeaderView ()
@property (nonatomic, strong) UIView *userInfoView;
@property (nonatomic, strong) UILabel *meLab;
@property (nonatomic, strong) UIImageView *portraitIV;
@property (nonatomic, strong) UILabel *titleLab;
@property (nonatomic, strong) UIImageView *levelIV;
@property (nonatomic, strong) UIButton *modifyBtn;
@property (nonatomic, strong) UIView *scoreTaskEvaluateView;
@end
@implementation ProfileHeaderView
- (instancetype)initWithDelegate:(id<ProfileHeaderViewDelegate>)delegate {
if (self = [super initWithFrame:CGRectMake(0, 0, kScreenWidth, 338)]) {
_delegate = delegate;
UIView *userInfoView = [UIView new];
[self addSubview:userInfoView];
self.userInfoView = userInfoView;
UIView *scoreTaskEvaluateView = [UIView new];
[self addSubview:scoreTaskEvaluateView];
self.scoreTaskEvaluateView = scoreTaskEvaluateView;
[self.userInfoView mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.equalTo(self);
make.height.equalTo(@172);
make.top.left.right.equalTo(self);
}];
[self.scoreTaskEvaluateView mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.equalTo(self);
make.height.equalTo(@166);
make.top.equalTo(self.userInfoView.mas_bottom);
make.left.right.equalTo(self);
}];
UILabel *meLab = [UILabel dkLabWithText:@"我的" font:BoldFont(24.0)];
[self.userInfoView addSubview:meLab];
self.meLab = meLab;
UIImageView *portraitIV = [UIImageView new];
[portraitIV cornerRadius:30];
portraitIV.dk_alphaPicker = DKAlphaPickerWithAlphas(1.0, .5, .5);
[self.userInfoView addSubview:portraitIV];
self.portraitIV = portraitIV;
UILabel *titleLab = [UILabel dkLabWithFont:BoldFont(16.0)];
[self.userInfoView addSubview:titleLab];
self.titleLab = titleLab;
UIImageView *levelIV = [UIImageView new];
[self.userInfoView addSubview:levelIV];
self.levelIV = levelIV;
UIButton *modifyBtn = [UIButton btnWithTitle:@"点击修改信息" font:SysFont(12)];
[modifyBtn dk_setTitleColorPicker:DKColorPickerWithColors(BrandColor, ColorFromHex(0x45A4B5), DSWhite) forState:UIControlStateNormal];
[modifyBtn dk_setImage:DKImagePickerWithNames(@"ic_person_more_normal", @"dk_ic_person_more_normal", @"ic_person_more_normal") forState:UIControlStateNormal];
[modifyBtn adjustLayoutWithType:UIButtonLayoutTypeLeftTitleRightImage midSpace:4 sizeToFit:YES];
CGFloat width = modifyBtn.titleLabel.width + 30 + 4;
[modifyBtn addTarget:self action:@selector(modifyAction) forControlEvents:UIControlEventTouchUpInside];
[self.userInfoView addSubview:modifyBtn];
self.modifyBtn = modifyBtn;
[self.meLab mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self).offset(kStatusBarHeight + 17);
make.left.equalTo(self).offset(15);
}];
[self.portraitIV mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.meLab.mas_bottom).offset(30);
make.left.equalTo(self).offset(23);
make.width.height.equalTo(@60);
}];
[self.modifyBtn mas_makeConstraints:^(MASConstraintMaker *make) {
make.right.equalTo(self).offset(-23);
make.centerY.equalTo(self.portraitIV);
make.width.equalTo(@(width));
}];
[self updateUserView];
// 监听用户数据更新通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateUserView) name:HasUpdateUserDataNoti object:nil];
}
return self;
}
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self name:HasUpdateUserDataNoti object:nil];
}
#pragma mark - Action
- (void)modifyAction {
if (self.delegate && [self.delegate respondsToSelector:@selector(didClickModifyUserBtn)]) {
[self.delegate didClickModifyUserBtn];
}
}
- (void)updateUserView {
UserModel *model = [LoginUtils getUserLoginData];
if (model) {
[self.portraitIV yy_setImageWithURL:[NSURL URLWithString:model.face_img] placeholder:[UIImage imageNamed:@"portrait"]];
self.titleLab.text = model.nick_name;
[self.titleLab sizeToFit];
self.levelIV.hidden = NO;
[self.levelIV yy_setImageWithURL:[NSURL URLWithString:model.level_img] placeholder:[UIImage imageNamed:@"level_img_placeholder"]];
[self.titleLab mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(self.portraitIV.mas_right).offset(20);
make.top.equalTo(self.portraitIV).offset(4);
}];
[self.levelIV mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(self.titleLab).offset(-8);
make.bottom.equalTo(self.portraitIV);
make.size.mas_equalTo(CGSizeMake(95, 35));
}];
} else {
self.portraitIV.image = [UIImage imageNamed:@"portrait"];
self.titleLab.text = @"注册/登录";
[self.titleLab sizeToFit];
self.levelIV.hidden = YES;
[self.titleLab mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(self.portraitIV.mas_right).offset(20);
make.centerY.equalTo(self.portraitIV);
}];
}
}
@end
//
// ProfileTableView.h
// DreamSleep
//
// Created by peter on 2022/5/18.
//
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@protocol ProfileTableViewDelegate <NSObject>
- (void)didSelectedIndexPath:(NSIndexPath *)indexPath;
- (void)modifyUserInfoAction;
@end
/// 个人中心TableView
@interface ProfileTableView : UITableView
@property (nonatomic, weak) id<ProfileTableViewDelegate> profileDelegate;
- (instancetype)initWithDelegate:(id<ProfileTableViewDelegate>)profileDelegate;
@end
NS_ASSUME_NONNULL_END
//
// ProfileTableView.m
// DreamSleep
//
// Created by peter on 2022/5/18.
//
#import "ProfileTableView.h"
#import "ProfileHeaderView.h"
#import <YYWebImage/YYWebImage.h>
#pragma mark - ProfileModel
@interface ProfileModel : NSObject
@property (nonatomic, copy) NSString *leftIcon;
@property (nonatomic, copy) NSString *dk_leftIcon;
@property (nonatomic, copy) NSString *title;
@property (nonatomic, copy) NSString *rightIcon;
@property (nonatomic, copy) NSString *dk_rightIcon;
@end
@implementation ProfileModel
+ (NSArray *)getGroupDataArr {
NSArray *leftIcon_group1 = @[@"ic_person_fankui_normal", @"ic_person_shezhi_normal", @"ic_person_yaoqing_normal", @"ic_person_guanyuwomen_normal"];
NSArray *dk_leftIcon_group1 = @[@"dk_ic_person_fankui_normal", @"dk_ic_person_shezhi_normal", @"dk_ic_person_yaoqing_normal", @"dk_ic_person_guanyuwomen_normal"];
NSArray *title_group1 = @[@"意见反馈", @"系统设置", @"邀请好友", @"关于我们"];
NSArray *leftIcon_group2 = @[@"ic_person_xiaochengxu_normal", @"ic_person_gongzhonghao_normal", @"ic_person_kefu_normal"];
NSArray *dk_leftIcon_group2 = @[@"dk_ic_person_xiaochengxu_normal", @"dk_ic_person_gongzhonghao_normal", @"dk_ic_person_kefu_normal"];
NSArray *title_group2 = @[@"前往小程序", @"关注公众号", @"添加客服微信"];
NSMutableArray *group1Arr = [NSMutableArray array];
for (int i = 0; i < leftIcon_group1.count; i++) {
ProfileModel *model = [ProfileModel new];
model.leftIcon = leftIcon_group1[i];
model.dk_leftIcon = dk_leftIcon_group1[i];
model.title = title_group1[i];
model.rightIcon = @"moreIcon";
model.dk_rightIcon = @"moreIcon";
[group1Arr addObject:model];
}
NSMutableArray *group2Arr = [NSMutableArray array];
for (int i = 0; i < leftIcon_group2.count; i++) {
ProfileModel *model = [ProfileModel new];
model.leftIcon = leftIcon_group2[i];
model.dk_leftIcon = dk_leftIcon_group2[i];
model.title = title_group2[i];
model.rightIcon = @"moreIcon";
model.dk_rightIcon = @"moreIcon";
[group2Arr addObject:model];
}
return @[[group1Arr copy], [group2Arr copy]];
}
@end
#pragma mark - ProfileCell
@interface ProfileCell : UITableViewCell
@property (nonatomic, strong) ProfileModel *model;
@property (nonatomic, strong) UIImageView *leftIV;
@property (nonatomic, strong) UILabel *titleLab;
@property (nonatomic, strong) UIImageView *rightIV;
@end
@implementation ProfileCell
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
self.selectionStyle = UITableViewCellSelectionStyleNone;
self.backgroundColor = DSClearColor;
[self.contentView addSubview:self.leftIV];
[self.contentView addSubview:self.titleLab];
[self.contentView addSubview:self.rightIV];
[self.leftIV mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(self.contentView).offset(23);
make.centerY.equalTo(self.contentView);
make.width.height.equalTo(@30);
}];
[self.titleLab mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(self.leftIV.mas_right).offset(8);
make.centerY.equalTo(self.contentView);
make.right.equalTo(self.rightIV.mas_left).offset(-8);
}];
[self.rightIV mas_makeConstraints:^(MASConstraintMaker *make) {
make.right.equalTo(self.contentView).offset(-23);
make.centerY.equalTo(self.contentView);
make.width.height.equalTo(@30);
}];
}
return self;
}
- (void)setModel:(ProfileModel *)model {
_model = model;
self.leftIV.dk_imagePicker = DKImagePickerWithNames(model.leftIcon, model.dk_leftIcon, model.leftIcon);
self.titleLab.text = model.title;
self.rightIV.dk_imagePicker = DKImagePickerWithNames(model.rightIcon, model.dk_rightIcon, model.rightIcon);
}
- (UIImageView *)leftIV {
if (!_leftIV) {
_leftIV = [UIImageView new];
}
return _leftIV;
}
- (UILabel *)titleLab {
if (!_titleLab) {
_titleLab = [UILabel labWithFont:SysFont(15)];
_titleLab.dk_textColorPicker = DKColorPickerWithColors(MainTextColor, DkTitleColor, DkTitleColor);
}
return _titleLab;
}
- (UIImageView *)rightIV {
if (!_rightIV) {
_rightIV = [UIImageView new];
}
return _rightIV;
}
@end
#pragma mark - ProfileTableView
@interface ProfileTableView () <UITableViewDataSource, UITableViewDelegate, ProfileHeaderViewDelegate>
@property (nonatomic, strong) NSArray *profileGroupArr;
@property (nonatomic, strong) ProfileHeaderView *profileHeaderView;
@property (nonatomic, strong) UIView *footerView;
@end
@implementation ProfileTableView
- (instancetype)initWithDelegate:(id<ProfileTableViewDelegate>)profileDelegate {
if (self = [super initWithFrame:CGRectMake(0, 0, kScreenWidth, kScreenHeight - kTabBarHeight) style:UITableViewStyleGrouped]) {
_profileDelegate = profileDelegate;
self.backgroundColor = DSClearColor;
self.separatorStyle = UITableViewCellSeparatorStyleNone;
self.showsVerticalScrollIndicator = NO;
self.delegate = self;
self.dataSource = self;
self.tableHeaderView = self.profileHeaderView;
self.tableFooterView = self.footerView;
self.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
[self registerClass:[ProfileCell class] forCellReuseIdentifier:NSStringFromClass([ProfileCell class])];
}
return self;
}
#pragma mark - UITableViewDataSource && UITableViewDelegate
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return self.profileGroupArr.count;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
NSArray *dataArr = self.profileGroupArr[section];
return dataArr.count;
}
- (nonnull UITableViewCell *)tableView:(nonnull UITableView *)tableView cellForRowAtIndexPath:(nonnull NSIndexPath *)indexPath {
NSArray *dataArr = self.profileGroupArr[indexPath.section];
ProfileModel *model = dataArr[indexPath.row];
ProfileCell *cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([ProfileCell class]) forIndexPath:indexPath];
cell.model = model;
return cell;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 42;
}
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
return 0.001;
}
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
return [[UIView alloc] initWithFrame:CGRectMake(0, 0, 10, 0.001)];
}
- (nullable UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
if (section == 0) {
UIView *footView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 10, 8)];
footView.dk_backgroundColorPicker = DKColorPickerWithColors(ColorFromHex(0xF0F0F0), AlertDarkColor, DSWhite);
return footView;
} else {
return [[UIView alloc] initWithFrame:CGRectMake(0, 0, 10, 0.001)];
}
}
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
return (section == 0) ? 8 : 0.001;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView deselectRowAtIndexPath:indexPath animated:YES];
if (self.profileDelegate && [self.profileDelegate respondsToSelector:@selector(didSelectedIndexPath:)]) {
[self.profileDelegate didSelectedIndexPath:indexPath];
}
}
#pragma mark - UIScrollViewDelegate
- (void)scrollViewDidScroll:(UIScrollView*)scrollView {
// CGFloat offset = scrollView.contentOffset.y;
// if (offset >= 1) {
// [self.ds_viewController.navigationController setNavigationBarHidden:NO animated:NO];
// } else if (offset == 0) {
// [self.ds_viewController.navigationController setNavigationBarHidden:YES animated:NO];
// }
}
#pragma mark - Action
- (void)tapCBTIAction {
[self.ds_viewController.navigationController pushViewController:[[DsWebController alloc] initWithTitle:@"失眠的认知行为疗法(CBTI)" link:MYCBTI] animated:YES];
}
#pragma mark - ProfileHeaderViewDelegate
- (void)didClickModifyUserBtn {
if (self.profileDelegate && [self.profileDelegate respondsToSelector:@selector(modifyUserInfoAction)] ) {
[self.profileDelegate modifyUserInfoAction];
}
}
#pragma mark - lazy
- (NSArray *)profileGroupArr {
if (!_profileGroupArr) {
_profileGroupArr = [ProfileModel getGroupDataArr];
}
return _profileGroupArr;
}
- (ProfileHeaderView *)profileHeaderView {
if (!_profileHeaderView) {
_profileHeaderView = [[ProfileHeaderView alloc] initWithDelegate:self];
}
return _profileHeaderView;
}
- (UIView *)footerView {
if (!_footerView) {
_footerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 144 + 15)];
YYAnimatedImageView *animatedView = [[YYAnimatedImageView alloc] initWithFrame:CGRectMake(15, 15, _footerView.width - 30, 120)];
NSString *path = [[NSBundle mainBundle] pathForAuxiliaryExecutable:@"introduce.webp"];
NSData *webpData = [NSData dataWithContentsOfFile:path];
animatedView.image = [YYImage imageWithData:webpData];
animatedView.userInteractionEnabled = YES;
[_footerView addSubview:animatedView];
UITapGestureRecognizer *tapGR = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapCBTIAction)];
[animatedView addGestureRecognizer:tapGR];
}
return _footerView;
}
@end
......@@ -29,6 +29,12 @@ NS_ASSUME_NONNULL_BEGIN
// 用户头像
@property (nonatomic, copy) NSString *face_img;
@property (nonatomic, assign) int is_access;
#pragma mark - 用户等级积分
/// 用户等级名(M1睡眠萌新等)
@property (nonatomic, copy) NSString *point_level;
/// 等级名图片
@property (nonatomic, copy) NSString *level_img;
@end
NS_ASSUME_NONNULL_END
......@@ -17,6 +17,7 @@
[aCoder encodeObject:_token forKey:@"token"];
[aCoder encodeObject:_sid forKey:@"sid"];
[aCoder encodeObject:_face_img forKey:@"face_img"];
[aCoder encodeObject:_level_img forKey:@"level_img"];
}
- (id)initWithCoder:(NSCoder *)aDecoder {
......@@ -27,7 +28,7 @@
_token = [aDecoder decodeObjectForKey:@"token"];
_sid = [aDecoder decodeObjectForKey:@"sid"];
_face_img = [aDecoder decodeObjectForKey:@"face_img"];
_level_img = [aDecoder decodeObjectForKey:@"level_img"];
return self;
}
......
{
"images" : [
{
"filename" : "bg_person_normal.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "bg_person_normal@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "bg_person_normal@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"filename" : "dk_bg_person_normal.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "dk_bg_person_normal@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "dk_bg_person_normal@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"filename" : "dk_ic_person_fankui_normal.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "dk_ic_person_fankui_normal@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "dk_ic_person_fankui_normal@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"filename" : "dk_ic_person_gongzhonghao_normal.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "dk_ic_person_gongzhonghao_normal@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "dk_ic_person_gongzhonghao_normal@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"filename" : "dk_ic_person_guanyuwomen_normal.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "dk_ic_person_guanyuwomen_normal@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "dk_ic_person_guanyuwomen_normal@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"filename" : "dk_ic_person_kefu_normal.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "dk_ic_person_kefu_normal@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "dk_ic_person_kefu_normal@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"filename" : "dk_ic_person_more_normal.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "dk_ic_person_more_normal@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "dk_ic_person_more_normal@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"filename" : "dk_ic_person_shezhi_normal.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "dk_ic_person_shezhi_normal@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "dk_ic_person_shezhi_normal@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"filename" : "dk_ic_person_xiaochengxu_normal.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "dk_ic_person_xiaochengxu_normal@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "dk_ic_person_xiaochengxu_normal@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"filename" : "dk_ic_person_yaoqing_normal.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "dk_ic_person_yaoqing_normal@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "dk_ic_person_yaoqing_normal@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"filename" : "ic_person_fankui_normal.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "ic_person_fankui_normal@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "ic_person_fankui_normal@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"filename" : "ic_person_gongzhonghao_normal.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "ic_person_gongzhonghao_normal@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "ic_person_gongzhonghao_normal@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"filename" : "ic_person_guanyuwomen_normal.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "ic_person_guanyuwomen_normal@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "ic_person_guanyuwomen_normal@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"filename" : "ic_person_kefu_normal.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "ic_person_kefu_normal@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "ic_person_kefu_normal@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"filename" : "ic_person_more_normal.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "ic_person_more_normal@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "ic_person_more_normal@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"filename" : "ic_person_shezhi_normal.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "ic_person_shezhi_normal@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "ic_person_shezhi_normal@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"filename" : "ic_person_xiaochengxu_normal.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "ic_person_xiaochengxu_normal@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "ic_person_xiaochengxu_normal@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"filename" : "ic_person_yaoqing_normal.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "ic_person_yaoqing_normal@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "ic_person_yaoqing_normal@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"filename" : "level_img_placeholder.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!