首页 > 解决方案 > 在非视图控制器类中添加活动指示器

问题描述

我有以下用于应用内购买的代码。由于不知何故一旦purchase()执行就会有延迟,我需要指出应用程序正在加载。-如何在purchase()调用函数后立即添加活动指示器?

我已经尝试在给定函数内的当前视图控制器中添加一个带有指示器的子视图,但我失败了。

class IAPService: NSObject {

    ...

    func purchase() {
        guard let productToPurchase = products.first else { return }
        print(productToPurchase)
        let payment = SKPayment(product: productToPurchase)
        paymentQueue.add(payment)
    }

    func restorePurchases() {
        paymentQueue.restoreCompletedTransactions()
    }

}

extension IAPService: SKProductsRequestDelegate {

    func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
        self.products = response.products
        for product in response.products {
            print(product.localizedTitle)
        }
    }

}

extension IAPService: SKPaymentTransactionObserver {

    func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
        for transaction in transactions {
            print(transaction.transactionState.status(), transaction.payment.productIdentifier)
            if transaction.payment.productIdentifier == "com.timfuhrmann.savum.premium" && ( transaction.transactionState == .purchased || transaction.transactionState == .restored ) {
                premiumPurchased = true
                defaults.set(premiumPurchased, forKey: "premiumPurchased")
                print(premiumPurchased)
            }
            switch transaction.transactionState {
            case .purchasing: break
            case .purchased: goToAddCar(); queue.finishTransaction(transaction)
            default: queue.finishTransaction(transaction)
            }
        }
    }

}

标签: iosswift

解决方案


作为一个类,IAPService 不应该关心甚至不知道用户界面。活动指示器应该完全由视图控制器启动和控制。

我会使用 NotificationCenter 观察者让视图控制器知道事务何时完成(或出错),以便 VC 知道何时禁用活动指示器并更新 UI 的其余部分。


推荐阅读