2011-04-06 17 views
1

を処理中スクロールIページングとUIScrollViewのを含むアプリケーションを持っ= YESと次のテストコードで:無効タッチ/

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 
{ 
    sleep(1); 
} 

ユーザがこの1秒睡眠中にいくつかのスワイプを行う場合、すべてのスワイプイベントメインスレッドが解放されると実行され、 "ワイルド"な効果を与えます。

このブロック作業が実行されている間にタッチ/スワイプを無効にする方法はありますか(もちろん、理想的にはメインスレッドをブロックしないようにしてください)。

setUserInteraction = NO/YESsetScrollingEnabled = NO/YESで「スリープ」をラップしようとしましたが、運がありません。

+0

mainThreadで何をしていますか?負荷がいっぱいですか? –

+0

遅延は実際には1秒ではありません - デモ用です。非常に短いかもしれませんが、何らかの作業が実行されている間に実行されたスワイプはこの動作を引き起こします。 – Egil

+0

あなたが何であれ、スクロールビューが応答性を保つように、処理を別のスレッドに移動する必要があります。 –

答えて

0

私の友人は、指定した期間のアクションの後にタップを無効にしたいときに、この問題が発生しました。あなたがしたいのは、NSObjectのperformSelector:withObject:afterDelay:メソッドを活用することです。

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 
{ 
    userInteractionEnabled = NO; 
    [self performSelector:@selector(enableUserInteraction) withObject:nil afterDelay: 1]; 
} 

- (void)enableUserInteraction { 
    userInteractionEnabled = YES; 
} 

私はおそらく構文権利を持っていないので、これは荒いですが、これに従うことができるはず、とあなたが合うと考えるどこあなたがそれを使用することができます。ユーザーの操作を無効にしてから、指定した時間が経過した後に再度有効にする関数を呼び出すタイマーイベントを設定します。

関連する問題