2010-11-19 7 views
2

UITableViewController의 기본값은 UITableView입니다. 나는 손가락으로 테이블을 천천히 드래그하여 스크롤합니다. 즉 손가락으로 손가락을 튀기지 않습니다. 테이블이 화면 상을 이동할 때마다 컨트롤러의 scrollViewDidScroll 메소드가 호출됩니다. 지정한 조건 중 하나라도 충족되면 scrollViewDidScroll에 대한 호출 중 하나는 performSelector:withObject:afterDelay을 사용하여 나중에 어떤 작업을 예약합니다.UITableView를 끌 때 performSelector를 실행할 수 없습니까?

그러나 손가락을 뗄 때까지 동작이 실행되지 않습니다. 예를 들어, afterDelay 매개 변수를 2 초로 설정하고 내 손가락을 5 초 동안 길게 누르면 손가락을 떼면 조치가 실행되어 3 초가 지나면 실행됩니다. 손가락을 화면에 대고 실행하는 동작 (UI를 업데이트하는 것이므로 주 스레드에서 실행해야 함)을 허용하는 방법이 있습니까?

감사합니다.

+0

: http://stackoverflow.com/questions/2865760/performselectorwithobjectafterdelay-not-working-from-scrollviewdidzoom –

답변

8

UIScrollView (UITableView의 수퍼 클래스)이 스크롤 될 때 응용 프로그램이 수행하는 작업보다 scrollView의 우선 순위를 지정하기 위해 runloop을 변경하기 때문입니다. 이것은 스크롤이 가능한 한 매끄럽게 진행되도록하기 위해 발생합니다. 나는 다음과 같은 포함하는 배열로 시작하는 게 좋을 것, 모드에 대한

- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay inModes:(NSArray *)modes; 

:

지연 방법이 버전을 사용하려고 다른 사람의 미래 참고로 [[NSRunloop currentRunLoop] currentMode], NSDefaultRunLoopMode

+2

답변 해 주셔서 감사합니다. 정말 도움이되었습니다. 그러나 약간 다른 배열을 사용하면 : [NSArray arrayWithObject : NSRunLoopCommonModes] – Miroslav

+0

NSRunLoopCommonModes는 지연된 수행 작업을 만듭니다. 고마워요 Miroslav – mitrenegade

+0

정말 고마워요! 너는 나의 날을 구한다!) – user2154220

관련 문제