美文网首页
IOS开发自定义滑杆滑动不灵敏及卡顿问题调研及解决方案

IOS开发自定义滑杆滑动不灵敏及卡顿问题调研及解决方案

作者: little_ma | 来源:发表于2018-03-21 13:53 被阅读89次

    iOS实际开发过程中有时会遇到自定义的滑杆不灵敏或者卡顿问题,造成原因是什么呢?
    1、组件本身问题

    1)、首先确认是不是控件本身的问题,注释掉valueChanged时执行的代码,观察滑杆的滑动是否灵敏;
    2)、控件本身的问题,自定义的滑杆一般有三种方式:
    a、在UISlider的基础上自定义
    b、继承UIControl重新自定义一个滑杆
    c、通过手势的拖拽来自定义一个滑杆
    b、c方案,控件的灵敏度取决于点触区域的范围,一般建议a方案,系统组件的封装比较流畅

    2、卡顿问题,滑动过程中执行了耗时操作

    一般来说,执行过程中有耗时操作,不建议使用滑杆的方式来操作;正确的解决方案应该是更换需求(说服PM),可改为点击button切换等等,或者优化算法去除耗时里面的耗时操作。

    如何来优化这一缺点呢?
    1、方案选择:处理过程中有避免不掉的耗时操作时,UI上尽量不要采用滑杆的调节方式;不提倡异步处理,这样会使滑杆变化与实际处理不同步;
    2、采用的丢帧处理,就是滑动比较快时一些回调不做处理。
    如下面代码块

        NSLog(@"templateSlider1111 : %.3f", value);
        CGFloat interval = 0.01;
        if ([self isFastClickAction:interval])
        {
            return;
        }
        NSLog(@"templateSlider2222 : %.3f", value);
    
    - (BOOL) isFastClickAction:(NSTimeInterval)interval{
        if (_lastClickDate == nil) {
            _lastClickDate = [NSDate date];
            return NO;
        }
        NSDate *currentDate = (NSDate *)[NSDate date];
        NSTimeInterval intervalFromLast = [currentDate timeIntervalSinceDate:_lastClickDate];
        NSLog(@"click intervalFromLast:%f,interval:%f",intervalFromLast,interval);
        if ( intervalFromLast < 0 ) {
            return NO;
        }
        if(intervalFromLast < interval){
            NSLog(@"click too fast now");
            return YES;
        }
        _lastClickDate = currentDate;
        return NO;
    }
    

    为防止最后一次回调是实现的,我们也必须进行最后一次的"补帧操作",在UISlider范围较大变动时,最后会执行UIControlEventTouchUpInside,通过监听这个事件来进行"补帧操作"。(UISlider小范围变动时‘UIControlEventTouchUpInside’可能不执行,当然此时滑杆的速度较慢,所以不需要补帧)

    当然,丢帧处理的方式只能适用于耗时操作较小时,下面是针对UISlider的快速滑动操作,不同时间间隔下的丢帧情况(数据源于本人手速):
    测试环境:
    a、iPhone 6
    b、个人普通快速滑动
    c、滑杆长度320
    下面为挑选的0.01s、0.05s、0.1s的丢帧情况,其他测试结果在此省略。
    通过数据测试,可以得出以下结论:
    1、耗时操作的执行时间高于设置的丢帧间隔,丢帧处理是不起作用的。
    2、快速滑动时,每次滑杆valueChanged的处理间隔时间约0.005s ~0.02s,帧变跨度约2%;
    3、丢帧处理的情况:0.01s的丢帧间隔,速度较快时偶尔会有一帧的丢失,跳帧跨度约5%;0.05s的丢帧间隔,每周期会有3帧丢失,帧变跨度20% ~ 30%;0.1s的丢帧间隔,每周期会有4~7帧丢失,帧变跨度40% ~ 60%;较高的帧变跨度会对我们刷新页面渐变变得跳动,所以,为保证刷新页面的渐变效果,一般的丢帧处理应该保证丢帧间隔在0.05s以内。

    iPhone6 间隔为0.01s

    2018-03-16 23:24:30.656984+0800 VivaLite[3234:625532] templateSlider2222 : 0.716
    2018-03-16 23:24:30.671289+0800 VivaLite[3234:625532] templateSlider1111 : 0.633
    2018-03-16 23:24:30.671405+0800 VivaLite[3234:625532] templateSlider2222 : 0.633
    2018-03-16 23:24:30.693179+0800 VivaLite[3234:625532] templateSlider1111 : 0.547
    2018-03-16 23:24:30.693286+0800 VivaLite[3234:625532] templateSlider2222 : 0.547
    2018-03-16 23:24:30.704099+0800 VivaLite[3234:625532] templateSlider1111 : 0.465
    2018-03-16 23:24:30.704215+0800 VivaLite[3234:625532] templateSlider2222 : 0.465
    2018-03-16 23:24:30.726855+0800 VivaLite[3234:625532] templateSlider1111 : 0.400
    2018-03-16 23:24:30.727765+0800 VivaLite[3234:625532] templateSlider2222 : 0.400
    2018-03-16 23:24:30.737945+0800 VivaLite[3234:625532] templateSlider1111 : 0.341
    2018-03-16 23:24:30.738882+0800 VivaLite[3234:625532] templateSlider2222 : 0.341
    2018-03-16 23:24:30.762311+0800 VivaLite[3234:625532] templateSlider1111 : 0.301
    2018-03-16 23:24:30.762470+0800 VivaLite[3234:625532] templateSlider2222 : 0.301
    2018-03-16 23:24:30.771372+0800 VivaLite[3234:625532] templateSlider1111 : 0.272
    2018-03-16 23:24:30.771598+0800 VivaLite[3234:625532] click too fast now
    2018-03-16 23:24:30.822295+0800 VivaLite[3234:625532] templateSlider1111 : 0.252
    2018-03-16 23:24:30.822398+0800 VivaLite[3234:625532] templateSlider2222 : 0.252
    2018-03-16 23:24:30.842367+0800 VivaLite[3234:625532] templateSlider1111 : 0.259
    2018-03-16 23:24:30.842496+0800 VivaLite[3234:625532] templateSlider2222 : 0.259
    2018-03-16 23:24:30.894287+0800 VivaLite[3234:625532] templateSlider1111 : 0.402
    2018-03-16 23:24:30.904978+0800 VivaLite[3234:625532] templateSlider2222 : 0.402
    2018-03-16 23:24:30.907098+0800 VivaLite[3234:625532] templateSlider1111 : 0.468
    2018-03-16 23:24:30.907244+0800 VivaLite[3234:625532] click too fast now
    2018-03-16 23:24:30.927183+0800 VivaLite[3234:625532] templateSlider1111 : 0.548
    2018-03-16 23:24:30.927888+0800 VivaLite[3234:625532] templateSlider2222 : 0.548
    2018-03-16 23:24:30.937072+0800 VivaLite[3234:625532] templateSlider1111 : 0.621
    2018-03-16 23:24:30.937260+0800 VivaLite[3234:625532] click too fast now
    2018-03-16 23:24:30.954610+0800 VivaLite[3234:625532] templateSlider1111 : 0.686
    2018-03-16 23:24:30.954739+0800 VivaLite[3234:625532] templateSlider2222 : 0.686
    2018-03-16 23:24:30.974871+0800 VivaLite[3234:625532] templateSlider1111 : 0.746
    2018-03-16 23:24:30.976635+0800 VivaLite[3234:625532] templateSlider2222 : 0.746
    2018-03-16 23:24:30.991061+0800 VivaLite[3234:625532] templateSlider1111 : 0.794
    2018-03-16 23:24:30.991208+0800 VivaLite[3234:625532] templateSlider2222 : 0.794
    2018-03-16 23:24:31.014046+0800 VivaLite[3234:625532] templateSlider1111 : 0.836
    2018-03-16 23:24:31.014511+0800 VivaLite[3234:625532] templateSlider2222 : 0.836
    2018-03-16 23:24:31.029180+0800 VivaLite[3234:625532] templateSlider1111 : 0.869
    2018-03-16 23:24:31.029293+0800 VivaLite[3234:625532] templateSlider2222 : 0.869
    2018-03-16 23:24:31.037419+0800 VivaLite[3234:625532] templateSlider1111 : 0.895
    2018-03-16 23:24:31.037589+0800 VivaLite[3234:625532] click too fast now
    2018-03-16 23:24:31.056255+0800 VivaLite[3234:625532] templateSlider1111 : 0.917
    2018-03-16 23:24:31.056371+0800 VivaLite[3234:625532] templateSlider2222 : 0.917
    2018-03-16 23:24:31.071071+0800 VivaLite[3234:625532] templateSlider1111 : 0.927
    2018-03-16 23:24:31.071170+0800 VivaLite[3234:625532] templateSlider2222 : 0.927
    2018-03-16 23:24:31.093576+0800 VivaLite[3234:625532] templateSlider1111 : 0.934
    2018-03-16 23:24:31.093717+0800 VivaLite[3234:625532] templateSlider2222 : 0.934
    2018-03-16 23:24:31.136368+0800 VivaLite[3234:625532] templateSlider1111 : 0.919
    2018-03-16 23:24:31.136477+0800 VivaLite[3234:625532] templateSlider2222 : 0.919
    2018-03-16 23:24:31.158405+0800 VivaLite[3234:625532] templateSlider1111 : 0.889
    2018-03-16 23:24:31.158589+0800 VivaLite[3234:625532] templateSlider2222 : 0.889
    2018-03-16 23:24:31.172826+0800 VivaLite[3234:625532] templateSlider1111 : 0.862
    2018-03-16 23:24:31.173014+0800 VivaLite[3234:625532] templateSlider2222 : 0.862
    2018-03-16 23:24:31.204725+0800 VivaLite[3234:625532] templateSlider1111 : 0.839
    2018-03-16 23:24:31.204876+0800 VivaLite[3234:625532] templateSlider2222 : 0.839
    2018-03-16 23:24:31.215004+0800 VivaLite[3234:625532] templateSlider1111 : 0.832
    2018-03-16 23:24:31.215506+0800 VivaLite[3234:625532] templateSlider2222 : 0.832
    

    iPhone 6,间隔为0.05

    2018-03-19 21:00:02.957876+0800 VivaLite[7297:1695311] templateSlider2222 : 0.189
    2018-03-19 21:00:02.975809+0800 VivaLite[7297:1695311] templateSlider1111 : 0.209
    2018-03-19 21:00:02.975954+0800 VivaLite[7297:1695311] click too fast now
    2018-03-19 21:00:02.990463+0800 VivaLite[7297:1695311] templateSlider1111 : 0.228
    2018-03-19 21:00:02.990665+0800 VivaLite[7297:1695311] click too fast now
    2018-03-19 21:00:03.006789+0800 VivaLite[7297:1695311] templateSlider1111 : 0.248
    2018-03-19 21:00:03.006998+0800 VivaLite[7297:1695311] click too fast now
    2018-03-19 21:00:03.023588+0800 VivaLite[7297:1695311] templateSlider1111 : 0.269
    2018-03-19 21:00:03.023804+0800 VivaLite[7297:1695311] templateSlider2222 : 0.269
    2018-03-19 21:00:03.037670+0800 VivaLite[7297:1695311] templateSlider1111 : 0.292
    2018-03-19 21:00:03.037833+0800 VivaLite[7297:1695311] click too fast now
    2018-03-19 21:00:03.055167+0800 VivaLite[7297:1695311] templateSlider1111 : 0.314
    2018-03-19 21:00:03.055330+0800 VivaLite[7297:1695311] click too fast now
    2018-03-19 21:00:03.073753+0800 VivaLite[7297:1695311] templateSlider1111 : 0.342
    2018-03-19 21:00:03.073972+0800 VivaLite[7297:1695311] templateSlider2222 : 0.342
    2018-03-19 21:00:03.090166+0800 VivaLite[7297:1695311] templateSlider1111 : 0.370
    2018-03-19 21:00:03.090385+0800 VivaLite[7297:1695311] click too fast now
    2018-03-19 21:00:03.104700+0800 VivaLite[7297:1695311] templateSlider1111 : 0.399
    2018-03-19 21:00:03.105188+0800 VivaLite[7297:1695311] click too fast now
    2018-03-19 21:00:03.121126+0800 VivaLite[7297:1695311] templateSlider1111 : 0.427
    2018-03-19 21:00:03.121283+0800 VivaLite[7297:1695311] click too fast now
    2018-03-19 21:00:03.139574+0800 VivaLite[7297:1695311] templateSlider1111 : 0.452
    2018-03-19 21:00:03.139784+0800 VivaLite[7297:1695311] templateSlider2222 : 0.452
    2018-03-19 21:00:03.157042+0800 VivaLite[7297:1695311] templateSlider1111 : 0.473
    2018-03-19 21:00:03.157255+0800 VivaLite[7297:1695311] click too fast now
    2018-03-19 21:00:03.173506+0800 VivaLite[7297:1695311] templateSlider1111 : 0.495
    2018-03-19 21:00:03.173713+0800 VivaLite[7297:1695311] click too fast now
    2018-03-19 21:00:03.190615+0800 VivaLite[7297:1695311] templateSlider1111 : 0.517
    2018-03-19 21:00:03.190844+0800 VivaLite[7297:1695311] templateSlider2222 : 0.517
    2018-03-19 21:00:03.204320+0800 VivaLite[7297:1695311] templateSlider1111 : 0.548
    2018-03-19 21:00:03.204850+0800 VivaLite[7297:1695311] click too fast now
    2018-03-19 21:00:03.223696+0800 VivaLite[7297:1695311] templateSlider1111 : 0.578
    2018-03-19 21:00:03.223902+0800 VivaLite[7297:1695311] click too fast now
    2018-03-19 21:00:03.239675+0800 VivaLite[7297:1695311] templateSlider1111 : 0.611
    2018-03-19 21:00:03.240310+0800 VivaLite[7297:1695311] click too fast now
    2018-03-19 21:00:03.255625+0800 VivaLite[7297:1695311] templateSlider1111 : 0.641
    2018-03-19 21:00:03.255774+0800 VivaLite[7297:1695311] templateSlider2222 : 0.641
    2018-03-19 21:00:03.270745+0800 VivaLite[7297:1695311] templateSlider1111 : 0.669
    2018-03-19 21:00:03.270859+0800 VivaLite[7297:1695311] click too fast now
    2018-03-19 21:00:03.288238+0800 VivaLite[7297:1695311] templateSlider1111 : 0.691
    2018-03-19 21:00:03.288352+0800 VivaLite[7297:1695311] click too fast now
    2018-03-19 21:00:03.304407+0800 VivaLite[7297:1695311] templateSlider1111 : 0.714
    2018-03-19 21:00:03.304618+0800 VivaLite[7297:1695311] click too fast now
    2018-03-19 21:00:03.320181+0800 VivaLite[7297:1695311] templateSlider1111 : 0.736
    2018-03-19 21:00:03.320342+0800 VivaLite[7297:1695311] templateSlider2222 : 0.736
    2018-03-19 21:00:03.337332+0800 VivaLite[7297:1695311] templateSlider1111 : 0.752
    2018-03-19 21:00:03.337417+0800 VivaLite[7297:1695311] click too fast now
    2018-03-19 21:00:03.353651+0800 VivaLite[7297:1695311] templateSlider1111 : 0.766
    2018-03-19 21:00:03.353742+0800 VivaLite[7297:1695311] click too fast now
    2018-03-19 21:00:03.371080+0800 VivaLite[7297:1695311] templateSlider1111 : 0.772
    2018-03-19 21:00:03.371196+0800 VivaLite[7297:1695311] templateSlider2222 : 0.772
    2018-03-19 21:00:03.390947+0800 VivaLite[7297:1695311] templateSlider1111 : 0.777
    2018-03-19 21:00:03.391106+0800 VivaLite[7297:1695311] click too fast now
    2018-03-19 21:00:03.406980+0800 VivaLite[7297:1695311] templateSlider1111 : 0.779
    2018-03-19 21:00:03.407097+0800 VivaLite[7297:1695311] click too fast now
    2018-03-19 21:00:03.420120+0800 VivaLite[7297:1695311] templateSlider1111 : 0.781
    2018-03-19 21:00:03.420216+0800 VivaLite[7297:1695311] click too fast now
    2018-03-19 21:00:03.453253+0800 VivaLite[7297:1695311] templateSlider1111 : 0.781
    2018-03-19 21:00:03.453353+0800 VivaLite[7297:1695311] templateSlider2222 : 0.781
    2018-03-19 21:00:03.470227+0800 VivaLite[7297:1695311] templateSlider1111 : 0.781
    2018-03-19 21:00:03.470324+0800 VivaLite[7297:1695311] click too fast now
    2018-03-19 21:00:03.487173+0800 VivaLite[7297:1695311] templateSlider1111 : 0.772
    

    iPhone 6,间隔0.1s

    2018-03-19 21:07:43.322574+0800 VivaLite[7318:1698461] templateSlider1111 : 0.130
    2018-03-19 21:07:43.322943+0800 VivaLite[7318:1698461] templateSlider2222 : 0.130
    2018-03-19 21:07:43.339668+0800 VivaLite[7318:1698461] templateSlider1111 : 0.128
    2018-03-19 21:07:43.339841+0800 VivaLite[7318:1698461] click too fast now
    2018-03-19 21:07:43.406331+0800 VivaLite[7318:1698461] templateSlider1111 : 0.128
    2018-03-19 21:07:43.406535+0800 VivaLite[7318:1698461] click too fast now
    2018-03-19 21:07:43.424621+0800 VivaLite[7318:1698461] templateSlider1111 : 0.131
    2018-03-19 21:07:43.425226+0800 VivaLite[7318:1698461] templateSlider2222 : 0.131
    2018-03-19 21:07:43.443287+0800 VivaLite[7318:1698461] templateSlider1111 : 0.146
    2018-03-19 21:07:43.443509+0800 VivaLite[7318:1698461] click too fast now
    2018-03-19 21:07:43.458177+0800 VivaLite[7318:1698461] templateSlider1111 : 0.169
    2018-03-19 21:07:43.458390+0800 VivaLite[7318:1698461] click too fast now
    2018-03-19 21:07:43.474857+0800 VivaLite[7318:1698461] templateSlider1111 : 0.199
    2018-03-19 21:07:43.475393+0800 VivaLite[7318:1698461] click too fast now
    2018-03-19 21:07:43.493027+0800 VivaLite[7318:1698461] templateSlider1111 : 0.238
    2018-03-19 21:07:43.493229+0800 VivaLite[7318:1698461] click too fast now
    2018-03-19 21:07:43.507813+0800 VivaLite[7318:1698461] templateSlider1111 : 0.284
    2018-03-19 21:07:43.508290+0800 VivaLite[7318:1698461] click too fast now
    2018-03-19 21:07:43.525029+0800 VivaLite[7318:1698461] templateSlider1111 : 0.339
    2018-03-19 21:07:43.525246+0800 VivaLite[7318:1698461] templateSlider2222 : 0.339
    2018-03-19 21:07:43.542272+0800 VivaLite[7318:1698461] templateSlider1111 : 0.395
    2018-03-19 21:07:43.542493+0800 VivaLite[7318:1698461] click too fast now
    2018-03-19 21:07:43.559304+0800 VivaLite[7318:1698461] templateSlider1111 : 0.453
    2018-03-19 21:07:43.559520+0800 VivaLite[7318:1698461] click too fast now
    2018-03-19 21:07:43.573798+0800 VivaLite[7318:1698461] templateSlider1111 : 0.512
    2018-03-19 21:07:43.574006+0800 VivaLite[7318:1698461] click too fast now
    2018-03-19 21:07:43.591655+0800 VivaLite[7318:1698461] templateSlider1111 : 0.570
    2018-03-19 21:07:43.591867+0800 VivaLite[7318:1698461] click too fast now
    2018-03-19 21:07:43.609444+0800 VivaLite[7318:1698461] templateSlider1111 : 0.628
    2018-03-19 21:07:43.609665+0800 VivaLite[7318:1698461] click too fast now
    2018-03-19 21:07:43.622374+0800 VivaLite[7318:1698461] templateSlider1111 : 0.681
    2018-03-19 21:07:43.622571+0800 VivaLite[7318:1698461] click too fast now
    2018-03-19 21:07:43.639283+0800 VivaLite[7318:1698461] templateSlider1111 : 0.724
    2018-03-19 21:07:43.639452+0800 VivaLite[7318:1698461] templateSlider2222 : 0.724
    2018-03-19 21:07:43.658281+0800 VivaLite[7318:1698461] templateSlider1111 : 0.766
    2018-03-19 21:07:43.658491+0800 VivaLite[7318:1698461] click too fast now
    2018-03-19 21:07:43.673879+0800 VivaLite[7318:1698461] templateSlider1111 : 0.801
    2018-03-19 21:07:43.674044+0800 VivaLite[7318:1698461] click too fast now
    2018-03-19 21:07:43.689453+0800 VivaLite[7318:1698461] templateSlider1111 : 0.834
    2018-03-19 21:07:43.689671+0800 VivaLite[7318:1698461] click too fast now
    2018-03-19 21:07:43.706020+0800 VivaLite[7318:1698461] templateSlider1111 : 0.864
    2018-03-19 21:07:43.706178+0800 VivaLite[7318:1698461] click too fast now
    2018-03-19 21:07:43.723893+0800 VivaLite[7318:1698461] templateSlider1111 : 0.885
    2018-03-19 21:07:43.724102+0800 VivaLite[7318:1698461] click too fast now
    2018-03-19 21:07:43.742062+0800 VivaLite[7318:1698461] templateSlider1111 : 0.905
    2018-03-19 21:07:43.742286+0800 VivaLite[7318:1698461] templateSlider2222 : 0.905
    

    相关文章

      网友评论

          本文标题:IOS开发自定义滑杆滑动不灵敏及卡顿问题调研及解决方案

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