0

2 つの異なる uiwebviews (ローカル html からロード) を提示するビューがあります。ユーザーがナビゲーション バーにあるボタンをタップするたびに、ページ カール アニメーション (カールアップとカールダウン) を使用して、ある Web ビューから別の Web ビューに切り替えます。すべて正常に動作しているように見えますが、ユーザーがそのボタンをタップするとアプリがフリーズすることがあります。ほとんどの場合、アプリがフリーズするまでボタンを繰り返しタップするとアプリがフリーズし、デバッグを一時停止すると、次のようになります。

ここに画像の説明を入力

self.navigationItem.titleView.userInteractionEnabled = NO; //Disable button interaction until animation is finished

 if (self.isVisibleFrontView) 
    {
    self.isVisibleFrontView = NO;

    [UIView transitionWithView:self.view
                      duration:0.5
                       options:UIViewAnimationOptionTransitionCurlUp | UIViewAnimationOptionCurveEaseInOut
                    animations:^{
                        [[[self.view subviews] objectAtIndex:0] removeFromSuperview];
                        [self.view addSubview:self.patientViewReverse];

                    }
                    completion:^(BOOL finished){
                        self.navigationItem.titleView.userInteractionEnabled = YES;
                    }];
}
else 
{

    self.isVisibleFrontView = YES;

    [UIView transitionWithView:self.view
                      duration:0.5
                       options:UIViewAnimationOptionTransitionCurlDown | UIViewAnimationOptionCurveEaseInOut
                    animations:^{
                        [[[self.view subviews] objectAtIndex:0] removeFromSuperview];
                        [self.view addSubview:self.patientView];

                    }
                    completion:^(BOOL finished){
                            self.navigationItem.titleView.userInteractionEnabled = YES;

                    }];

}
[self showNavigationBarButtons]; //change button image
}

removeFromSuperview のときに webView がロックを取得していると思いますが、場合によってはそれを解放しないため、メインスレッドがフリーズします。どう思いますか?アプリをフリーズせずにこれを達成するための最良の方法は何ですか?

よろしくお願いします。

4

1 に答える 1

0

最後に私はそれを修正しました。

今私がすることは、毎回Webビューを削除してサブビューとして追加するのではなく、表示したくないWebビューをsetHidden:YESにし、アニメーションブロック内の他のWebビューをsetHidden:NOにするだけです。これはより効率的で、webview は webthreadlock を使用しません。

于 2012-05-22T14:02:20.873 に答える