2011-01-01 2 views
5

場合によっては、電話などの割り込みが発生し、iPhoneまたはiPadのアプリの通常の動作が妨げられることがあります。UIScrollViewや他の人物をキャッチするには?

たとえば、1つのUIScrollViewインスタンスを作成し、UIScrollViewデリゲートメソッドscrollViewWillBeginDraggingおよびscrollViewDidEndDragging(およびscrollViewDidEndDecelerating)を実装しました。

scrollViewWillBeginDraggingメソッドは、アプリ内のすべてのカスタムボタンを無効にしました。 次に、scrollViewDidEndDraggingメソッドとscrollViewDidEndDeceleratingメソッドがこれらのカスタムボタンをアクティブにしました。つまり、ユーザーがスクロールしている間に、すべてのカスタムボタンがしばらくの間無効になりました。私は scrollViewDidEndDraggingと scrollViewDidEndDeceleratingのいずれか、その後、ホームボタン と電源ボタンを押して スクリーンショットを取った場合

問題は、ユーザー ドラッグし始め、ちょうど UIScrollViewのインスタンスを保有しながら、ということでした が呼び出されませんでした。だからアプリは乱雑になった アップ。

UIViewControllerでUIApplicationWillResignActiveNotificationメソッドを実装しましたが、スクリーンショットを取得した後に呼び出されませんでした。

定期的なイベントの流れを妨げるあらゆる種類の割り込みをキャッチするにはどうすればよいですか?

時には、touchesEndとtouchesCanceledも中断のために呼び出されませんでした。

ありがとうございます。

+0

viewWillAppearまたはviewDidAppearを実装し、スクリーンショットを撮った後に呼び出されるかどうかテストするのはどうですか?これらのメソッドでは、(beingDragged == TRUE)なら、scrollViewDidEndDraggingメソッドを呼び出します。 – adam

+0

viewDidScrollメソッドも中断しても呼び出されますか?おそらくないし、そこにあなたの問題への代替アプローチがあります。 – nacho4d

+0

私は物事に慣れていないので、ユーザーが別のビューを使用していたときにボタンを無効にする理由がわかりません。私が様々な示唆から得た印象は、ボタンを無効にしたい唯一の時間は、データの一部が欠落しているために実際に機能を実行できないときです。すなわち、選択もフィールドも埋められないなどです。 。 –

答えて

2

NSObjectのperformSelector:withObject:afterDelayメソッドを使用することで、同じ問題が発生し、取り除かれました。 scrollViewDidScrollで


[NSObject cancelPreviousPerformRequestsWithTarget:yourController]; 
[yourController deactivateButtons]; 
[yourController performSelector:@selector(activateButtons) withObject:nil afterDelay:0.5]; 

あなたはこのテクニックを試してみて、あなたが言及したことを他とそれを組み合わせることができます。
希望、それは役に立ちます。がんばろう!

関連する問題