我正在努力弄清楚如何允许用户与视图进行动画制作。
情况如下:我有一个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()
}
为什么这不起作用?任何帮助将不胜感激。谢谢!!
答案 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
}