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

问题描述 投票:15回答:3

我正在努力弄清楚如何允许用户与视图进行交互,因为它正在被动画化。

这是情况:我有一个UIView cardView,它持有card子视图。 cards是可拖动的瓷砖,类似于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()
    }

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

ios animation uiview swift
3个回答
10
投票

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


16
投票

我想你可以在this previous post找到答案。

这篇文章的有趣内容是:

UIView的块动画默认阻止用户交互,要解决它,你需要传递UIViewAnimationOptionAllowUserInteraction作为选项之一。


1
投票

问题是Alpha值为0.某个接近零的Alpha值将从视图响应器层次结构中删除视图。这里的解决方法是将alpha设置为:

self.cardView.alpha = 0.011

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

extension CGFloat {

    static let minAlphaForTouchInput: CGFloat = 0.010000001
}
© www.soinside.com 2019 - 2024. All rights reserved.