2011-04-06 3 views
1

처리시 스크롤 다음 테스트 코드를 상기 사용자가이 1초 수면 중에 여러 와이프 모든 와이프 이벤트를 수행안 드리면/I 페이징 함께있는 UIScrollView를 포함하는 애플리케이션이 = YES와

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 
{ 
    sleep(1); 
} 

하면 메인 스레드가 해제되면 수행되며 "야생"효과를냅니다.

이 차단 작업이 수행되는 동안 터치/스 와이프를 비활성화하는 방법이 있습니까? (물론 이상적인 방법은 메인 스레드를 여기에서 차단하는 것이지만 항상 가능하지는 않습니다!).

나는 '잠'을 setUserInteraction = NO/YESsetScrollingEnabled = NO/YES으로 포장하려했지만 행운이 없었다.

+0

mainThread에서 무엇을하고 있으며 부하가 넉넉합니까? –

+0

지연은 실제로 데모에서는 1 초가 아닙니다. 매우 짧을 수도 있지만 여전히 일부 작업이 수행되는 동안 수행 된 모든 스 와이프는이 동작을 유발합니다. – Egil

+0

뭐든지간에, 스크롤 뷰가 응답 할 수 있도록 처리를 별도의 스레드로 옮겨야합니다. –

답변

0

지정된 시간 동안 작업을 수행 한 후 탭을 비활성화하려면 친구에게이 문제가있었습니다. 당신이 원하는 것은 NSObject의 performSelector : withObject : afterDelay : 메소드를 활용하는 것입니다.

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 
{ 
    userInteractionEnabled = NO; 
    [self performSelector:@selector(enableUserInteraction) withObject:nil afterDelay: 1]; 
} 

- (void)enableUserInteraction { 
    userInteractionEnabled = YES; 
} 

I 가능성이 구문 권리를 가지고 있지 않는 한이 거친, 그러나 당신이 따라 할 수 있어야한다고, 그리고 당신이 적합하다고 생각 어디서나 사용할 수 있습니다. 사용자 상호 작용을 사용하지 않도록 설정 한 다음 타이머 이벤트를 설정하여 지정된 기간 후에 다시 활성화 할 수있는 기능을 호출하십시오.

관련 문제