修改CocoaPods库:GMStepper增加新功能(二)

在上一篇里我们讨论了如何扩展GMStepper库,不过还没完,我们的扩展还有BUG!

上一篇地址在: 修改CocoaPods库:GMStepper增加新功能(一)

究其原因是GMStepper中间的Label是可以左右拖动的,顾名思义,向左表示减少,向右表示增加。

我们只是将增加按钮隐藏了,但是向右拖动Label还是可以增加Value值,用户就会很愤怒,尤其是有强迫症的用户 ;)

为了填补这个BUG,我们有2种方法:

1.让用户无法向右拖动
2.向右拖动但并不会增加Value

我们分别来看看实现的难度.

1.让用户无法向右拖动

用户拖动的处理在handlePan(gesture: UIPanGestureRecognizer)方法中,我们只要在如下代码位置阻断向右的行为即可:

let slidingRight = gesture.velocity(in: label).x > 0
let slidingLeft = gesture.velocity(in: label).x < 0

// Move the label with pan
if slidingRight {
    label.center.x = min(labelMaximumCenterX, label.center.x + translation.x)
} else if slidingLeft {
    label.center.x = max(labelMinimumCenterX, label.center.x + translation.x)
}

不过这里如果直接退出方法的话貌似不太合理,后面还有一些收尾逻辑,因为时间关系并不想再细细阅读,所以此种思路PASS掉!!!

2.向右拖动但并不会增加Value

接下来我们再来关注第二种思路,当用户拖动Label后,最终是要更新Value的,不过在哪里更新呢???观察源代码可知,GMStepper作者为了实现拖动后的一个延时动画效果,并没有立即更新Value,而是先设置更新状态:

if panState != .HitRightEdge {
    stepperState = .ShouldIncrease
    //省略无关代码
}

if panState != .HitLeftEdge {
    stepperState = .ShouldDecrease
    //省略无关代码
}

然后在计时器回调方法中做最终更新:

func updateValue() {
    if stepperState == .ShouldIncrease {
        value += stepValue
    } else if stepperState == .ShouldDecrease {
        value -= stepValue
    }   
}

所以我们只需要简单的将如上代码加上判断条件即可:

if rightButton.isHidden == false{
    value += stepValue
}

App运行图就不贴出来,反正已经美美的实现了我们的效果 ;)

最后要说的是:

重构不要成瘾!!! I Love This Game!!!


这里写图片描述

猜你喜欢

转载自blog.csdn.net/mydo/article/details/81075710
今日推荐