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 がロックを取得していると思いますが、場合によってはそれを解放しないため、メインスレッドがフリーズします。どう思いますか?アプリをフリーズせずにこれを達成するための最良の方法は何ですか?
よろしくお願いします。