2011-01-01 1 views
5

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

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

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

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

В моем UIViewController реализован метод UIApplicationWillResignActiveNotification, но он не получил вызов после снятия скриншота.

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

Иногда прикасаться к ним и прикасаться от руки не вызывали из-за прерывания.

спасибо.

+0

Как насчет внедрения viewWillAppear или viewDidAppear и тестирования, если они вызываются после снятия скриншота? Затем в этих методах, если (theDragged == 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]; 

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

Смежные вопросы