更改UIButton alpha然后无法识别点击

时间:2017-04-27 01:11:08

标签: swift uibutton

我设置了一个非常像youtube的界面,如果用户按下UIView,我会隐藏或显示带动画的所有子视图。

func setupControlViewVisiblity(playingVideo: Bool = false, duration: TimeInterval = 1.0, isExpanded: Bool = false){
        var alpha:CGFloat = 1

    if isShowingControls {
        //If we're showing then we're about to hide everything so alpha is 0
        alpha = 0
    }


    UIView.animate(withDuration: duration, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseOut, animations: {

        self.pausePlayButton.alpha = alpha
        self.backButton.alpha = alpha
        self.infoLabel.alpha = alpha
        self.fullScreenButton.alpha = alpha
        self.currentTimeLabel.alpha = alpha
        self.videoLengthLabel.alpha = alpha
        self.videoSlider.alpha = alpha

    }, completion:nil)

    isShowingControls = !isShowingControls
}

我遇到的问题是,如果我调用此方法并显示控件(isShowingControls为true),我的UIButtons将无法识别第一次点击。这实际上只发生在视图alpha从0到1然后我尝试点击按钮时。

我尝试在主队列上做动画......不起作用。如果我将alpha从0更改为1 ....等待几秒钟...然后点击按钮..它可以工作。如何在UIButtons alpha更改后立即使其正常工作?

由于

编辑:我想这与动画持续时间有关,因为当我将其切换为0.2时,它可以工作。如何让它保持高一点并使其发挥作用?

1 个答案:

答案 0 :(得分:0)

默认情况下,动画制作动画时,UIVIew动画不允许用户交互。

幸运的是有一个动画选项allowUserInteraction。没有更多信息,但您可以在文档here中看到它。另外值得查看所有选项here

试试这个:

UIView.animate(withDuration: duration, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: [.curveEaseOut, .allowUserInteraction], animations: {

     // Update the views

}, completion:nil)