我正在努力弄清楚如何允许用户与视图进行交互,因为它正在被动画化。
这是情况:我有一个UIView cardView
,它持有card
子视图。 card
s是可拖动的瓷砖,类似于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()
}
为什么这不起作用?任何帮助将不胜感激。谢谢!!
我通过将alpha设置为0.1而不是0.0来解决此问题。我不确定这是否适用于您的情况,但它表明事件处理代码认为视图不可见,并且即使设置了UIViewAnimationOptionAllowUserInteraction标志也禁用了交互。奇怪的是,将alpha设置为0.01无效,因此您必须保持高于可见度的阈值。
我想你可以在this previous post找到答案。
这篇文章的有趣内容是:
UIView的块动画默认阻止用户交互,要解决它,你需要传递UIViewAnimationOptionAllowUserInteraction作为选项之一。
问题是Alpha值为0.某个接近零的Alpha值将从视图响应器层次结构中删除视图。这里的解决方法是将alpha设置为:
self.cardView.alpha = 0.011
该视图仍然是不可见的,但不会从响应者链中删除。根据我的测试,最低金额如下:
extension CGFloat {
static let minAlphaForTouchInput: CGFloat = 0.010000001
}