3

これを再現するソースコードを以下に示します。showWithStatusHUD が表示される前に呼び出して閉じると、次にshowWithStatus呼び出されたときにコントロールが表示されません。誰かが回避策を知っていますか?

// Commenting these will show SVProgressHUD
[SVProgressHUD showWithStatus:@"Loading..."];
[SVProgressHUD dismiss];
// Comment above to show SVProgressHUD

[SVProgressHUD showWithStatus:@"Loading..."];
[self performSelector:@selector(dismissHUD) withObject:nil afterDelay:5.0f];

編集:これを再現するソースコードがいくつかあります。

4

2 に答える 2

0

私は問題を解決しました:

1. プロパティを追加

@property (nonatomic, readonly, getter = isDismissing) BOOL dismissing;

2.フラグを追加

- (void)dismissWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay {
    _dismissing = YES;
    ...
        void (^completionBlock)(void) = ^{
            ...
            _dismissing = NO;
        };
    ...
}

リネーム機能

- (void)showImage:(UIImage)image status:(NSString)status duration:(NSTimeInterval)duration  

名前付きで

- (void)showImageSS:(UIImage)image status:(NSString)status duration:(NSTimeInterval)duration

3.遅延を追加

- (void)showImage:(UIImage*)image status:(NSString*)status duration:(NSTimeInterval)duration
{
    if(self.isDismissing){
        __weak SVProgressHUD *weakSelf = self;
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, NSEC_PER_SEC * SVProgressHUDDefaultAnimationDuration),dispatch_get_main_queue(), ^{
            [weakSelf showImageSS:image status:status duration:duration];
        });
    }else{
        [self showImageSS:image status:status duration:duration];
    }
}

- (void)showImageSS:(UIImage*)image status:(NSString*)status duration:(NSTimeInterval)duration
{
    // this is orginal function - (void)showImage:(UIImage)image status:(NSString)status duration:(NSTimeInterval)duration code block
}  

finsh みんなありがとう

于 2016-03-15T14:51:47.157 に答える
0

2番目のHUDディスプレイに対してこれを行うことで、これを回避しました。

[self performSelector:@selector(showHud) withObject:nil afterDelay:0.1];
于 2014-03-31T18:33:45.997 に答える