ユーザーが自分のテーブルビューセルの1つをタップしたときに発生するアニメーションを実装しようとしています。基本的に、アニメーションは「+5」や「+1」のようなテキストの小さなラベルで、フェーディング中に上に移動します(基本的にユーザーがポイントしたときにポイントがビデオゲームに表示されます)。私のコントローラのtableView:didSelectRowAtIndexPath:
実装でアニメーションの進行中にUITableViewと対話できない
、私は(ここでは簡単のために言い換え)次のことをやっている:
CGRect toastFrame = /* figure out the frame from the cell frame here */;
UILabel *toast = [[UILabel alloc] initWithFrame:toastFrame];
toast.text = [NSString stringWithFormat:@"+%d", 5];
toast.backgroundColor = [UIColor clearColor];
toast.userInteractionEnabled = NO; // hoped this would work but it doesn't
[tableView addSubview:toast];
[UIView
animateWithDuration:1.0
animations:^
{
toast.alpha = 0.0;
toast.transform = CGAffineTransformMakeTranslation(0.0, -44.0);
}
completion:^ (BOOL finished)
{
[toast removeFromSuperview];
}];
[toast release];
トーストがうまく表示されると素晴らしく見えるされます。問題は、アニメーションが完了するまで、テーブルビューがタッチイベントの受信を停止することです。つまり、テーブルビューでセルをタップしてから1秒間は、テーブルビュー内の他のセルをタップすることはできません。
これが起こらないようにする方法はありますか?アニメーションがまったく起こっていないかのようにユーザーがテーブルビューとやりとりを続けられるようにする方法はありますか?
ありがとうございました。
Brilliant!それがそれでした。それをブロックする方法の良い点は、ブロックが外部からビューを自動的に保持するので、完了ハンドラが呼び出される前に一時的なビューが破棄されないように手作業で気にする必要がないことです。また、公式に推奨されている方法でそれをやっていることの疑わしい満足感を与えます:) – glenc
5年後、あなたはまだ私の日を救った。ありがとうございました! –