如何在视图动画时识别轻拍手势

10
只是想知道在动画过程中是否有办法让视图识别点击手势?我正在开发一个视图,其中有一个与之相连的cashapelayer线条。当用户移动视图(平移手势)时,线条会相应地跟随,直到用户停止移动。此时执行动画,将视图和绑定层带回原始位置。现在我的唯一问题是,在视图和绑定层动画时,视图不响应点击手势... 有人知道一些技巧吗?希望我的解释清楚,并提前感谢!(如果绑定视图概念不清楚,有一个名为discovr apps的免费应用程序可以提供示例)。

1
更新:为了澄清,视图的原始边界矩形确实识别触摸手势,但不识别移动视图的触摸手势,换句话说,就是当前的框架。 - johnnyd
你需要检查这个答案:https://dev59.com/Q1LTa4cB1Zd3GeqPY0ai#4432546 - Jonny
以上链接中的解决方案可能适用于原始触摸处理,但可能无法处理手势。请参考此解决方法以处理手势:https://dev59.com/gF3Va4cB1Zd3GeqPENRs - Matti Jokipii
这里有一个答案可能适合你。 - JaredH
3个回答

15

我假设你正在使用[UIView animateWithDuration: delay: options: animations: completion:];方法进行动画处理。

如果是这样,你需要将UIViewAnimationOptionAllowUserInteraction作为选项传递,以使动画视图在动画过程中响应触摸事件。


1
谢谢你的回答,但我已经在做那个了。似乎手势被识别了,但只在视图的原始矩形中,而不是在立即移动的视图中...我会更新我的问题,以便更清楚。 - johnnyd

6
(Swift 3)传递.allowUserInteraction选项
UIView.animate(withDuration: 0.75, delay: 0.0, options: [.allowUserInteraction], animations: {
      // Desired animation(s) 
}, completion: { (finished: Bool) in
        // Completion
})

3

你需要设置两个选项 - UIViewAnimationOptionAllowUserInteractionUIViewAnimationOptionAllowAnimatedContent。第一个选项允许在动画期间与视图交互,第二个选项强制在每帧动画中重新绘制视图,而不使用开始和结束帧的快照。


我尝试了你的建议,但还是不行。:( 我可能会尝试这种方法:user-interaction-disabled,因为这让我疯狂! :) - johnnyd
嗯,你可以尝试将手势识别器添加到动画视图的父视图中,然后使用 hitTest: 检查是否在动画视图内部进行了轻拍。 - Kyr Dunenkoff
之前尝试过这个方法,为了再试一次而又尝试了一遍,但仍然不起作用...我就是不明白...不过还是谢谢你的建议! - johnnyd
一个选项组合:[.allowUserInteraction, .allowAnimatedContent] 对我来说很有效,谢谢! - Zaur_M

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接