0

最近、アプリにアプリ内購入メカニズムを設定しました。購入中に、購入を開始し、購入の検証を受け取るという 2 種類のイベントに従って、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] がトリガーされます。および [self setNeedsDisplay] hud クラス内ですが、それでも変化は見られません。

私がここで間違っていることについて考えられることはありますか?

4

1 に答える 1

0

readmeで述べたように、mbprogress hudタスクがメインスレッドで実行されるときのUIの更新には、有効になるまでにわずかな遅延が必要でした。私の場合、hudはポップオーバーコントローラーの強力な特性であり、すぐに却下したため、更新が行われているのを見る機会がありませんでした。ここで、次の完了ブロックでコントローラーを閉じます。

-(void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block completeBlock:(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 に答える