通过使UI元素闪烁来指示错误

时间:2017-10-14 08:12:32

标签: ios swift uiviewanimation interaction-design

我有一个视图,用户需要在按钮工作之前进行选择。为了使这更加明显,我希望如果先按下(灰色)按钮,则表示需要完成的选择的元素会闪烁。即我想表明这是该状态的错误,并引导用户注意他们首先需要使用的UI元素。

我目前尝试将元素(下面代码中的self.display)快速闪烁两次,如下所示:

@IBAction func inactiveButtonClick() {
    let period = 0.16

    UIView.animate(withDuration: period/2, delay: 0.0, options: [.curveEaseInOut, .autoreverse, .repeat], animations: {
        self.display.alpha = 0
    }, completion: { _ -> Void in
        self.display.alpha = 1
    })

    DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + period*2, execute: {
        self.display.layer.removeAllAnimations()
    })

}

这很好非常,但感觉不是100%正确,动画有时会在完成之前被截止一小时。我想我可以排队两个动画,但我想知道是否有更简单的方法来实现这一点。有没有内置的方法让UI元素闪烁以指示错误?如果没有,是否有任何“已知良好”的曲线和频率组合将其传达给用户?

1 个答案:

答案 0 :(得分:1)

关键帧动画在这种情况下看起来非常合适:

UIView.animateKeyframes(withDuration: period, delay: 0.0, options: [], animations: {
    UIView.addKeyframe(withRelativeStartTime: 0.0, relativeDuration: 0.5, animations: {
        self.display.alpha = 0
    });
    UIView.addKeyframe(withRelativeStartTime: 0.5, relativeDuration: 0.5, animations: {
        self.display.alpha = 1
    });
}, completion: nil);

首先创建一个持续时间为关键帧的动画。在动画块内部,您可以通过指定相对开始时间(在关键帧动画的0和1 - 1之间,以及您的持续时间)来添加自定义关键帧动画。

首先,我们添加从头开始的动画,其相对持续时间为0.5,这是动画总持续时间的1/2。第二个动画将在第一个完成动画总动画的1/2时开始,并在动画时间的剩余1/2时间继续。

希望这有帮助