下面代碼在UIScrollView滾動(dòng)的時(shí)候事件源不執(zhí)行(popNeedDisplay不執(zhí)行)
var displayLink:CADisplayLink? = CADisplayLink(target: self, selector: #selector(popNeedDisplay))
displayLink?.add(to: RunLoop.main, forMode: .defaultRunLoopMode)
將 defaultRunLoopMode 改成 commonModes 問題就解決了
var displayLink:CADisplayLink? = CADisplayLink(target: self, selector: #selector(popNeedDisplay))
displayLink?.add(to: RunLoop.main, forMode: . commonModes)
原因:
每個(gè)run loop可運(yùn)行在不同的模式下,一個(gè)run loop mode是一個(gè)集合,其中包含其監(jiān)聽的若干輸入事件源,定時(shí)器,以及在事件發(fā)生時(shí)需要通知的run loop observers。
運(yùn)行在一種某一種mode下的runloop只會(huì)處理其run loop mode中包含的輸入源事件,定時(shí)器事件,以及通知run loop mode中包含的observers。
以下是常用的mode:
// NSDefaultRunLoopMode:一般情況下應(yīng)使用此模式
// UITrackingRunLoopMode: 界面跟蹤 Mode,用于 ScrollView 追蹤觸摸滑動(dòng),保證界面滑動(dòng)時(shí)不受其他 Mode 影響
// NSRunLoopCommonModes:包含default modes,modal modes,event Tracking modes
由此可見,當(dāng)UIScrollView滾動(dòng)的時(shí)候,處于UITrackingRunLoopMode下,而我們?cè)O(shè)置定時(shí)器加入到了NSDefaultRunLoopMode下,所以事件源不會(huì)被調(diào)用,而 NSRunLoopCommonModes 包含 UITrackingRunLoopMode 和 NSDefaultRunLoopMode,所以我們直接使用NSRunLoopCommonModes就可以解決了!
強(qiáng)烈推薦:超簡(jiǎn)單?。?! iOS設(shè)置狀態(tài)欄、導(dǎo)航欄按鈕、標(biāo)題、顏色、透明度,偏移等
https://github.com/wangrui460/WRNavigationBar
https://github.com/wangrui460/WRNavigationBar_swift
歡迎關(guān)注我的微博:wangrui460