我设置了一个非常像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时,它可以工作。如何让它保持高一点并使其发挥作用?答案 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)