0

我最近在我的应用中设置了应用内购买机制。在购买过程中,我想根据两种事件更新一个 hud(我正在使用mbprogresshud ):我开始购买并收到购买验证。我面临的问题是,购买完成后,hud 永远不会更新为我想要的(自定义视图):

  1. 当我点击购买按钮时:
-(IBAction)buyButtonTapped:(id)sender {

  self.hud = [[SCLProgressHUD alloc] initWithView:self.view];
    [self.view addSubview:self.hud];

    self.hud.labelText = @"Connecting...";
    self.hud.minSize = CGSizeMake(100 , 100);
    [self.hud show:YES];
  ...
}
  1. 当我收到购买成功的通知时:
 -(void)productPurchased:(NSNotification *)notification {     
self.hud.customView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"checkmark_icon.png"]];     
self.hud.mode = SCLProgressHUDModeCustomView;
self.hud.labelText = @"Thanks for your purchase!";        
... 
}

在最后一个方法中设置 self.hud.customView 属性会触发一个 [self setNeedsLayout]; 和 hud 类中的 [self setNeedsDisplay] 但我仍然没有观察到任何变化。

关于我在这里做错了什么的任何可能的想法?

4

1 回答 1

0

mbprogress hud自述文件中所述,在主线程上执行任务时更新 UI 需要稍微延迟才能生效。在我的情况下发生的情况是,hud 是弹出框控制器的强大属性,我立即将其关闭,因此我没有机会看到更新发生。我现在在完成块中关闭控制器:

-(void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block completionBlock:(void (^)())completion

我的代码片段看起来像这样的解雇:

[_hud showAnimated:YES whileExecutingBlock:^(void){
                                          [self.successPurchaseSoundEffect play];
                                          _hud.customView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"checkmark_icon.png"]];
                                          _hud.mode = SCLProgressHUDModeCustomView;
                                          _hud.labelText = @"Thanks!";

                                          // We need to pause the background thread to let the music play and the hud be updated
                                          sleep(1);}
                          completionBlock:^(void){
                                          [self.delegate dismissPurchaseInfoController:self];
}];
于 2012-08-20T21:16:04.610 回答