Ios 如何使动画和手势识别器协同工作?(Swift)

Ios 如何使动画和手势识别器协同工作?(Swift),ios,swift,animation,uigesturerecognizer,Ios,Swift,Animation,Uigesturerecognizer,我做了一个简单的项目,包括滑动手势识别器和动画。我让我的标签移动,每3秒钟增加一次。每次刷卡我都需要减少次数。我的手势识别器对象与标签绑定,即它仅在标签边界内工作。当prog在没有动画的情况下工作时,一切正常,但当它工作时;我的手势识别器什么也没做。如何使手势识别器与动画同时工作,即在设置动画以响应我的滑动时。我需要帮助 ` 默认情况下,当动画处于“飞行”状态时,视图对象会阻止用户交互。您需要使用一种“长格式”动画方法,并传入选项.allowUserInteraction。大概是这样的: UIV

我做了一个简单的项目,包括滑动手势识别器和动画。我让我的标签移动,每3秒钟增加一次。每次刷卡我都需要减少次数。我的手势识别器对象与标签绑定,即它仅在标签边界内工作。当prog在没有动画的情况下工作时,一切正常,但当它工作时;我的手势识别器什么也没做。如何使手势识别器与动画同时工作,即在设置动画以响应我的滑动时。我需要帮助

`


默认情况下,当动画处于“飞行”状态时,视图对象会阻止用户交互。您需要使用一种“长格式”动画方法,并传入选项
.allowUserInteraction
。大概是这样的:

UIView.animate(duration: 0.5,
  delay: 0.0,
  options: .allowUserInteraction,
  animations: {
    myView.alpha = 0.5
  })
但是,请注意,如果正在设置视图位置的动画,则用户将无法在视图对象移动时点击它。这是因为位置动画并不会随着时间的推移将对象从一个位置移动到另一个位置。它只是创造了这种外观。在场景后面,当动画开始时,对象实际上会跳到其最终位置

如果您需要能够在对象移动时点击/拖动/滑动对象,您必须自己完成。您要做的是在父视图上放置一个手势识别器,该父视图包含整个运动范围(可能是整个屏幕)。然后您需要使用动画视图层的表示层,将点的坐标从手势识别器的坐标空间转换到层的坐标空间,并使用图层的hitTest方法确定该点是否位于图层上

我在Github上有一个名为的项目,它做了类似的事情(它沿着复杂的路径设置图像视图的动画,你可以点击图像视图在动画“飞行”时暂停动画)


这是几年前写的,所以它是用Objective-C写的,但它至少有助于说明这项技术。

是的,我需要在移动的对象上滑动,至少这是目标。后来应该有更多的移动对象,我需要滑动它们。如果需要,我需要能够随时与该对象交互有可能。你的答案有点帮助,现在我可以在下一步开始之前在动画结束时进行交互,但仍然不完全是我需要看到对我答案的编辑。我添加了一个指向处理视图点击的项目的链接。这将更有助于显示一些代码。在这里,添加了代码(第一次在viewDidLoad中调用animate1 func)使用UIViewPropertyAnimator。它会自动为您执行此操作(使动画视图可点击,甚至允许您拖动动画视图并在需要时中断动画)。
UIView.animate(duration: 0.5,
  delay: 0.0,
  options: .allowUserInteraction,
  animations: {
    myView.alpha = 0.5
  })