123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- //
- // TSPurchasePromotionalVC.swift
- // AIEmoji
- //
- // Created by 100Years on 2025/6/30.
- //
- import APNGKit
- import Delegate
- class TSPurchasePromotionalVC: TSBaseVC {
-
- var isHandlePurchaseStateChanged = true //是否处理购买状态变化
-
- var closePageBlock:(()->Void)?
-
- lazy var topImageView: UIImageView = UIImageView.createImageView(imageName: "promotional_topImage",contentMode: .scaleAspectFill)
- lazy var shaowImageView: UIImageView = UIImageView.createImageView(imageName: "purchase_bj",contentMode: .scaleAspectFill)
- lazy var promotionalPrice: String = PurchaseManager.default.introductoryPrice(for: .week(.weekPromotional1)) ?? "--"
- lazy var originalPrice: String = PurchaseManager.default.price(for: .week(.weekPromotional1)) ?? "--"
- lazy var frontCtnView: UIView = creatFrontCtnView()
- lazy var bottomBtnsView: UIView = creatBottomBtnsView()
- lazy var countdownView: UIView = creatCountdownView()
-
- let minLabel:UILabel = UILabel()
- let secLabel:UILabel = UILabel()
- lazy var apngImageView: APNGImageView = creatApngImageView()
- var isAnimation:Bool = false
- init(isAnimation: Bool, closePageBlock: ( () -> Void)? = nil) {
- self.closePageBlock = closePageBlock
- self.isAnimation = isAnimation
- super.init()
- }
-
- @MainActor required init?(coder: NSCoder) {
- fatalError("init(coder:) has not been implemented")
- }
- let animationView:UIView = UIView()
- lazy var animationLab: UILabel = {
- let animationLab = UILabel.createLabel(text: "LUCKY GIFT\nFOR YOU!".localized,font:.font(name: .PoppinsBold, size: 38),textAlignment: .center)
- animationLab.alpha = 0.0
- return animationLab
- }()
-
-
- lazy var closeBtn:TSUIExpandedTouchButton = {
- let closeBtn = TSUIExpandedTouchButton()
- closeBtn.setUpButton(image:.closeGray){ [weak self] in
- guard let self = self else { return }
- closePage()
- }
- return closeBtn
- }()
-
-
- override func createView() {
- setNavBarViewHidden(true)
- self.view.backgroundColor = .clear
- contentView.addSubview(topImageView)
- contentView.addSubview(shaowImageView)
- contentView.addSubview(frontCtnView)
- contentView.addSubview(closeBtn)
- topImageView.snp.makeConstraints { make in
- make.leading.trailing.top.equalToSuperview()
- make.height.equalTo(532*kDesignScale)
- }
-
- shaowImageView.snp.makeConstraints { make in
- make.leading.trailing.bottom.top.equalToSuperview()
- }
-
- frontCtnView.snp.makeConstraints { make in
- make.leading.trailing.bottom.top.equalToSuperview()
- }
-
- closeBtn.snp.makeConstraints { make in
- make.leading.equalTo(16)
- make.top.equalTo(4+k_Height_statusBar())
- make.width.height.equalTo(36)
- }
-
- if isAnimation {
- self.contentView.alpha = 0.0
- addApngImageView()
- }
- }
-
- override func dealThings() {
- kPurchaseCountDownTime.complete = { [weak self] minutes, seconds, end in
- guard let self = self else { return }
- if end {
- self.closePage()
- }else{
- self.minLabel.text = minutes
- self.secLabel.text = seconds
- }
- }
- onPurchaseStateChanged()
- }
-
- @objc func closePage(){
- TSToastShared.hideLoading()
- closePageBlock?()
- self.dismiss(animated: true)
- NotificationCenter.default.post(name: .kCloseTSPurchasePromotionalVC, object: nil)
- }
-
- func onPurchaseStateChanged(){
- PurchaseManager.default.onPurchaseStateChanged = { [weak self] manager,state,object in
- guard let self = self else { return }
-
- if isHandlePurchaseStateChanged == false {
- debugPrint("purchaseManager.onPurchaseStateChanged 不处理")
- return
- }
-
- DispatchQueue.main.async {
- switch state {
- case .none:
- break
- case .loading:
- TSToastShared.showLoading(text: "Getting price".localized,containerView: self.view)
- case .loadSuccess:
- TSToastShared.hideLoading()
- case .loadFail:
- TSToastShared.hideLoading()
- let message = "Failed to get the price, will automatically retry in 5 seconds".localized
- TSToastShared.showToast(text: message)
- DispatchQueue.main.asyncAfter(deadline: .now() + 5) {
- PurchaseManager.default.requestProducts()
- }
- case .paying:
- TSToastShared.showLoading(text: "Purchasing now".localized,containerView: self.view)
- case .paySuccess:
- TSToastShared.hideLoading()
-
- var loadingText = "Finish".localized
- if manager.isVip {
- loadingText = manager.vipType == .year ? "Congratulations on being VIP of the Year!".localized : "Congratulation you have become VIP".localized
- }
-
- TSToastShared.showToast(text:loadingText)
- if manager.isVip {
- DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
- self.closePage()
- }
- }
- case .payFail:
- TSToastShared.hideLoading()
- if let str = object as? String {
- TSToastShared.showToast(text: str)
- }
-
- case .restoreing:
- TSToastShared.showLoading(text: "Restoring now".localized,containerView: self.view)
- case .restoreSuccess:
- TSToastShared.hideLoading()
- let loadingText = manager.isVip ? "Congratulation you have become VIP".localized : "Couldn't Restore Subscription".localized
- debugPrint(loadingText)
- TSToastShared.showToast(text:loadingText)
- if manager.isVip {
- DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
- self.closePage()
- }
- }
- case .restoreFail:
- TSToastShared.hideLoading()
- let loadingText = (object as? String) ?? "Failed to restore subscribe, please try again".localized
- debugPrint(loadingText)
- TSToastShared.showToast(text: loadingText)
- case .verifying:
- #if DEBUG
- TSToastShared.showLoading(text: "Verifying receipt...".localized,containerView: self.view)
- #endif
- case .verifySuccess:
- break
- case .verifyFail:
- #if DEBUG
- TSToastShared.hideLoading()
- let message = (object as? String) ?? "Failed to validate receipt".localized
- TSToastShared.showToast(text:message)
- #endif
- }
- }
- debugPrint("PurchaseManager onPurchaseStateChanged=\(String(describing: state))")
- }
- }
- }
|