在UIView动画期间难以允许用户交互

时间:2014-08-24 23:01:40

标签: ios animation uiview swift

我正在努力弄清楚如何允许用户与视图进行动画制作。

情况如下:我有一个UIView cardView,其中包含card个子视图。 card是可拖动的磁贴,类似于Tinder中的卡可拖动/可刷卡的方式。

我正试图通过动画animateWithDuration使用cardView.alpha = 0淡出卡片。从逻辑上讲,这也将淡出所有子视图(card个对象)。在这种特定情况下,我只定位一个card子视图。但是,在动画期间,我无法拖动/与card进行交互。

以下是我正在使用的代码:

UIView.animateWithDuration(
        duration,
        delay: 0,
        options: UIViewAnimationOptions.AllowUserInteraction,
        animations: {self.cardView.alpha = 0}
    ) {
        _ in
        println("Card faded out")
        card.removeFromSuperview()
    }

为什么这不起作用?任何帮助将不胜感激。谢谢!!

4 个答案:

答案 0 :(得分:16)

我认为你可以在this previous post中找到答案。

这篇文章的有趣内容是:

  

UIView的块动画默认阻止用户交互,要绕过它,你需要传递UIViewAnimationOptionAllowUserInteraction作为其中一个选项。

答案 1 :(得分:10)

我通过将alpha设置为0.1而不是0.0来解决此问题。我不确定这是否适用于您的情况,但它表明事件处理代码认为视图不可见,并且即使设置了UIViewAnimationOptionAllowUserInteraction标志也禁用了交互。奇怪的是,将alpha设置为0.01不起作用,因此您必须保持高于可见度的阈值。

答案 2 :(得分:3)

快捷键5

UIView.animateKeyframes(withDuration: 0.5, delay: 0, options: [.repeat, .autoreverse, .allowUserInteraction], animations: {
        self.customButton.backgroundColor = .none
    }, completion: nil)

答案 3 :(得分:1)

问题出在Alpha值0上。某个接近零的Alpha值将从视图响应器层次结构中删除该视图。此处的解决方法是对此进行alpha设置:

self.cardView.alpha = 0.011

该视图仍将不可见,但不会从响应者链中删除。根据我的测试,最低金额如下:

extension CGFloat {

    static let minAlphaForTouchInput: CGFloat = 0.010000001
}