2つのビューを含むビューがあります。これらのビューの1つには、2つのボタンといくつかのテキストラベルが含まれています。もう1つは、alphaが0.25に設定されており、UIActivityIndicatorView
があり、アプリが機能しており、アプリが完了するまで待つ必要があることをユーザーに伝えます。 UIActivityIndicatorView
が回転しているときにユーザーがボタンに触れた場合、UIActivityIndicatorView
が停止すると、アプリはユーザーのアクションを記憶して応答します。 UIActivityIndicatorView
の回転中に発生したユーザー操作を破棄するにはどうすればよいですか?
読んでくれてありがとう。
P.D .: this thread でコメントされているように、モーダルソリューションを使用しないことをお勧めします。
編集済み:
私は現在このコードを使用していますが、正しく機能しません。
- (void)viewDidAppear:(BOOL)animated {
// The view appears with an UIActivityIndicatorView spinning.
[self showResults]; // The method that takes a long time to finish.
[self.activityIndicator stopAnimating];
// When the showResults method ends, the view shows the buttons to the user.
[self.activityIndicatorView setHidden:YES];
[self.menuButton setEnabled:YES];
[self.menuButton setUserInteractionEnabled:YES];
[self.playButton setEnabled:YES];
[self.playButton setUserInteractionEnabled:YES];
[self.view setUserInteractionEnabled:YES];
[self.interactionView setUserInteractionEnabled:YES];
}
私はこれらの方法が非常に便利だと感じました:
[[UIApplication sharedApplication] beginIgnoringInteractionEvents];
[[UIApplication sharedApplication] endIgnoringInteractionEvents];
Swift 3.0でインタラクションを無効にするには:-
UIApplication.shared.beginIgnoringInteractionEvents()
相互作用を復元するには:-
UIApplication.shared.endIgnoringInteractionEvents()
[_button setUserInteractionEnabled:NO];
それはそれを無効にする必要があります、あなたがそれをタップしたいときはYESを設定してください。
BOOL i_am_ready_to_submit = NO;
-(void)action_finished{
[self.activityIndicator stopAnimating];
i_am_ready_to_submit = YES;
}
-(IBAction)submit_button{
if(i_am_ready_to_submit){
[self submit];
}
}
ビューでタッチイベントを無効にするには、
[[UIApplication sharedApplication] beginIgnoringInteractionEvents];
ビューでタッチイベントを有効にするには
[[UIApplication sharedApplication] endIgnoringInteractionEvents];
追加するだけ
[self.view setUserInteractionEnabled:NO];
の前に
[self.activityIndicator startAnimating];
後にそれを再び有効にします
[self.activityIndicator stopAnimating];
[self.view setUserInteractionEnabled:YES];
@IBAction func yourButtonPressed(sender: UIButton) {
if self.activityIndicator.isAnimating() {
//remember the action user asked of you using the sender
} else {
//do your stuff
return
}
yourButtonPressed(yourButton)
}
または、コードを使用してself.activityIndicator.animationDidStopを実行し、いつ実行するかを決定します
SVProgressHUD WrapperClassを使用してください
ソースコードの場合 ここをクリック!
[SVProgressHUD showWithMaskType:SVProgressHUDMaskTypeBlack];
上記のステートメントを使用して、バックグラウンドタッチを無効にします
[SVProgressHUDを閉じる]
バックグラウンドタッチを有効にします。
表示されているUIActivityIndicatorView
に基づいて、UIButtonを無効/有効にすることができます。または、ボタンハンドラーメソッドで、スピナーが表示されているときに「ユーザー操作を破棄する」だけの場合:
- (void)buttonTapped:(id)sender {
if ([spinner superview] != nil && [spinner isAnimating]) {
return;
}
// ... the rest of your code
}
この例では、UIActivityIndicatorView
を非表示にするときに、次のいずれかを呼び出すと想定しています。
[spinner removeFromSuperview];
または
[spinner stopAnimating];
Aquick solution:画面全体をカバーする透明または疑似透明ビューを追加します。このビューの上にアクティビティインジケーターを追加します。待機期間が終了したら、両方のビューを削除します。 インスピレーションを得る 。
すべての状況で画面全体を非表示にすることができないため、より良い解決策は、アプリの状態を管理し(アプリが「ビジー」のときのアクションを無視)、各アプリに応じて適切なボタンやその他のコントロールを無効/有効にすることです状態。
回答は以前の応答で返信されますが、情報目的で「[self.activityIndicatorView setHidden:YES];」を追加するのと同じです。 startAnimating/stopAnimatingがすでにこの処理を行っているため、このメソッドを明示的に呼び出す必要はありません。 「hidesWhenStopped」プロパティのデフォルト値を使用していると想定しています。