반응형
UIScrollView는 스크롤이 끝날 때까지 NSTimer를 일시 중지합니다.
UIScrollView
(또는 그 파생 클래스)가 스크롤하는 동안 NSTimers
실행중인 모든 항목 이 스크롤이 완료 될 때까지 일시 중지되는 것처럼 보입니다 .
이 문제를 해결할 방법이 있습니까? 스레드? 우선 순위 설정? 아무것도?
쉽고 간단한 구현 솔루션은 다음과 같습니다.
NSTimer *timer = [NSTimer timerWithTimeInterval:...
target:...
selector:....
userInfo:...
repeats:...];
[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
Swift 3를 사용하는 모든 사람
timer = Timer.scheduledTimer(timeInterval: 0.1,
target: self,
selector: aSelector,
userInfo: nil,
repeats: true)
RunLoop.main.add(timer, forMode: RunLoopMode.commonModes)
예, 폴이 맞습니다. 이것은 런 루프 문제입니다. 특히 NSRunLoop 메서드를 사용해야합니다.
- (void)addTimer:(NSTimer *)aTimer forMode:(NSString *)mode
이것은 빠른 버전입니다.
timer = NSTimer.scheduledTimerWithTimeInterval(0.01, target: self, selector: aSelector, userInfo: nil, repeats: true)
NSRunLoop.mainRunLoop().addTimer(timer, forMode: NSRunLoopCommonModes)
스크롤하는 동안 타이머를 실행하려면 다른 스레드와 다른 실행 루프를 실행해야합니다. 타이머는 이벤트 루프의 일부로 처리되기 때문에 뷰 스크롤을 처리 하느라 바쁘면 타이머에 접근 할 수 없습니다. 다른 스레드에서 타이머를 실행하는 성능 / 배터리 패널티는이 경우를 처리 할 가치가 없을 수도 있습니다.
누구나 Swift 4를 사용합니다.
timer = Timer(timeInterval: 1, target: self, selector: #selector(timerUpdated), userInfo: nil, repeats: true)
RunLoop.main.add(timer, forMode: .common)
참고 URL : https://stackoverflow.com/questions/605027/uiscrollview-pauses-nstimer-until-scrolling-finishes
반응형
'program tip' 카테고리의 다른 글
angular-cli로 하나의 테스트 사양 만 실행하는 방법 (0) | 2020.09.23 |
---|---|
Docker 컨테이너 로그를 단일 파일로 리디렉션하는 방법은 무엇입니까? (0) | 2020.09.23 |
Objective-C의 문자열 비교 (0) | 2020.09.23 |
자바 스크립트를 통해 HTML 요소 스타일 제거 (0) | 2020.09.23 |
"python"이 명령으로 인식되지 않음 (0) | 2020.09.23 |