我有下面的程序内购买代码。由于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)
}
}
}
}发布于 2019-08-26 17:31:29
作为一个类,IAPService不应该关心,甚至不知道用户界面。活动指示器应完全由视图控制器发起和控制。
我将使用NotificationCenter观察者来让视图控制器知道事务何时完成(或出错),以便VC知道何时禁用活动指示符并更新UI的其余部分。
发布于 2019-08-26 17:58:56
您可以在调用该函数之前在ViewController中显示一个活动指示符,并在该函数中包含一个完成处理程序,当购买完成时,您可以在该函数中取消ViewController中的活动指示符。
您应该在ViewController中添加活动指示符,而不是来自您支付模块中的函数,因为支付模块只负责支付和处理支付。
https://stackoverflow.com/questions/57662209
复制相似问题