Commit f37dedf2 cgx

基本完成放松训练页面

1 个父辈 e208d964
...@@ -9,6 +9,8 @@ ...@@ -9,6 +9,8 @@
/* Begin PBXBuildFile section */ /* Begin PBXBuildFile section */
39CC172FB610DA5F29120B56 /* Pods_DreamSleep.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2D11699D88A7A7BDB6168B71 /* Pods_DreamSleep.framework */; settings = {ATTRIBUTES = (Required, ); }; }; 39CC172FB610DA5F29120B56 /* Pods_DreamSleep.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2D11699D88A7A7BDB6168B71 /* Pods_DreamSleep.framework */; settings = {ATTRIBUTES = (Required, ); }; };
D00291892816CD4500C0573B /* DsCacheUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = D00291882816CD4500C0573B /* DsCacheUtils.m */; }; D00291892816CD4500C0573B /* DsCacheUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = D00291882816CD4500C0573B /* DsCacheUtils.m */; };
D0031549284DAC0D00CFE94D /* RelaxBodyView.m in Sources */ = {isa = PBXBuildFile; fileRef = D0031548284DAC0D00CFE94D /* RelaxBodyView.m */; };
D003154C284DF46F00CFE94D /* RelaxTrainCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D003154B284DF46F00CFE94D /* RelaxTrainCell.m */; };
D00A63572824C42300AFFEAA /* DSNetworkCache.m in Sources */ = {isa = PBXBuildFile; fileRef = D00A63562824C42300AFFEAA /* DSNetworkCache.m */; }; D00A63572824C42300AFFEAA /* DSNetworkCache.m in Sources */ = {isa = PBXBuildFile; fileRef = D00A63562824C42300AFFEAA /* DSNetworkCache.m */; };
D01814D127FFCBAF00583D4E /* CWCarousel.m in Sources */ = {isa = PBXBuildFile; fileRef = D01814CB27FFCBAF00583D4E /* CWCarousel.m */; }; D01814D127FFCBAF00583D4E /* CWCarousel.m in Sources */ = {isa = PBXBuildFile; fileRef = D01814CB27FFCBAF00583D4E /* CWCarousel.m */; };
D01814D227FFCBAF00583D4E /* CWFlowLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = D01814CD27FFCBAF00583D4E /* CWFlowLayout.m */; }; D01814D227FFCBAF00583D4E /* CWFlowLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = D01814CD27FFCBAF00583D4E /* CWFlowLayout.m */; };
...@@ -232,6 +234,10 @@ ...@@ -232,6 +234,10 @@
9B4D4A8254C6E2872914AB4D /* Pods-DreamSleep.beta.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DreamSleep.beta.xcconfig"; path = "Target Support Files/Pods-DreamSleep/Pods-DreamSleep.beta.xcconfig"; sourceTree = "<group>"; }; 9B4D4A8254C6E2872914AB4D /* Pods-DreamSleep.beta.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DreamSleep.beta.xcconfig"; path = "Target Support Files/Pods-DreamSleep/Pods-DreamSleep.beta.xcconfig"; sourceTree = "<group>"; };
D00291872816CD4500C0573B /* DsCacheUtils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DsCacheUtils.h; sourceTree = "<group>"; }; D00291872816CD4500C0573B /* DsCacheUtils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DsCacheUtils.h; sourceTree = "<group>"; };
D00291882816CD4500C0573B /* DsCacheUtils.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DsCacheUtils.m; sourceTree = "<group>"; }; D00291882816CD4500C0573B /* DsCacheUtils.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DsCacheUtils.m; sourceTree = "<group>"; };
D0031547284DAC0D00CFE94D /* RelaxBodyView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RelaxBodyView.h; sourceTree = "<group>"; };
D0031548284DAC0D00CFE94D /* RelaxBodyView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RelaxBodyView.m; sourceTree = "<group>"; };
D003154A284DF46F00CFE94D /* RelaxTrainCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RelaxTrainCell.h; sourceTree = "<group>"; };
D003154B284DF46F00CFE94D /* RelaxTrainCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RelaxTrainCell.m; sourceTree = "<group>"; };
D00A63552824C42300AFFEAA /* DSNetworkCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DSNetworkCache.h; sourceTree = "<group>"; }; D00A63552824C42300AFFEAA /* DSNetworkCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DSNetworkCache.h; sourceTree = "<group>"; };
D00A63562824C42300AFFEAA /* DSNetworkCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DSNetworkCache.m; sourceTree = "<group>"; }; D00A63562824C42300AFFEAA /* DSNetworkCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DSNetworkCache.m; sourceTree = "<group>"; };
D01814CB27FFCBAF00583D4E /* CWCarousel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CWCarousel.m; sourceTree = "<group>"; }; D01814CB27FFCBAF00583D4E /* CWCarousel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CWCarousel.m; sourceTree = "<group>"; };
...@@ -808,6 +814,10 @@ ...@@ -808,6 +814,10 @@
D0D96FDE2848457900461839 /* RelaxTrainRequestModel.m */, D0D96FDE2848457900461839 /* RelaxTrainRequestModel.m */,
D0D96FE02848493700461839 /* RelaxTrainModel.h */, D0D96FE02848493700461839 /* RelaxTrainModel.h */,
D0D96FE12848493700461839 /* RelaxTrainModel.m */, D0D96FE12848493700461839 /* RelaxTrainModel.m */,
D0031547284DAC0D00CFE94D /* RelaxBodyView.h */,
D0031548284DAC0D00CFE94D /* RelaxBodyView.m */,
D003154A284DF46F00CFE94D /* RelaxTrainCell.h */,
D003154B284DF46F00CFE94D /* RelaxTrainCell.m */,
); );
path = AISleepModule; path = AISleepModule;
sourceTree = "<group>"; sourceTree = "<group>";
...@@ -1747,6 +1757,7 @@ ...@@ -1747,6 +1757,7 @@
D09D0E9D280D73B6008DEDAB /* InviteController.m in Sources */, D09D0E9D280D73B6008DEDAB /* InviteController.m in Sources */,
D0534F092835D90400F8892E /* DSNaviBarViewController.m in Sources */, D0534F092835D90400F8892E /* DSNaviBarViewController.m in Sources */,
D04B3D9A27F6D4D90022F8DF /* LeadingController.m in Sources */, D04B3D9A27F6D4D90022F8DF /* LeadingController.m in Sources */,
D0031549284DAC0D00CFE94D /* RelaxBodyView.m in Sources */,
D053BEE9280F9E310028CCFC /* CloseAlertView.m in Sources */, D053BEE9280F9E310028CCFC /* CloseAlertView.m in Sources */,
D0D00199282C9402004EAFA1 /* NoiseView.m in Sources */, D0D00199282C9402004EAFA1 /* NoiseView.m in Sources */,
D062A0A128183FE000B4F48A /* FeedbackDetailController.m in Sources */, D062A0A128183FE000B4F48A /* FeedbackDetailController.m in Sources */,
...@@ -1839,6 +1850,7 @@ ...@@ -1839,6 +1850,7 @@
D09D0E96280D3FE9008DEDAB /* NSDate+Extras.m in Sources */, D09D0E96280D3FE9008DEDAB /* NSDate+Extras.m in Sources */,
D0878F4C280BEFF9005F1B7F /* UILabel+YBAttributeTextTapAction.m in Sources */, D0878F4C280BEFF9005F1B7F /* UILabel+YBAttributeTextTapAction.m in Sources */,
D0F80907280431100097899F /* UILabel+Extras.m in Sources */, D0F80907280431100097899F /* UILabel+Extras.m in Sources */,
D003154C284DF46F00CFE94D /* RelaxTrainCell.m in Sources */,
D04B3DAC27F6EEB50022F8DF /* DSTabBarController.m in Sources */, D04B3DAC27F6EEB50022F8DF /* DSTabBarController.m in Sources */,
D0AEFE822817DD1500230DC6 /* MyFeedListController.m in Sources */, D0AEFE822817DD1500230DC6 /* MyFeedListController.m in Sources */,
D055BEC828252D8200BC11A4 /* AudioCourseCell.m in Sources */, D055BEC828252D8200BC11A4 /* AudioCourseCell.m in Sources */,
...@@ -2064,7 +2076,7 @@ ...@@ -2064,7 +2076,7 @@
CODE_SIGN_ENTITLEMENTS = DreamSleep/Basement/DSConfig/DreamSleepDebug.entitlements; CODE_SIGN_ENTITLEMENTS = DreamSleep/Basement/DSConfig/DreamSleepDebug.entitlements;
CODE_SIGN_IDENTITY = "iPhone Developer"; CODE_SIGN_IDENTITY = "iPhone Developer";
CODE_SIGN_STYLE = Manual; CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 5; CURRENT_PROJECT_VERSION = 6;
DEVELOPMENT_TEAM = 4NDZ6UX8PW; DEVELOPMENT_TEAM = 4NDZ6UX8PW;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
EXCLUDED_ARCHS = ""; EXCLUDED_ARCHS = "";
...@@ -2134,7 +2146,7 @@ ...@@ -2134,7 +2146,7 @@
CODE_SIGN_ENTITLEMENTS = DreamSleep/DreamSleep.entitlements; CODE_SIGN_ENTITLEMENTS = DreamSleep/DreamSleep.entitlements;
CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 5; CURRENT_PROJECT_VERSION = 6;
DEVELOPMENT_TEAM = 4NDZ6UX8PW; DEVELOPMENT_TEAM = 4NDZ6UX8PW;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
FRAMEWORK_SEARCH_PATHS = ( FRAMEWORK_SEARCH_PATHS = (
...@@ -2265,7 +2277,7 @@ ...@@ -2265,7 +2277,7 @@
CODE_SIGN_ENTITLEMENTS = DreamSleep/Basement/DSConfig/DreamSleepBeta.entitlements; CODE_SIGN_ENTITLEMENTS = DreamSleep/Basement/DSConfig/DreamSleepBeta.entitlements;
CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 5; CURRENT_PROJECT_VERSION = 6;
DEVELOPMENT_TEAM = 4NDZ6UX8PW; DEVELOPMENT_TEAM = 4NDZ6UX8PW;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
FRAMEWORK_SEARCH_PATHS = ( FRAMEWORK_SEARCH_PATHS = (
......
//
// RelaxBodyView.h
// DreamSleep
//
// Created by peter on 2022/6/6.
//
#import <UIKit/UIKit.h>
#import "RelaxTrainModel.h"
NS_ASSUME_NONNULL_BEGIN
@protocol RelaxBodyViewDelegate <NSObject>
- (void)updateNaviTitleAndBgImg:(RelaxTrainModel *)trainModel;
@end
/// 放松body主视图
@interface RelaxBodyView : UIView
@property (nonatomic, weak) id<RelaxBodyViewDelegate> delegate;
- (void)refreshData:(NSArray *)listArr currentIndex:(NSInteger)index;
/// 页面退出时停止音频播放
- (void)stopAudio;
@end
NS_ASSUME_NONNULL_END
//
// RelaxTrainCell.h
// DreamSleep
//
// Created by peter on 2022/6/6.
//
#import <UIKit/UIKit.h>
#import "RelaxTrainModel.h"
NS_ASSUME_NONNULL_BEGIN
/// 放松训练音频cell
@interface RelaxTrainCell : UICollectionViewCell
@property (nonatomic, strong) RelaxTrainModel *trainModel;
@end
NS_ASSUME_NONNULL_END
//
// RelaxTrainCell.m
// DreamSleep
//
// Created by peter on 2022/6/6.
//
#import "RelaxTrainCell.h"
@interface RelaxTrainCell ()
// 主圆角图片
@property (nonatomic, strong) UIImageView *homeIV;
// 音频名标签
@property (nonatomic, strong) UILabel *audioNameLab;
@property (nonatomic, strong) UIImageView *recIcon;
@property (nonatomic, strong) UILabel *recLab;
@end
@implementation RelaxTrainCell
- (instancetype)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
[self addSubview:self.homeIV];
[self addSubview:self.audioNameLab];
[self addSubview:self.recIcon];
[self addSubview:self.recLab];
[self.homeIV mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.contentView);
make.left.equalTo(self);
make.width.height.equalTo(@(120));
}];
[self.audioNameLab mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(self.homeIV);
make.top.equalTo(self.homeIV.mas_bottom).offset(8);
}];
[self.recIcon mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.homeIV);
make.left.equalTo(self.homeIV).offset(11);
}];
[self.recLab mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.top.right.equalTo(self.recIcon);
}];
}
return self;
}
- (void)setTrainModel:(RelaxTrainModel *)trainModel {
_trainModel = trainModel;
[self.homeIV yy_setImageWithURL:[NSURL URLWithString:trainModel.bg_url] placeholder:[UIImage imageNamed:@"basicPlaceholder"]];
self.audioNameLab.text = trainModel.audio_name;
self.recIcon.hidden = [trainModel.is_recommend isEqualToString:@"0"];
self.recLab.hidden = [trainModel.is_recommend isEqualToString:@"0"];
}
#pragma mark - lazy
- (UIImageView *)homeIV {
if (!_homeIV) {
_homeIV = [UIImageView new];
_homeIV.contentMode = UIViewContentModeScaleAspectFill;
[_homeIV cornerRadius:12.0];
_homeIV.dk_alphaPicker = DKAlphaPickerWithAlphas(1.0, .5, .5);
}
return _homeIV;
}
- (UILabel *)audioNameLab {
if (!_audioNameLab) {
_audioNameLab = [UILabel labWithFont:SysFont(15)];
_audioNameLab.dk_textColorPicker = DKColorPickerWithColors(MainTextColor, DkTitleColor, DSWhite);
}
return _audioNameLab;
}
- (UIImageView *)recIcon {
if (!_recIcon) {
_recIcon = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"relax_rec_icon"]];
}
return _recIcon;
}
- (UILabel *)recLab {
if (!_recLab) {
_recLab = [UILabel labWithText:@"优选" textColor:DSWhite font:SysFont(12.0)];
_recLab.textAlignment = NSTextAlignmentCenter;
}
return _recLab;
}
@end
...@@ -7,11 +7,14 @@ ...@@ -7,11 +7,14 @@
#import "RelaxTrainController.h" #import "RelaxTrainController.h"
#import "RelaxTrainRequestModel.h" #import "RelaxTrainRequestModel.h"
#import "RelaxBodyView.h"
@interface RelaxTrainController () @interface RelaxTrainController () <RelaxBodyViewDelegate, UIScrollViewDelegate>
@property (nonatomic, strong) UIImageView *bgIV; @property (nonatomic, strong) UIImageView *bgIV;
@property (nonatomic, strong) UILabel *cusTitleLab; @property (nonatomic, strong) UILabel *cusTitleLab;
@property (nonatomic, strong) NSArray *listArr; @property (nonatomic, strong) NSArray *listArr;
@property (nonatomic, strong) UIScrollView *lucencyView;
@property (nonatomic, strong) RelaxBodyView *bodyView;
@end @end
@implementation RelaxTrainController @implementation RelaxTrainController
...@@ -19,45 +22,70 @@ ...@@ -19,45 +22,70 @@
- (void)viewDidLoad { - (void)viewDidLoad {
[super viewDidLoad]; [super viewDidLoad];
self.view.backgroundColor = DSWhite; self.view.dk_backgroundColorPicker = DKColorPickerWithKey(VCViewBG);
[self.view addSubview:self.bgIV]; [self.view addSubview:self.bgIV];
[self.view addSubview:self.lucencyView];
[self.lucencyView addSubview:self.bodyView];
[self.view addSubview:self.dsNaviBar]; [self.view addSubview:self.dsNaviBar];
[self.view addSubview:self.dkBackBtn]; [self.view addSubview:self.dkBackBtn];
[self.dkBackBtn dk_setImage:DKImagePickerWithNames(@"cus_back_icon", @"cus_back_icon", @"dk_cus_back_icon") forState:UIControlStateNormal]; [self.dkBackBtn dk_setImage:DKImagePickerWithNames(@"cus_back_icon", @"cus_back_icon", @"dk_cus_back_icon") forState:UIControlStateNormal];
[self.view addSubview:self.cusTitleLab]; [self.view addSubview:self.cusTitleLab];
CGFloat iv_h = kScreenWidth*1233/1125.0;
[self.bgIV mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.left.right.equalTo(self.view);
make.height.equalTo(@(iv_h));
}];
[self.cusTitleLab mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.equalTo(self.dsNaviBar);
make.bottom.equalTo(self.dsNaviBar).offset(-9);
}];
[self.lucencyView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.left.right.bottom.equalTo(self.view);
}];
[RelaxTrainRequestModel queryRelaxAudioListWithCompletion:^(RelaxTrainRequestModel * _Nonnull requestModel) { [RelaxTrainRequestModel queryRelaxAudioListWithCompletion:^(RelaxTrainRequestModel * _Nonnull requestModel) {
if (requestModel.resCode == DSResCodeSuccess) { if (requestModel.resCode == DSResCodeSuccess) {
if (requestModel.trainAudioList.count) { if (requestModel.trainAudioList.count) {
self.listArr = requestModel.trainAudioList; self.listArr = requestModel.trainAudioList;
RelaxTrainModel *currentModel = requestModel.trainAudioList.firstObject; [self.bodyView refreshData:self.listArr currentIndex:0];
[self.bgIV setImageWithURL:[NSURL URLWithString:currentModel.bg_url] placeholderImage:[UIImage imageNamed:@"basicPlaceholder"]];
self.cusTitleLab.text = currentModel.audio_name;
} }
} }
}]; }];
#warning - 需要梳理业务逻辑
[RelaxTrainRequestModel userCurTaskStateWithParams:@{@"title":@"腹式呼吸放松法", @"step":@2} completion:^(RelaxTrainRequestModel * _Nonnull requestModel) { [RelaxTrainRequestModel userCurTaskStateWithParams:@{@"title":@"腹式呼吸放松法", @"step":@2} completion:^(RelaxTrainRequestModel * _Nonnull requestModel) {
}]; }];
CGFloat iv_h = kScreenWidth*1233/1125.0;
[self.bgIV mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.left.right.equalTo(self.view);
make.height.equalTo(@(iv_h));
}];
[self.cusTitleLab mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.equalTo(self.dsNaviBar);
make.bottom.equalTo(self.dsNaviBar).offset(-9);
}];
} }
#pragma mark - Actions #pragma mark - Actions
- (void)backAction { - (void)backAction {
[super backAction]; [super backAction];
[self.bodyView stopAudio];
[self.navigationController popViewControllerAnimated:YES]; [self.navigationController popViewControllerAnimated:YES];
} }
#pragma mark - RelaxBodyViewDelegate
- (void)updateNaviTitleAndBgImg:(RelaxTrainModel *)trainModel {
[self.bgIV setImageWithURL:[NSURL URLWithString:trainModel.bg_url] placeholderImage:[UIImage imageNamed:@"basicPlaceholder"]];
self.cusTitleLab.text = trainModel.audio_name;
}
#pragma mark - UIScrollViewDelegate
- (void)scrollViewDidScroll:(UIScrollView*)scrollView {
CGFloat offset = scrollView.contentOffset.y;
NSLog(@"offset:%f", offset);
if (offset >= 35) {
self.dkBackBtn.hidden = YES;
}
if (offset <= -20) {
self.dkBackBtn.hidden = NO;
}
}
#pragma mark - lazy #pragma mark - lazy
- (UIImageView *)bgIV { - (UIImageView *)bgIV {
if (!_bgIV) { if (!_bgIV) {
...@@ -81,4 +109,29 @@ ...@@ -81,4 +109,29 @@
return _listArr; return _listArr;
} }
- (UIScrollView *)lucencyView {
if (!_lucencyView) {
_lucencyView = [UIScrollView new];
_lucencyView.showsVerticalScrollIndicator = NO;
_lucencyView.delegate = self;
CGFloat bodyTopMargin = 351;
CGFloat bodyH = 420 + Bottom_SafeArea_Height;
_lucencyView.contentSize = CGSizeMake(kScreenWidth, bodyH + bodyTopMargin);
}
return _lucencyView;
}
- (RelaxBodyView *)bodyView {
if (!_bodyView) {
_bodyView = [[RelaxBodyView alloc] initWithFrame:CGRectMake(0, 351, kScreenWidth, 420 + Bottom_SafeArea_Height)];
_bodyView.delegate = self;
}
return _bodyView;
}
#pragma mark - 设置状态栏文字颜色(重写父类)
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleDefault;
}
@end @end
...@@ -46,7 +46,7 @@ ...@@ -46,7 +46,7 @@
if (!_verticalView) { if (!_verticalView) {
_verticalView = [UIView new]; _verticalView = [UIView new];
_verticalView.backgroundColor = BrandColor; _verticalView.backgroundColor = BrandColor;
[_verticalView cornerRadius:3]; [_verticalView cornerRadius:2.0];
} }
return _verticalView; return _verticalView;
} }
......
{
"images" : [
{
"filename" : "relax_pause.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "relax_pause@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "relax_pause@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"filename" : "relax_rec_icon.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "relax_rec_icon@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "relax_rec_icon@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!