美文网首页iOS开发精选Obj-C
UIScrollView滚动的时候,定时器CADisplayLi

UIScrollView滚动的时候,定时器CADisplayLi

作者: 韦德460 | 来源:发表于2017-06-18 16:20 被阅读90次

    下面代码在UIScrollView滚动的时候事件源不执行(popNeedDisplay不执行)

    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)
    


    原因:
    每个run loop可运行在不同的模式下,一个run loop mode是一个集合,其中包含其监听的若干输入事件源定时器,以及在事件发生时需要通知的run loop observers
    运行在一种某一种mode下的runloop只会处理其run loop mode中包含的输入源事件,定时器事件,以及通知run loop mode中包含的observers。

    以下是常用的mode:
    // NSDefaultRunLoopMode:一般情况下应使用此模式
    // UITrackingRunLoopMode: 界面跟踪 Mode,用于 ScrollView 追踪触摸滑动,保证界面滑动时不受其他 Mode 影响
    // NSRunLoopCommonModes:包含default modes,modal modes,event Tracking modes

    由此可见,当UIScrollView滚动的时候,处于UITrackingRunLoopMode下,而我们设置定时器加入到了NSDefaultRunLoopMode下,所以事件源不会被调用,而 NSRunLoopCommonModes 包含 UITrackingRunLoopMode 和 NSDefaultRunLoopMode,所以我们直接使用NSRunLoopCommonModes就可以解决了!



    强烈推荐:超简单!!! iOS设置状态栏、导航栏按钮、标题、颜色、透明度,偏移等

    https://github.com/wangrui460/WRNavigationBar
    https://github.com/wangrui460/WRNavigationBar_swift



    欢迎关注我的微博:wangrui460

    相关文章

      网友评论

        本文标题:UIScrollView滚动的时候,定时器CADisplayLi

        本文链接:https://www.haomeiwen.com/subject/gcqpqxtx.html