Uiscrollview는 스크롤이 마감 될 때까지 Nstimer를 일시 중지합니다

StackOverflow https://stackoverflow.com/questions/605027

  •  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)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top