当使用UISnapBehavior将视图重置到屏幕中心时,我得到了预期的反弹效果。但是在滚动UIScrollView之后,UIScrollView是被捕捉的视图的子视图,UISnapBehavior阻尼似乎有不同的基础计算。
我的快照行为是这样创建的:
guard let recognizerView = recognizer.view else { return }
let snapBehavior = UISnapBehavior(item: recognizer.view.superview!, snapTo: CGPoint(x: recognizerView.superview!.frame.width / 2, y: recognizerView.superview!.frame.height / 2))
snapBehavior.damping = 0.1
animator.addBehavior(snapBehavior)
在与作为RecognizerView的子视图的scrollview交互之前,snapBehavior呈现出非常夸张的反弹效果(这是期望和预期的行为),但在与scrollview交互之后,第二次触发snapBehavior效果要快得多(尽管使用完全相同的阻尼常数,但阻尼较小。
我认为这与一些自动布局错误有关,因为滚动视图定位为自动布局,其内容大小是通过自动布局约束动态计算的。
有趣的是,删除滚动视图会导致动态动画再次正常衰减。