0

左メニューにRNFrostedSidebarを使用しています。サイドバーを却下しながら、コードのブロックの下ブロックメソッドの完了後にメソッドを実行します

- (void)handleTap:(UIPanGestureRecognizer *)recognizer { 
    [self dismissAnimated:YES completion:nil]; 
} 

- (void)dismissAnimated:(BOOL)animated completion:(void (^)(BOOL finished))completion { 

    void (^completionBlock)(BOOL) = ^(BOOL finished){ 
     [self rn_removeFromParentViewControllerCallingAppearanceMethods:YES]; 

     rn_frostedMenu = nil; 

     if (completion) { 
      completion(finished); 
     } 
    }; 

    if (animated) { 
     CGFloat parentWidth = self.view.bounds.size.width; 
     CGRect contentFrame = self.contentView.frame; 
     contentFrame.origin.x = self.showFromRight ? parentWidth : -_width; 

     CGRect blurFrame = self.blurView.frame; 
     blurFrame.origin.x = self.showFromRight ? parentWidth : 0; 
     blurFrame.size.width = 0; 
     self.blurView.frame = blurFrame; 
     self.blurView.alpha=0.1; 

     [UIView animateWithDuration:self.animationDuration delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{ 
          self.viewForTable.frame = contentFrame; 
        } 
        completion:completionBlock]; 
    } else { 
     completionBlock(YES); 
    } 
    } 

を実行しているdismissAnimated方法iはHomeViewControllerを更新するためのコードを実行する実行した後に、このコードは

[self callNavBar]; 

-(void) callNavBar { 
    [[NSNotificationCenter defaultCenter] postNotificationName:@"adjustNavBar" 
                object:self]; 
} 

あるiが追加など、this溶液を試しキューや実行中のメソッドが、私は

「メインスレッドチェッカー:バックグラウンドスレッドで呼ばれるUI API: - [UIViewの境界]」として例外が発生しました

私はthis tooに上記と同じエラーがありました。

+0

エラーログを表示できますか? – trungduc

+0

@trungduc第1の解決策または第2の解決策のエラーログ? –

+0

両方を表示できる方が良いです – trungduc

答えて

1

問題はUIスレッド内でUIを更新しなかったためです。これを解決するには、メインキューの内部でdismissAnimated:completion:メソッドを呼び出します。

- (void)handleTap:(UIPanGestureRecognizer *)recognizer { 
    dispatch_async(dispatch_get_main_queue(), ^{ 
    [self dismissAnimated:YES completion:^(BOOL finished) { 
     [self callNavBar]; 
    }]; 
    }); 
} 
+0

これを行うと、最初のメソッドの完了後に2番目のメソッドは実行されません。最初のブロックメソッドの完了時に2番目のメソッド 'callNavBar'を実行する必要があります。 –

+0

あなたの質問では、 'callNavBar'メソッドを補完ブロックに渡さないからです。私は自分の答えを更新しました。もう一度それを確認することができます。 – trungduc

+0

あなたは@trungduc Thnakの作業:) –

-1

ここでは、nilではなく、この関数を補完ハンドラとして配置することができます。 それはあなたがそれを望むときにそれが正確に実行されるように。

これは多少のように見えます。

- (void)handleTap:(UIPanGestureRecognizer *)recognizer { 
     [self dismissAnimated:YES completion:[self callNavBar]]; 
} 
+0

もし私がこれを好きなら、 "void(^)(BOOL) 'のパラメータに' void 'を送信する" –

関連する問題