2

私はMBProgressHUDを使用してローディングを表示し、ローカルの long メソッドを実行してユーザーのエクスペリエンスを向上させています。すべて正常に動作していますが、メソッドが1秒以内に実行される場合、ロードが表示されないように実装する必要があります。MBProgressHUD のサンプルを調べたところ、この機能のためにsetGraceTime時間setMinShowTimeが表示されていましたが、すべてが正しく機能していませんでした。猶予時間を設定すると、メソッドの実行時間が1秒を超えても読み込みアイコンが表示されないため、コードは次のとおりです

    if (self.HUD == nil)
    {
        self.HUD = [[MBProgressHUD alloc] initWithView:self.view];
        [self.view addSubview:self.HUD];
    }
    self.HUD.labelText = @"Please wait.....";
    //        [self.HUD setMinShowTime:2.0f];

    [self.HUD setGraceTime:1.0f];
    [self.HUD setTaskInProgress:YES];
    [self.HUD show:YES];
    //        [self.HUD hide:YES afterDelay:3];

    [[NSRunLoop currentRunLoop] runUntilDate:[NSDate distantPast]];

    if (mycondition == nil)
    {
            [self myTask:[NSURL fileURLWithPath:strPath]];
            //[self performSelector:@selector(mytask:) withObject:[NSURL fileURLWithPath:strPath]];
    }
    else
    {
      //else
    }

    self.tempView.hidden = YES;
    //        self.HUD.taskInProgress = NO;
    [self.HUD hide:YES];
    self.HUD = nil;

この問題の解決策[[NSRunLoop currentRunLoop] runUntilDate:[NSDate distantPast]];を教えて ください。このコードの何が問題なのか教えてください..?!

4

1 に答える 1

1

MBProgressHUDメソッドの実行時に、オブジェクトをそのスーパービューから削除する必要があります。このような:

// メソッドが 1 秒以内に実行される場合、インジケーターは表示されません

- (void)viewDidLoad
{
  [super viewDidLoad];
  if (HUD == nil)
  {
    HUD = [[MBProgressHUD alloc] initWithView:self.view];
    [self.view addSubview:HUD];
  }
  HUD.labelText = @"Please wait.....";
  [HUD setGraceTime:1.0f];
  [HUD setTaskInProgress:YES];
  [HUD show:YES];
  [self performSelector:@selector(runThisMethod) withObject:nil afterDelay:0.9f];
}

- (void)runThisMethod
{
    [HUD removeFromSuperview];
}

// メソッドが 1 秒後に実行されると、インジケーターはメソッドが実行されるまでしばらくの間表示されます

- (void)viewDidLoad
{
  [super viewDidLoad];
  if (HUD == nil)
  {
    HUD = [[MBProgressHUD alloc] initWithView:self.view];
    [self.view addSubview:HUD];
  }
  HUD.labelText = @"Please wait.....";
  [HUD setGraceTime:1.0f];
  [HUD setTaskInProgress:YES];
  [HUD show:YES];
  [self performSelector:@selector(runThisMethod) withObject:nil afterDelay:1.9f];
}

- (void)runThisMethod
{
    [HUD removeFromSuperview];
}
于 2013-08-02T04:58:37.843 に答える