1.0.19 feat:个性化房间背景 UI

This commit is contained in:
eggmanQQQ
2024-10-31 19:24:04 +08:00
parent ae4229675d
commit ec70554f9d
14 changed files with 481 additions and 21 deletions

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 241 KiB

View File

@@ -11,6 +11,8 @@ NS_ASSUME_NONNULL_BEGIN
@interface CustomRoomBGCell : UICollectionViewCell
@property (nonatomic, copy) void(^handleTapPlayButton)(id obj);
+ (void)registerTo:(UICollectionView *)collectionView;
+ (CustomRoomBGCell *)reuseFrom:(UICollectionView *)collectionView atIndexPath:(NSIndexPath *)indexPath;

View File

@@ -7,18 +7,18 @@
#import "CustomRoomBGCell.h"
#import "SVGA.h"
@interface CustomRoomBGCell ()
@property (nonatomic, strong) NetImageView *bgImageView;
@property (nonatomic, strong) SVGAImageView *svgaImageView;
@property (nonatomic, strong) UIView *selectedStateView;
@property (nonatomic, strong) UILabel *remainingDaysLabel;
@property (nonatomic, strong) UILabel *typeLabel;
@property (nonatomic, strong) UIButton *previewButton;
@property (nonatomic, strong) UILabel *pricePerDayLabel;
@property (nonatomic, strong) UIButton *actionButton;
@property (nonatomic, strong) UIImageView *bgTypeImageView;
@property (nonatomic, strong) UIButton *playButton;
@property (nonatomic, strong) UIButton *trashButton;
@end
@@ -33,7 +33,6 @@
atIndexPath:(NSIndexPath *)indexPath {
CustomRoomBGCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([self class])
forIndexPath:indexPath];
cell.backgroundColor = [UIColor colorWithWhite:1 alpha:0.3];
return cell;
}
@@ -56,14 +55,86 @@
make.edges.mas_equalTo(self.bgImageView);
}];
[self.contentView addSubview:self.remainingDaysLabel];
[self.remainingDaysLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.leading.mas_equalTo(6);
make.height.mas_equalTo(20);
make.width.mas_greaterThanOrEqualTo(50);
}];
[self.contentView addSubview:self.trashButton];
[self.trashButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.trailing.top.mas_equalTo(self.contentView).inset(6);
make.size.mas_equalTo(CGSizeMake(24, 19));
}];
[self.contentView addSubview:self.playButton];
[self.playButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.trailing.top.mas_equalTo(self.contentView).inset(6);
make.size.mas_equalTo(CGSizeMake(24, 19));
}];
[self.contentView addSubview:self.bgTypeImageView];
[self.bgTypeImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerY.mas_equalTo(self.playButton);
make.trailing.mas_equalTo(self.playButton.mas_leading).offset(-6);
make.size.mas_equalTo(CGSizeMake(27, 19));
}];
[self setupBottomArea];
}
- (void)setupBottomArea {
UIStackView *stack = [[UIStackView alloc] init];
stack.spacing = 3;
[self.contentView addSubview: stack];
[stack mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.selectedStateView.mas_bottom).offset(6);
make.centerX.mas_equalTo(self.selectedStateView);
make.height.mas_equalTo(22);
}];
UIImageView *gold = [self goldIcon];
[stack addArrangedSubview:gold];
[gold mas_makeConstraints:^(MASConstraintMaker *make) {
make.size.mas_equalTo(CGSizeMake(20, 20));
}];
[stack addArrangedSubview:self.pricePerDayLabel];
[self.contentView addSubview:self.actionButton];
[self.actionButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.mas_equalTo(self.contentView);
make.top.mas_equalTo(stack.mas_bottom).offset(6);
make.width.mas_greaterThanOrEqualTo(72);
make.height.mas_equalTo(22);
}];
}
#pragma mark -
- (void)didTapActionButton {
}
- (void)didTapPlayButton {
if (self.handleTapPlayButton) {
self.handleTapPlayButton(@"");
}
}
- (void)didTapTrashButton {
}
#pragma mark -
- (NetImageView *)bgImageView {
if (!_bgImageView) {
NetImageConfig * config = [[NetImageConfig alloc]init];
config.placeHolder = [UIImageConstant defaultEmptyPlaceholder];
_bgImageView = [[NetImageView alloc] initWithConfig:config];
_bgImageView.contentMode = UIViewContentModeScaleAspectFit;
_bgImageView.layer.masksToBounds = YES;
_bgImageView.layer.cornerRadius = 10;
}
@@ -78,8 +149,77 @@
_selectedStateView.layer.borderColor = UIColorFromRGB(0xFF8C03).CGColor;
_selectedStateView.layer.borderWidth = 2;
_selectedStateView.layer.masksToBounds = YES;
// _selectedStateView.hidden = YES;
}
return _selectedStateView;
}
- (UILabel *)remainingDaysLabel {
if (!_remainingDaysLabel) {
_remainingDaysLabel = [UILabel labelInitWithText:YMLocalizedString(@"1.0.18_7") font:kFontRegular(12) textColor:[UIColor whiteColor]];
_remainingDaysLabel.backgroundColor = UIColorFromRGB(0x696969);
_remainingDaysLabel.textAlignment = NSTextAlignmentCenter;
_remainingDaysLabel.layer.cornerRadius = 10;
_remainingDaysLabel.layer.masksToBounds = YES;
}
return _remainingDaysLabel;
}
- (UIImageView *)goldIcon {
UIImageView *gold = [[UIImageView alloc] initWithImage:kImage(@"moli_money_icon")];
return gold;
}
- (UILabel *)pricePerDayLabel {
if (!_pricePerDayLabel) {
_pricePerDayLabel = [UILabel labelInitWithText:YMLocalizedString(@"1.0.18_8")
font:kFontRegular(14)
textColor:[UIColor whiteColor]];
}
return _pricePerDayLabel;
}
- (UIButton *)actionButton {
if (!_actionButton) {
_actionButton = [UIButton buttonWithType:UIButtonTypeCustom];
[_actionButton setTitle:YMLocalizedString(@"1.0.18_9")
forState:UIControlStateNormal];
_actionButton.layer.cornerRadius = 11;
_actionButton.layer.masksToBounds = YES;
[_actionButton addTarget:self
action:@selector(didTapActionButton)
forControlEvents:UIControlEventTouchUpInside];
}
return _actionButton;
}
- (UIImageView *)bgTypeImageView {
if (!_bgTypeImageView) {
_bgTypeImageView = [[UIImageView alloc] initWithImage:kImage(@"custom_bg_gif")];
}
return _bgTypeImageView;
}
- (UIButton *)playButton {
if (!_playButton) {
_playButton = [UIButton buttonWithType:UIButtonTypeCustom];
[_playButton setImage:kImage(@"custom_bg_play") forState:UIControlStateNormal];
[_playButton addTarget:self
action:@selector(didTapPlayButton)
forControlEvents:UIControlEventTouchUpInside];
}
return _playButton;
}
- (UIButton *)trashButton {
if (!_trashButton) {
_trashButton = [UIButton buttonWithType:UIButtonTypeCustom];
[_trashButton setImage:kImage(@"custom_bg_trash") forState:UIControlStateNormal];
[_trashButton addTarget:self
action:@selector(didTapTrashButton)
forControlEvents:UIControlEventTouchUpInside];
}
return _trashButton;
}
@end

View File

@@ -6,6 +6,7 @@
//
#import "CustomRoomBGContentViewController.h"
#import "SVGA.h"
#import "CustomRoomBGCell.h"
#import "CustomRoomBGPresenter.h"
@@ -20,6 +21,15 @@
@property (nonatomic, strong) UICollectionView *collectionView;
@property (nonatomic, strong) UIView *previewMask;
@property (nonatomic, strong) UIImageView *previewFrontImageView;
@property (nonatomic, strong) NetImageView *previewBackImageView;
@property (nonatomic, strong) SVGAImageView *previewBackSvgaView;
@property (nonatomic, strong) UIView *previewBottomBackground;
@property (nonatomic, strong) UILabel *previewTipsContentLabel;
@property (nonatomic, strong) UIButton *previewActionButton;
@property (nonatomic, strong) UIButton *cancelPreviewButton;
@end
@implementation CustomRoomBGContentViewController
@@ -31,24 +41,14 @@
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor colorWithWhite:0 alpha:0.5];
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTapEmptySpace)];
[self.view addGestureRecognizer:tap];
[self setupUI];
[self didSelectedButton:self.freeButton];
}
- (void)setupUI {
[self.view addSubview:[self bottomAreaBackGround]];
[self.view addSubview:self.emptyStateView];
[self.emptyStateView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.bottomAreaBackGround).offset(72);
make.leading.trailing.mas_equalTo(self.view);
make.height.mas_equalTo(26 + 110);
}];
self.view.backgroundColor = [UIColor colorWithWhite:0 alpha:0.3];
[self setupBackgroundContent];
[self setupTopButtons];
@@ -60,6 +60,24 @@
}];
}
- (void)setupBackgroundContent {
[self.view addSubview:[self bottomAreaBackGround]];
UIButton *b = [self dismissButton];
[self.view addSubview:b];
[b mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.leading.trailing.mas_equalTo(self.view);
make.bottom.mas_equalTo(self.bottomAreaBackGround.mas_top).offset(-16);
}];
[self.view addSubview:self.emptyStateView];
[self.emptyStateView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.bottomAreaBackGround).offset(72);
make.leading.trailing.mas_equalTo(self.view);
make.height.mas_equalTo(26 + 110);
}];
}
- (void)setupTopButtons {
self.freeButton = [self bgCategoryButton:101];
self.payButton = [self bgCategoryButton:102];
@@ -119,6 +137,72 @@
}
}
- (void)displayPreviewArea {
UIView *view = [self previewMask];
[self.view addSubview:view];
[self.view addSubview:self.previewBottomBackground];
[self.previewBottomBackground addSubview:self.previewTipsContentLabel];
[self.previewTipsContentLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.previewBottomBackground).offset(47);
make.leading.trailing.mas_equalTo(self.previewBottomBackground).inset(15);
}];
UIImageView *gold = [self goldIcon];
[self.previewBottomBackground addSubview:gold];
[gold mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.previewBottomBackground).offset(103);
make.leading.mas_equalTo(self.previewBottomBackground).offset(15);
make.size.mas_equalTo(CGSizeMake(26, 26));
}];
UILabel *pricePerDay = [self pricePerDayLabel];
[self.previewBottomBackground addSubview:pricePerDay];
[pricePerDay mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerY.mas_equalTo(gold);
make.leading.mas_equalTo(gold.mas_trailing).offset(4);
}];
[self.previewBottomBackground addSubview:self.previewActionButton];
[self.previewActionButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerY.mas_equalTo(gold);
make.trailing.mas_equalTo(self.previewBottomBackground).offset(15);
make.size.mas_equalTo(CGSizeMake(120, 38));
}];
[self.view addSubview:self.previewFrontImageView];
[self.previewFrontImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.bottom.mas_equalTo(self.previewBottomBackground.mas_top).offset(-16);
make.top.mas_equalTo(100);
make.leading.trailing.mas_equalTo(self.view).inset(64);
}];
[self.view insertSubview:self.previewBackImageView belowSubview:self.previewFrontImageView];
[self.previewBackImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.mas_equalTo(self.previewFrontImageView);
}];
[self.view insertSubview:self.previewBackSvgaView belowSubview:self.previewFrontImageView];
[self.previewBackSvgaView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.mas_equalTo(self.previewFrontImageView);
}];
SVGAParser *_parser = [SVGAParser new];
@kWeakify(self);
[_parser parseWithNamed:@"Combo_Boom"
inBundle:nil
completionBlock:^(SVGAVideoEntity * _Nonnull videoItem) {
@kStrongify(self);
// self.svgaVideoEntity = videoItem;
self.previewBackSvgaView.loops = 0;
// self.previewBackSvgaView.clearsAfterStop = NO;
self.previewBackSvgaView.videoItem = videoItem;
[self.previewBackSvgaView startAnimation];
} failureBlock:^(NSError * _Nullable error) {
NSLog(@"%@", error);
}];
}
#pragma mark -
- (void)didTapEmptySpace {
[self dismissViewControllerAnimated:YES completion:nil];
@@ -142,6 +226,14 @@
}
- (void)didTapActionButton {
}
- (void)didTapCancelPreview {
}
#pragma mark -
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
return 10;
@@ -149,10 +241,22 @@
- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
CustomRoomBGCell *cell = [CustomRoomBGCell reuseFrom:collectionView atIndexPath:indexPath];
@kWeakify(self);
[cell setHandleTapPlayButton:^(id _Nonnull obj) {
@kStrongify(self);
[self displayPreviewArea];
}];
return cell;
}
#pragma mark -
- (UIButton *)dismissButton {
UIButton *b = [UIButton buttonWithType:UIButtonTypeCustom];
[b setBackgroundColor:[UIColor clearColor]];
[b addTarget:self action:@selector(didTapEmptySpace) forControlEvents:UIControlEventTouchUpInside];
return b;
}
- (UIView *)bottomAreaBackGround {
if (!_bottomAreaBackGround) {
CGFloat height = kGetScaleWidth(323) + kSafeAreaBottomHeight;
@@ -250,6 +354,7 @@ forControlEvents:UIControlEventTouchUpInside];
make.top.mas_equalTo(imageView.mas_bottom).offset(6);
make.height.mas_equalTo(22);
}];
_emptyStateView = v;
}
return _emptyStateView;
@@ -259,7 +364,7 @@ forControlEvents:UIControlEventTouchUpInside];
if (!_collectionView) {
UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
layout.itemSize = CGSizeMake(kGetScaleWidth(135), kGetScaleWidth(180 + 32 + 22));
layout.minimumLineSpacing = 0;
layout.minimumLineSpacing = 10;
layout.minimumInteritemSpacing = 10;
layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
layout.sectionInset = UIEdgeInsetsMake(0, 15, 0, 15);
@@ -273,6 +378,118 @@ forControlEvents:UIControlEventTouchUpInside];
return _collectionView;
}
- (UIView *)previewMask {
UIView *v = [[UIView alloc] initWithFrame:self.view.bounds];
v.backgroundColor = [UIColor colorWithWhite:0 alpha:0.5];
return v;
}
- (UIView *)previewBottomBackground {
if (!_previewBottomBackground) {
CGFloat height = kGetScaleWidth(174) + kSafeAreaBottomHeight;
UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, KScreenHeight - height, KScreenWidth, height)];
v.userInteractionEnabled = YES;
v.backgroundColor = [UIColor blackColor];
v.layer.cornerRadius = 16;
v.layer.maskedCorners = kCALayerMinXMinYCorner | kCALayerMaxXMinYCorner;
v.layer.masksToBounds = YES;
UILabel *tipsTitleLabel = [UILabel labelInitWithText:YMLocalizedString(@"1.0.18_11")
font:kFontMedium(15)
textColor:[UIColor whiteColor]];
tipsTitleLabel.textAlignment = NSTextAlignmentCenter;
[v addSubview:tipsTitleLabel];
[tipsTitleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(v).offset(13);
make.centerX.mas_equalTo(v);
}];
UIButton *b = [self cancelPreviewButton];
[v addSubview:b];
[b mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.top.mas_equalTo(15);
make.size.mas_equalTo(22);
}];
_previewBottomBackground = v;
}
return _previewBottomBackground;
}
- (NetImageView *)previewBackImageView {
if (!_previewBackImageView) {
_previewBackImageView = [[NetImageView alloc] init];
_previewBackImageView.layer.cornerRadius = 14;
_previewBackImageView.layer.masksToBounds = YES;
// _previewBackImageView.imageUrl = @"https://wx1.moyu.im/mw600/008ElFOcly1hv5oqfnpxtj30z07czx1k.jpg";
}
return _previewBackImageView;
}
- (SVGAImageView *)previewBackSvgaView {
if (!_previewBackSvgaView) {
_previewBackSvgaView = [[SVGAImageView alloc] init];
_previewBackSvgaView.layer.cornerRadius = 14;
_previewBackSvgaView.layer.masksToBounds = YES;
_previewBackSvgaView.autoPlay = YES;
}
return _previewBackSvgaView;
}
- (UIImageView *)previewFrontImageView {
if (!_previewFrontImageView) {
_previewFrontImageView = [[UIImageView alloc] initWithImage:kImage(@"custom_bg_preview")];
_previewFrontImageView.layer.cornerRadius = 14;
_previewFrontImageView.layer.masksToBounds = YES;
_previewFrontImageView.contentMode = UIViewContentModeScaleAspectFit;
}
return _previewFrontImageView;
}
- (UILabel *)previewTipsContentLabel {
if (!_previewTipsContentLabel) {
_previewTipsContentLabel = [UILabel labelInitWithText:YMLocalizedString(@"1.0.18_12")
font:kFontMedium(15)
textColor:[UIColor colorWithWhite:1 alpha:0.6]];
_previewTipsContentLabel.numberOfLines = 0;
_previewTipsContentLabel.textAlignment = NSTextAlignmentCenter;
}
return _previewTipsContentLabel;
}
- (UIImageView *)goldIcon {
UIImageView *gold = [[UIImageView alloc] initWithImage:kImage(@"moli_money_icon")];
return gold;
}
- (UILabel *)pricePerDayLabel {
UILabel *label = [UILabel labelInitWithText:YMLocalizedString(@"1.0.18_14")
font:kFontMedium(16)
textColor:UIColorFromRGB(0xFF8C03)];
return label;
}
- (UIButton *)previewActionButton {
if (!_previewActionButton) {
_previewActionButton = [UIButton buttonWithType:UIButtonTypeCustom];
[_previewActionButton setTitle:YMLocalizedString(@"1.0.18_15")
forState:UIControlStateNormal];
_previewActionButton.layer.cornerRadius = 11;
_previewActionButton.layer.masksToBounds = YES;
[_previewActionButton addTarget:self
action:@selector(didTapActionButton)
forControlEvents:UIControlEventTouchUpInside];
}
return _previewActionButton;
}
- (UIButton *)cancelPreviewButton {
UIButton *b = [UIButton buttonWithType:UIButtonTypeCustom];
[b setImage:kImage(@"common_nav_back_white") forState:UIControlStateNormal];
[b addTarget:self action:@selector(didTapCancelPreview) forControlEvents:UIControlEventTouchUpInside];
return b;
}
#pragma mark -
- (NSString *)titleForTag:(NSInteger)tag {

View File

@@ -186,11 +186,7 @@
[array insertObject:dating atIndex:0];
indexOfRoomAlbum += 1;
}
// [array addObject:inviteFriend];
[array addObject:trumpet];
// if (isCreator && roomInfo.type != RoomType_Anchor && roomInfo.isPermitRoom != PermitRoomType_Licnese && roomInfo.isPermitRoom != PermitRoomType_YoungerStar) {
// [array addObject:releaseRadio];
// }
[array addObject:giftEffect];
[array addObject:roomSetting];
[array addObject:clearScreen];

View File

@@ -3972,3 +3972,13 @@ ineHeadView12" = "الحمل";
"1.0.18_4" = "Create new";
"1.0.18_5" = "You can customize up to 6 backgrounds.";
"1.0.18_6" = "You can only upload up to 6 images at a time as a custom background. Once the background is created, it cannot be canceled. We will review the uploaded background within 24 hours. If the background is rejected, you will receive a refund of coins.";
"1.0.18_7" = "Expired";
"1.0.18_8" = "Days";
"1.0.18_9" = "Buy";
"1.0.18_10" = "Renew";
"1.0.18_11" = "Purchases Tips";
"1.0.18_12" = "Are you sure you want to use this image as your background?";
"1.0.18_13" = "Are you sure you want to buy?";
"1.0.18_14" = "1000/15Days";
"1.0.18_15" = "Submit";
"1.0.18_15" = "Confirm";

View File

@@ -3768,3 +3768,13 @@
"1.0.18_4" = "Create new";
"1.0.18_5" = "You can customize up to 6 backgrounds.";
"1.0.18_6" = "You can only upload up to 6 images at a time as a custom background. Once the background is created, it cannot be canceled. We will review the uploaded background within 24 hours. If the background is rejected, you will receive a refund of coins.";
"1.0.18_7" = "Expired";
"1.0.18_8" = "Days";
"1.0.18_9" = "Buy";
"1.0.18_10" = "Renew";
"1.0.18_11" = "Purchases Tips";
"1.0.18_12" = "Are you sure you want to use this image as your background?";
"1.0.18_13" = "Are you sure you want to buy?";
"1.0.18_14" = "1000/15Days";
"1.0.18_15" = "Submit";
"1.0.18_15" = "Confirm";

View File

@@ -3554,3 +3554,13 @@
"1.0.18_4" = "Create new";
"1.0.18_5" = "You can customize up to 6 backgrounds.";
"1.0.18_6" = "You can only upload up to 6 images at a time as a custom background. Once the background is created, it cannot be canceled. We will review the uploaded background within 24 hours. If the background is rejected, you will receive a refund of coins.";
"1.0.18_7" = "Expired";
"1.0.18_8" = "Days";
"1.0.18_9" = "Buy";
"1.0.18_10" = "Renew";
"1.0.18_11" = "Purchases Tips";
"1.0.18_12" = "Are you sure you want to use this image as your background?";
"1.0.18_13" = "Are you sure you want to buy?";
"1.0.18_14" = "1000/15Days";
"1.0.18_15" = "Submit";
"1.0.18_15" = "Confirm";

View File

@@ -3424,3 +3424,15 @@
"1.0.18_4" = "Create new";
"1.0.18_5" = "You can customize up to 6 backgrounds.";
"1.0.18_6" = "You can only upload up to 6 images at a time as a custom background. Once the background is created, it cannot be canceled. We will review the uploaded background within 24 hours. If the background is rejected, you will receive a refund of coins.";
"1.0.18_7" = "Expired";
"1.0.18_8" = "Days";
"1.0.18_9" = "Buy";
"1.0.18_10" = "Renew";
"1.0.18_11" = "Purchases Tips";
"1.0.18_12" = "Are you sure you want to use this image as your background?";
"1.0.18_14" = "1000/15Days";
"1.0.18_13" = "Are you sure you want to buy?";
"1.0.18_14" = "1000/15Days";
"1.0.18_15" = "Submit";
"1.0.18_15" = "Confirm";