3

私のwebViewDidFinishLoad方法では、次のコードがあります。

- (void)webViewDidFinishLoad:(UIWebView *)webView {   
    if (hasPressed == 1) {
        hasPressed = 0;
        isBlocked = 0;
    }
    else if (hasPressed == 0 && hasDroppedDown == 0) {
        if (viewState != kStateWeather || isBlocked == 0) {
        [UIView animateWithDuration:0.5 
                              delay:0.0 options:UIViewAnimationCurveLinear animations:^{
                                  //Animations
                              }
                         completion:^(BOOL finished){
                             hasDroppedDown = 1;
                         }];
        }
    }
}

ご覧のとおり、リダイレクトのある Web サイトなどでこのメソッドが急速に呼び出されると、elsein myelse ifは役に立たなくなります。どうすればそんなに速く呼び出されないようにできますか?

4

2 に答える 2

1

残念ながら、それはできません。で新しい URL の読み込みが開始されるたびに呼び出されますUIWebView。代わりにできることは 1 つです。デリゲート機能を実装する

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType

このデリゲートは、新しいフレームが でロードを開始しようとしているときに呼び出されUIWebViewます。navigationType取得できる値を確認することで、どのタイプのリクエストがロードされるかを把握できます。

UIWebViewNavigationTypeLinkClicked
UIWebViewNavigationTypeFormSubmitted
UIWebViewNavigationTypeBackForward
UIWebViewNavigationTypeReload
UIWebViewNavigationTypeFormResubmitted
UIWebViewNavigationTypeOther

: YESwebview にページの読み込みを許可する場合は return してくださいNO

これがお役に立てば幸いです。

于 2012-07-12T11:48:02.537 に答える
1
- (void)main { //being called every 0.2
    t+=0.2;
}
- (void)webViewDidFinishLoad:(UIWebView *)webView {   
    loadImg.hidden = 1;
    m_activity.hidden= TRUE;     
    [m_activity stopAnimating];
    if (t>0.5) {
        [self finishedLoading];
        t=0;
    }
}
- (void)finishedLoading {
    if (hasPressed == 1) {
        hasPressed = 0;
        isBlocked = 0;
    }
    else if (hasPressed == 0 && hasDroppedDown == 0) {
        if (viewState != kStateWeather || isBlocked == 0) {
            [UIView animateWithDuration:0.5 
                                  delay:0.0 options:UIViewAnimationCurveLinear animations:^{
                                      //Animations
                                  }
                             completion:^(BOOL finished){
                                 hasDroppedDown = 1;
                             }];
        }
    }
}
于 2012-07-12T11:58:57.510 に答える