Uiscrollview는 스크롤이 마감 될 때까지 Nstimer를 일시 중지합니다
-
03-07-2019 - |
문제
a 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)
스크롤하는 동안 타이머를 발사하려면 다른 스레드와 다른 실행 루프를 실행해야합니다. 타이머는 이벤트 루프의 일부로 처리되므로 뷰 스크롤을 처리하는 데 바쁘면 타이머로 돌아 오지 않습니다. 다른 스레드에서 타이머를 실행하는 Perf/배터리 페널티는이 경우를 처리 할 가치가 없을 수 있습니다.
누구나 Swift 4를 사용합니다.
timer = Timer(timeInterval: 1, target: self, selector: #selector(timerUpdated), userInfo: nil, repeats: true)
RunLoop.main.add(timer, forMode: .common)
제휴하지 않습니다 StackOverflow