Как отловить канкаляцию UIScrollView или других? - PullRequest
5 голосов
/ 01 января 2011

Иногда такие прерывания, как телефонный звонок, нарушают нормальное поведение приложения на iPhone или iPad.

Например, я создал один экземпляр UIScrollView и реализовал методы делегата UIScrollView: scrollViewWillBeginDragging и scrollViewDidEndDragging (и scrollViewDidEndDecelerating).

Метод scrollViewWillBeginDragging деактивировал все пользовательские кнопки в моем приложении. Затем методы scrollViewDidEndDragging и scrollViewDidEndDecelerating активировали эти пользовательские кнопки. То есть, пока пользователь прокручивал, все пользовательские кнопки на некоторое время отключались.

Проблема была в том, что пока пользователь начал тянуть и просто держал Экземпляр UIScrollView, если я взял снимок экрана нажатием кнопки домой и кнопку питания, то любой из scrollViewDidEndDragging и scrollViewDidEndDecelerating не позвонить. Так что приложение запуталось до.

Я реализовал метод UIApplicationWillResignActiveNotification в моем UIViewController, но он не вызывался после создания снимка экрана.

Как я могу поймать любое прерывание, которое нарушает регулярный поток событий?

Иногда touch_End и touchCanceled не вызывались из-за прерывания.

Спасибо.

1 Ответ

2 голосов
/ 17 января 2011

Я столкнулся с той же проблемой и избавился от нее с помощью performSelector:withObject:afterDelay метода NSObject.

В scrollViewDidScroll:

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

Вы можете попробовать эту технику и комбинировать ее с другими, которые вы упомянули.
Надеюсь, это поможет. Удачи!

...