2011-01-01 5 views
5

때때로 전화 통화와 같은 중단이 발생하고 iPhone 또는 iPad에서 앱의 일반적인 동작을 방해합니다.UIScrollView 또는 다른 사용자의 cancallation을 잡는 방법?

예를 들어 하나의 UIScrollView 인스턴스를 만들고 UIScrollView 대리자 메서드 scrollViewWillBeginDragging 및 scrollViewDidEndDragging (및 scrollViewDidEndDecelingating)을 구현했습니다.

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]; 

당신은이 기술을 시도하고 당신이 언급 한 다른와 결합 할 수 있습니다.
희망, 도움이 될 것입니다. 행운을 빕니다!