From 490dc77b1e1c941a15f68c6ba3868bf05a6c2e9c Mon Sep 17 00:00:00 2001 From: zeng Date: Mon, 28 Apr 2025 15:00:29 +0800 Subject: [PATCH] =?UTF-8?q?=E9=92=B1=E5=8C=85=E9=A1=B5=E9=9D=A2=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AppDelegate/AppDelegate+OpenApp.swift | 32 ++++++ MoviaBox/AppDelegate/AppDelegate.swift | 2 + MoviaBox/Base/View/SPTableView.swift | 3 +- .../Controller/SPMineViewController.swift | 4 + .../Controller/SPWalletViewController.swift | 96 ++++++++++++++++++ MoviaBox/Class/Mine/Model/SPMineItem.swift | 8 ++ .../Class/Mine/View/SPMineWalletView.swift | 14 +++ MoviaBox/Class/Mine/View/SPWalletCell.swift | 61 +++++++++++ .../Class/Mine/View/SPWalletHeaderView.swift | 41 ++++++++ .../icon/coin_icon_03.imageset/Contents.json | 22 ++++ .../coin_icon_03.imageset/Group 614@2x.png | Bin 0 -> 783 bytes .../coin_icon_03.imageset/Group 614@3x.png | Bin 0 -> 1152 bytes .../feed_back_icon_03.imageset/Contents.json | 22 ++++ .../feed_back_icon_03.imageset/Frame@2x.png | Bin 0 -> 421 bytes .../feed_back_icon_03.imageset/Frame@3x.png | Bin 0 -> 537 bytes .../records_icon_01.imageset/Contents.json | 22 ++++ .../records_icon_01.imageset/Group 315@2x.png | Bin 0 -> 529 bytes .../records_icon_01.imageset/Group 315@3x.png | Bin 0 -> 703 bytes .../records_icon_02.imageset/Contents.json | 22 ++++ .../Purchase records@2x.png | Bin 0 -> 604 bytes .../Purchase records@3x.png | Bin 0 -> 778 bytes .../settings_icon_01.imageset/Contents.json | 22 ++++ .../settings_icon_01.imageset/Frame@2x.png | Bin 0 -> 1705 bytes .../settings_icon_01.imageset/Frame@3x.png | Bin 0 -> 2749 bytes MoviaBox/Source/en.lproj/Localizable.strings | 5 + 25 files changed, 375 insertions(+), 1 deletion(-) create mode 100644 MoviaBox/Class/Mine/Controller/SPWalletViewController.swift create mode 100644 MoviaBox/Class/Mine/View/SPWalletCell.swift create mode 100644 MoviaBox/Class/Mine/View/SPWalletHeaderView.swift create mode 100644 MoviaBox/Source/Assets.xcassets/icon/coin_icon_03.imageset/Contents.json create mode 100644 MoviaBox/Source/Assets.xcassets/icon/coin_icon_03.imageset/Group 614@2x.png create mode 100644 MoviaBox/Source/Assets.xcassets/icon/coin_icon_03.imageset/Group 614@3x.png create mode 100644 MoviaBox/Source/Assets.xcassets/icon/feed_back_icon_03.imageset/Contents.json create mode 100644 MoviaBox/Source/Assets.xcassets/icon/feed_back_icon_03.imageset/Frame@2x.png create mode 100644 MoviaBox/Source/Assets.xcassets/icon/feed_back_icon_03.imageset/Frame@3x.png create mode 100644 MoviaBox/Source/Assets.xcassets/icon/records_icon_01.imageset/Contents.json create mode 100644 MoviaBox/Source/Assets.xcassets/icon/records_icon_01.imageset/Group 315@2x.png create mode 100644 MoviaBox/Source/Assets.xcassets/icon/records_icon_01.imageset/Group 315@3x.png create mode 100644 MoviaBox/Source/Assets.xcassets/icon/records_icon_02.imageset/Contents.json create mode 100644 MoviaBox/Source/Assets.xcassets/icon/records_icon_02.imageset/Purchase records@2x.png create mode 100644 MoviaBox/Source/Assets.xcassets/icon/records_icon_02.imageset/Purchase records@3x.png create mode 100644 MoviaBox/Source/Assets.xcassets/icon/settings_icon_01.imageset/Contents.json create mode 100644 MoviaBox/Source/Assets.xcassets/icon/settings_icon_01.imageset/Frame@2x.png create mode 100644 MoviaBox/Source/Assets.xcassets/icon/settings_icon_01.imageset/Frame@3x.png diff --git a/MoviaBox/AppDelegate/AppDelegate+OpenApp.swift b/MoviaBox/AppDelegate/AppDelegate+OpenApp.swift index ad7ca0c..882556c 100644 --- a/MoviaBox/AppDelegate/AppDelegate+OpenApp.swift +++ b/MoviaBox/AppDelegate/AppDelegate+OpenApp.swift @@ -8,6 +8,38 @@ import UIKit +extension AppDelegate { + + func registerAPNS() { + let center = UNUserNotificationCenter.current() + center.delegate = self + + center.requestAuthorization(options: [.badge, .sound, .alert]) { grant, error in + if grant { + SPRewardsAPI.requestUploadOpenNotify(completer: nil) + } + } + UIApplication.shared.registerForRemoteNotifications() + } +} + +extension AppDelegate: UNUserNotificationCenterDelegate { + + func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { +// NIMSDK.shared().updateApnsToken(deviceToken) + } + ///APP处于前台是接收通知消息 +// func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { +// completionHandler([.badge]) +// } + + ///点击通知消息进入app + func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) { + completionHandler() + } + +} + extension SceneDelegate { diff --git a/MoviaBox/AppDelegate/AppDelegate.swift b/MoviaBox/AppDelegate/AppDelegate.swift index 16e300f..8f5edb2 100644 --- a/MoviaBox/AppDelegate/AppDelegate.swift +++ b/MoviaBox/AppDelegate/AppDelegate.swift @@ -15,6 +15,8 @@ class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { self.appConfig() + ///注册消息通知 + registerAPNS() SPLoginManager.manager.requestVisitorLogin(completer: nil) ///开启网络监控 diff --git a/MoviaBox/Base/View/SPTableView.swift b/MoviaBox/Base/View/SPTableView.swift index 1e1f4bd..4541a44 100644 --- a/MoviaBox/Base/View/SPTableView.swift +++ b/MoviaBox/Base/View/SPTableView.swift @@ -13,7 +13,8 @@ class SPTableView: UITableView { override init(frame: CGRect, style: UITableView.Style) { super.init(frame: frame, style: style) -// separatorColor = .lineColor() + separatorColor = .colorFFFFFF(alpha: 0.1) + separatorInset = .init(top: 0, left: 16, bottom: 0, right: 16) self.backgroundColor = .clear self.contentInsetAdjustmentBehavior = .never diff --git a/MoviaBox/Class/Mine/Controller/SPMineViewController.swift b/MoviaBox/Class/Mine/Controller/SPMineViewController.swift index b0f4f09..0aaf1cf 100644 --- a/MoviaBox/Class/Mine/Controller/SPMineViewController.swift +++ b/MoviaBox/Class/Mine/Controller/SPMineViewController.swift @@ -13,6 +13,7 @@ class SPMineViewController: SPViewController { let arr = [ // SPMineItem(type: .language, iconImage: UIImage(named: "language_icon_01"), title: "Language".localized), SPMineItem(type: .feedBack, iconImage: UIImage(named: "feed_back_icon_01"), title: "FeedBack".localized), + SPMineItem(type: .settings, iconImage: UIImage(named: "settings_icon_01"), title: "Settings".localized), SPMineItem(type: .privacyPolicy, iconImage: UIImage(named: "privacy_policy_icon_01"), title: "Privacy Policy".localized), SPMineItem(type: .userAgreement, iconImage: UIImage(named: "user_agreement_icon_01"), title: "User Agreement".localized), SPMineItem(type: .aboutUs, iconImage: UIImage(named: "about_us_icon_01"), title: "About Us".localized), @@ -121,6 +122,9 @@ extension SPMineViewController: UITableViewDelegate, UITableViewDataSource { let vc = SPFeedbackViewController() self.navigationController?.pushViewController(vc, animated: true) +// case .settings: + + default: break } diff --git a/MoviaBox/Class/Mine/Controller/SPWalletViewController.swift b/MoviaBox/Class/Mine/Controller/SPWalletViewController.swift new file mode 100644 index 0000000..c460c82 --- /dev/null +++ b/MoviaBox/Class/Mine/Controller/SPWalletViewController.swift @@ -0,0 +1,96 @@ +// +// SPWalletViewController.swift +// MoviaBox +// +// Created by 佳尔 on 2025/4/28. +// + +import UIKit + +class SPWalletViewController: SPViewController { + + private lazy var dataArr: [SPMineItem] = { + let arr = [ + SPMineItem(type: .consumptionRecords, iconImage: UIImage(named: "records_icon_01"), title: "Consumption records".localized), + SPMineItem(type: .purchaseRecords, iconImage: UIImage(named: "records_icon_02"), title: "Purchase records".localized), + SPMineItem(type: .rewardCoins, iconImage: UIImage(named: "coin_icon_03"), title: "Reward Coins".localized), + SPMineItem(type: .feedBack, iconImage: UIImage(named: "feed_back_icon_03"), title: "FeedBack".localized), + ] + return arr + }() + + //MARK: UI属性 + private lazy var tableView: SPTableView = { + let tableView = SPTableView(frame: .zero, style: .plain) + tableView.delegate = self + tableView.dataSource = self + tableView.rowHeight = 48 + + SPWalletCell.registerCell(tableView: tableView) + return tableView + }() + + private lazy var headerView: SPWalletHeaderView = { + let view = SPWalletHeaderView(frame: .init(x: 0, y: 0, width: kSPScreenWidth, height: 152)) + return view + }() + + override func viewDidLoad() { + super.viewDidLoad() + self.edgesForExtendedLayout = .top + self.title = "Details".localized + + _setupUI() + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + self.navigationController?.setNavigationBarHidden(false, animated: true) + self.setNavigationNormalStyle(backgroundColor: .clear, isTranslucent: true) + } + + +} + +extension SPWalletViewController { + + private func _setupUI() { + self.tableView.tableHeaderView = self.headerView + view.addSubview(tableView) + + tableView.snp.makeConstraints { make in + make.top.equalToSuperview().offset(kSPNavBarHeight) + make.left.right.bottom.equalToSuperview() + } + } + +} + +//MARK: -------------- UITableViewDelegate & UITableViewDataSource -------------- +extension SPWalletViewController: UITableViewDelegate, UITableViewDataSource { + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = SPWalletCell.dequeueReusableCell(tableView: tableView, indexPath: indexPath) + cell.item = dataArr[indexPath.row] + return cell + } + + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return dataArr.count + } + + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + let item = dataArr[indexPath.row] + + switch item.type { + case .feedBack: + let vc = SPFeedbackViewController() + self.navigationController?.pushViewController(vc, animated: true) + + default: + break + } + + } + +} diff --git a/MoviaBox/Class/Mine/Model/SPMineItem.swift b/MoviaBox/Class/Mine/Model/SPMineItem.swift index aa7366b..b4c5029 100644 --- a/MoviaBox/Class/Mine/Model/SPMineItem.swift +++ b/MoviaBox/Class/Mine/Model/SPMineItem.swift @@ -31,6 +31,14 @@ struct SPMineItem { case persoInforDisclosure ///反馈 case feedBack + ///设置 + case settings + ///消费记录 + case consumptionRecords + ///订单记录 + case purchaseRecords + ///赠币记录 + case rewardCoins } diff --git a/MoviaBox/Class/Mine/View/SPMineWalletView.swift b/MoviaBox/Class/Mine/View/SPMineWalletView.swift index 1d35f07..19da11b 100644 --- a/MoviaBox/Class/Mine/View/SPMineWalletView.swift +++ b/MoviaBox/Class/Mine/View/SPMineWalletView.swift @@ -24,6 +24,7 @@ class SPMineWalletView: UIView { private lazy var moreButton: UIButton = { let button = UIButton(type: .custom) + button.addTarget(self, action: #selector(handleWalletButton), for: .touchUpInside) return button }() @@ -52,6 +53,7 @@ class SPMineWalletView: UIView { button.setTitle("Store".localized, for: .normal) button.setTitleColor(.colorFFFFFF(), for: .normal) button.titleLabel?.font = .fontMedium(ofSize: 18) + button.addTarget(self, action: #selector(handleStoreButton), for: .touchUpInside) return button }() @@ -90,6 +92,18 @@ class SPMineWalletView: UIView { } } +extension SPMineWalletView { + @objc private func handleStoreButton() { + let vc = SPWalletViewController() + self.viewController?.navigationController?.pushViewController(vc, animated: true) + } + + @objc private func handleWalletButton() { + let vc = SPWalletViewController() + self.viewController?.navigationController?.pushViewController(vc, animated: true) + } +} + extension SPMineWalletView { private func _setupUI() { diff --git a/MoviaBox/Class/Mine/View/SPWalletCell.swift b/MoviaBox/Class/Mine/View/SPWalletCell.swift new file mode 100644 index 0000000..a88efbb --- /dev/null +++ b/MoviaBox/Class/Mine/View/SPWalletCell.swift @@ -0,0 +1,61 @@ +// +// SPWalletCell.swift +// MoviaBox +// +// Created by 佳尔 on 2025/4/28. +// + +import UIKit + +class SPWalletCell: SPTableViewCell { + + var item: SPMineItem? { + didSet { + iconImageView.image = item?.iconImage + titleLabel.text = item?.title + } + } + + //MARK: UI属性 + private lazy var iconImageView: UIImageView = { + let imageView = UIImageView() + return imageView + }() + + private lazy var titleLabel: UILabel = { + let label = UILabel() + label.font = .fontMedium(ofSize: 16) + label.textColor = .colorFFFFFF() + return label + }() + + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { + super.init(style: style, reuseIdentifier: reuseIdentifier) + self.showIndicator = true + _setupUI() + } + + @MainActor required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + +} + +extension SPWalletCell { + + private func _setupUI() { + contentView.addSubview(iconImageView) + contentView.addSubview(titleLabel) + + iconImageView.snp.makeConstraints { make in + make.centerY.equalToSuperview() + make.left.equalToSuperview().offset(18) + } + + titleLabel.snp.makeConstraints { make in + make.centerY.equalToSuperview() + make.left.equalTo(iconImageView.snp.right).offset(8) + } + } + +} diff --git a/MoviaBox/Class/Mine/View/SPWalletHeaderView.swift b/MoviaBox/Class/Mine/View/SPWalletHeaderView.swift new file mode 100644 index 0000000..e38cd5d --- /dev/null +++ b/MoviaBox/Class/Mine/View/SPWalletHeaderView.swift @@ -0,0 +1,41 @@ +// +// SPWalletHeaderView.swift +// MoviaBox +// +// Created by 佳尔 on 2025/4/28. +// + +import UIKit + +class SPWalletHeaderView: UIView { + + //MARK: UI属性 + private lazy var contentView: SPMineWalletView = { + let view = SPMineWalletView() + return view + }() + + override init(frame: CGRect) { + super.init(frame: frame) + _setupUI() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + +} + +extension SPWalletHeaderView { + + private func _setupUI() { + addSubview(contentView) + + contentView.snp.makeConstraints { make in + make.left.equalToSuperview() + make.centerX.equalToSuperview() + make.top.equalToSuperview().offset(10) + } + } + +} diff --git a/MoviaBox/Source/Assets.xcassets/icon/coin_icon_03.imageset/Contents.json b/MoviaBox/Source/Assets.xcassets/icon/coin_icon_03.imageset/Contents.json new file mode 100644 index 0000000..f07fde9 --- /dev/null +++ b/MoviaBox/Source/Assets.xcassets/icon/coin_icon_03.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Group 614@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Group 614@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/MoviaBox/Source/Assets.xcassets/icon/coin_icon_03.imageset/Group 614@2x.png b/MoviaBox/Source/Assets.xcassets/icon/coin_icon_03.imageset/Group 614@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..e095f760b80e8c85a297e3383d11f8d5db121112 GIT binary patch literal 783 zcmV+q1MvKbP)~g2X+UcgSZ5B5T^n;71*gj*MV~t;HyBF3Q#IIcd)md(0Ppz3$kzCn`b=% z<6-$MqJlyoqN1NIaZS|3m8Zjn*n7SZ|5jDi!&iWe)I@{j=v-TP6i7@HE#42CW2_R) z)b!IvihANR@fEH^G!EUy^E**R+8&9&X(%sH3NrK*^wPM96|~n8jWJpZNwsew_$}k5LAL-i!xe4LkIP1Uf2}~h2~w9PM&u5PvTmJ z)ivWw6^Lj-gqy!vC0=VRw;6`QC@J@H$6igx=w@^wP8ERX8U$QfrLoB@S2C=0*;K zMFo>to-gu*X;@6h@+mlI4)^5aM+ zXiZaxFEH$-5k&TZh{fSh*W&azQVUvb)I3fzxE6#A%8;U?lIHPtwI$EGI1Ei{A3CD2 z2L=CUV->>jJb(b-OFn1Ln70`olF?xm!?SLaAzpgOZ^CG%Du-uXF;bZM8RWIY$XGF= z_yr$z-gLKE6X!E}i{+ovCZf~LnW++DE|h!X&q#3(!|C!L3_JbBQ+c{{u!VT)_~UdJ zT{d`QH9qb-M#H1vjdcr*7%VtNR8R=KUg?eZKaTuL&+!bya28+by#rj-%W$NL^eCln9D)@^?7< zY!Dzw0E8fJs4xKR%tvkL%8>oOHB<#`Cr@vNej9q-Y&I|S*J44$ES=N1~^RlM!K&8Q~tX;*13M0Y5 zj!MF>>Y>CACF***m~j~s9AfF5D#7>$@eEwvEd>*+nF+N*85QEL$tIL95h2P8>eh6( zRQNQ1O)l++cu4X9W@TDhfD$`)CTkaQOEovJ5f7qCgSyB>vg^Xg9HTBd4ARViClUZI zS?rOH4nlVapDlYq%yp5Lw2hHIK}74K!L*_{3B0oD~}z+|BIGmcG9Mzc%$Xu=DM?nePjN3B{{-L zR=7+##?AGL-Ac*;`19)sVXS88<>KsUcdQC{Pm~ANB@Ai2w+rghyXf8d6#Tr+3VIHR zR|6arT-jAo0f6zAVupDI4dm#S8VD|&N*d;s*hdQu8SGB)7U)!=z%LBnq8KnfZ~O3H z&DUE)&os`K6wzr*tz6w~Rj&hMMKxjy{4QEIJz#n_Tgm{&v8`iide!sC$o~;BFsI_- z(!H{-_=n-IXhj%TwJv(i{FM`D+?c=CFz)28X=V5ZO{hD^Q#iw3VupRE%b-N9$j#N+ z1pZ*niZi(CVvm`&0^T26&e0204Kfgw0hg^pv?KudjxF2E@ByzFozDW5v4Y^g2hBBG z0~&4z8&7-0ORq+#Q!_H^kf|@ANFg7hRF6nkjbm&XM!r`USH|@+QlKGwQ4!PAaLlpl zT-p|s8mA!duXKzYJvHDyqWp%0fOD1Oj6n?vf%p?dGdEB%gR-k{xbi7POBn!vL|BY= zi>vN!RURIkL-k#e93>86^12m`s}n1KRGy6t^QF!sjZs;_ShrmsFNSVcyCgOMX?LDVV7-fB zA7r34$j0@@-Z6oTl>LJO2ZMSUT%` S!+i+=0000~KHIszMDCLkM_XOT!DBEAzC2PA*e$&gs^ z#mQYR0TO<)?gndZ!J$ALsw~T@-o2E0xAB?x$xQ8V%o>lp<@8*ShVh9wxYco&$C&YT zw1<|f+IEFVochlZZj2-(kxLVJeoGEhgkizDV{nNOaVhzVFg!9|d=oUM?4MELa@=qH zNt47C;u0@8ED?#6WfDn9LKI>hnlN^XJN6s_(5%n|x`u6r0B8#12M#slL6|4j7!8^_ zWDw}+HKZ()xXboq%%Q|}D7zcHLX`PIxL(M|Z}VYv12W&tz%obhS}E#QBi5^!#98bC4S P00000NkvXXu0mjf=R2)d literal 0 HcmV?d00001 diff --git a/MoviaBox/Source/Assets.xcassets/icon/feed_back_icon_03.imageset/Frame@3x.png b/MoviaBox/Source/Assets.xcassets/icon/feed_back_icon_03.imageset/Frame@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..ffd8823b0410122729d21fa676eae7cfa68d19d2 GIT binary patch literal 537 zcmV+!0_OdRP)dJaYX~wqoDH$S#&MkG$_1zwKXUx5>4C2L{8=T=r zQ88(#m^AJXKohy1F+P05ExRJqCA`I&baKRWk*lI(KKjaqlwyi$b7W9;goqhTPYzGK zOOZ;Vpwd|4TsHe(ib<|9ra90C5u^7pX{eYqR7@J7S&<*ZQ~1Mgl2-Ohm$3-RiX3k; zgt4IZNo|Xfxkf3DK3hykq{?a5cJ%WJ{ul)0z7Rqq)tWYIM2s%?(oivJsF*ZDk_RvI zF?L1K|halBi(ofk{7N9q7)>aPHY>0;0$ z5J~Kv&!5M-%^uR|5ECoqb00g<13E$537T$@4Z;TP2CzZ0LD(R40xBKi_$V!s!54Cu=g#Mg zBMaG*une#;0UQ!ohZ~Xf&$Lqs zEU;^MHPnvM>Ydra5t^Hbj+5xzvpxxf4y%Frdo(MWi&FX!O$@H3-L(ZfE+dQYsY~VO z6EzM*9;^MI!A>X-W+OQmSWl4V<3X$}X&EJc|qhDh-j zJabL^F|27HE5wQ^uJw}kB>Tom00%5C%MG%slYIzF+GjA_bX~b-*%%jNkn45FLL_~s z66oJt`J6hUIejg2D!L13Cfi1Wh-f6BIUJ1K5CW5HkU6;7S*B7)SzGG9g^PJ73Ze zBtJ*7RAZo}S#%)4THB>VLahsBI-Sk}bwHv<)Ydj08MQB56Lx5?N07LSLy;UMbjZ9* z8)|>hC2?&_|I*N`6lU{xXh`i9yZ0!;&Z%)u4HR*MxAc7Sz-_!+rqmWee%ZK-^D5?u z1lvC0J97hYvEj^~X6>G;wy5rz{aHDIfy&h?S|GD@1xJbi8i8g<<%;AUh(x!CyMqKy_eL7!< zti1E5qAwSQ;yJKGH(DGv33OpmJnL-`NU$)*IbPrfdBB}=x57lB$k;rO44}(GTFr=r z**x=eI!K_4A=@vK$wL~73G_v6?LI?*R2Ubh2KpEX?TV*+3Yk8ROCTvTNfBW&0~ZxrqZ>IGBhd=eroTyG1@%VG+JRzqp8B4PTf!@%-?A< zuo1RAgyQ<*FGsA3?kk(_ePOY-JcM%iJHZ5(V6VI7A(Rv$*j!x9t$U$xpFXPkescGl lJ&x(R;S$WmD#cpr;vZWI=psImrJw)+002ovPDHLkV1hcBI5YqN literal 0 HcmV?d00001 diff --git a/MoviaBox/Source/Assets.xcassets/icon/records_icon_02.imageset/Contents.json b/MoviaBox/Source/Assets.xcassets/icon/records_icon_02.imageset/Contents.json new file mode 100644 index 0000000..3eb7831 --- /dev/null +++ b/MoviaBox/Source/Assets.xcassets/icon/records_icon_02.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Purchase records@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Purchase records@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/MoviaBox/Source/Assets.xcassets/icon/records_icon_02.imageset/Purchase records@2x.png b/MoviaBox/Source/Assets.xcassets/icon/records_icon_02.imageset/Purchase records@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0f7b01389120882a018525e4dc0058f5a22837e2 GIT binary patch literal 604 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 literal 0 HcmV?d00001 diff --git a/MoviaBox/Source/Assets.xcassets/icon/settings_icon_01.imageset/Frame@3x.png b/MoviaBox/Source/Assets.xcassets/icon/settings_icon_01.imageset/Frame@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..1fb74f429157feea0a0014d57b3e2477dc499c39 GIT binary patch literal 2749 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 DBZoKE literal 0 HcmV?d00001 diff --git a/MoviaBox/Source/en.lproj/Localizable.strings b/MoviaBox/Source/en.lproj/Localizable.strings index a7765c4..78f9e2b 100644 --- a/MoviaBox/Source/en.lproj/Localizable.strings +++ b/MoviaBox/Source/en.lproj/Localizable.strings @@ -21,6 +21,7 @@ "Save" = "Save"; "Added" = "Added"; "FeedBack" = "FeedBack"; +"Settings" = "Settings"; "Language" = "Language"; "Privacy Policy" = "Privacy Policy"; "User Agreement" = "User Agreement"; @@ -59,6 +60,10 @@ "My wallet" = "My wallet"; "Store" = "Store"; "Rewards" = "Rewards"; +"Details" = "Details"; +"Consumption records" = "Consumption records"; +"Purchase records" = "Purchase records"; +"Reward Coins" = "Reward Coins"; "kLoginAgreementText" = "By continuing, you agree to the User Agreement and Privacy Policy";