在 UIView 动画期间难以允许用户交互
Posted
技术标签:
【中文标题】在 UIView 动画期间难以允许用户交互【英文标题】:Difficulty allowing user interaction during UIView animation 【发布时间】:2014-08-24 23:01:40 【问题描述】:我正在努力弄清楚如何在视图动画化时允许用户与它进行交互。
情况如下:我有一个 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()
为什么这不起作用?任何帮助将不胜感激。谢谢!!
【问题讨论】:
此代码是我的视图控制器中函数的一部分 -duration
已参数化。另外,我使用的是尾随闭包,而不是直接提供 completion
命令。很抱歉,如果这些事情中的任何一个引起了混乱。
【参考方案1】:
我想你可以在this previous post找到答案。
这篇文章的有趣之处在于:
默认情况下,UIView 的块动画会阻止用户交互,要绕过它,您需要将 UIViewAnimationOptionAllowUserInteraction 作为选项之一传递。
【讨论】:
感谢您的洞察,但请查看我的代码:我已经将其作为选项之一提供。 对于 swift 5...选项:[.allowUserInteraction],动画: ...【参考方案2】:我通过将 alpha 设置为 0.1 而不是 0.0 来解决此问题。我不确定这是否适用于您的情况,但它表明事件处理代码认为视图不可见并且即使设置了 UIViewAnimationOptionAllowUserInteraction 标志也禁用交互。奇怪的是,将 alpha 设置为 0.01 不起作用,因此您必须保持在一个可见度阈值以上。
【讨论】:
这对我也有帮助。在动画块中将 alpha 设置为 0.1,在完成块中将 alpha 设置为 0.0 确实有效。【参考方案3】:斯威夫特 5
UIView.animateKeyframes(withDuration: 0.5, delay: 0, options: [.repeat, .autoreverse, .allowUserInteraction], animations:
self.customButton.backgroundColor = .none
, completion: nil)
【讨论】:
这就是答案。特别是.allowUserinteraction
【参考方案4】:
问题在于 Alpha 值 0。接近零的 Alpha 值会将视图从视图响应器层次结构中移除。此处的解决方法是将 alpha 设置为:
self.cardView.alpha = 0.011
视图仍然不可见,但不会从响应者链中删除。根据我的测试,最低金额如下:
extension CGFloat
static let minAlphaForTouchInput: CGFloat = 0.010000001
【讨论】:
以上是关于在 UIView 动画期间难以允许用户交互的主要内容,如果未能解决你的问题,请参考以下文章
在 UIView.animateWithDuration() 期间启用手势识别器的用户交互