Uitableview 在ScrollViewWillend中更新targetContentOffset拖动到错误方向的值不会产生动画效果

Uitableview 在ScrollViewWillend中更新targetContentOffset拖动到错误方向的值不会产生动画效果,uitableview,cocoa-touch,uiscrollview,uiscrollviewdelegate,Uitableview,Cocoa Touch,Uiscrollview,Uiscrollviewdelegate,我正在ScrollView的targetContentOffset中设置一个新值以在UITableView中创建自定义分页解决方案。当为targetContentOffset设置与速度指向的滚动方向相同的坐标时,它会正常工作 但是,当以与速度相反的方向“向后”捕捉时,它会立即在没有动画的情况下“向后捕捉”。这看起来很糟糕。有没有关于如何解决这个问题的想法 func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity

我正在
ScrollView的
targetContentOffset
中设置一个新值以在
UITableView
中创建自定义分页解决方案。当为
targetContentOffset
设置与速度指向的滚动方向相同的坐标时,它会正常工作

但是,当以与速度相反的方向“向后”捕捉时,它会立即在没有动画的情况下“向后捕捉”。这看起来很糟糕。有没有关于如何解决这个问题的想法

func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
    // a lot of caluculations to detemine where to "snap scroll" to
    if shouldSnapScrollUpFromSpeed || shouldSnapScrollUpFromDistance {
        targetContentOffset.pointee.y = -scrollView.frame.height
    } else if shouldSnapScrollDownFromSpeed || shouldSnapScrollDownFromDistance {
        targetContentOffset.pointee.y = -detailViewHeaderHeight
    }
}
func-scrollViewWillendDraging(scrollView:UIScrollView,withVelocity:CGPoint,targetContentOffset:UnsafemeutablePointer){
//要确定“捕捉滚动”的位置,需要进行大量计算
如果从速度开始向上滚动,则从距离开始向上滚动{
targetContentOffset.pointee.y=-scrollView.frame.height
}否则,如果应从速度向下滚动,则应从距离向下滚动{
targetContentOffset.pointee.y=-detailViewHeaderHeight
}
}
我可以潜在地计算这个“bug”何时会出现,也许可以使用另一种“快照滚动”方式。关于如何执行此操作或正常使用
targetContentOffset.pointee.y
解决此问题,有何建议

我找到了一个好的解决方案(或变通方法)。如果有更好的解决方案,请告诉我

我刚刚检测到不需要的“非动画捕捉滚动”何时会出现,然后我没有将新值设置为
targetContentOffset.pointee.y
而是将其设置为当前偏移值(停止),并使用ScrollView
setContentOffset(uquo:animated:)
设置所需的偏移目标值

if willSnapScrollBackWithoutAnimation {
    targetContentOffset.pointee.y = -scrollView.frame.height+yOffset //Stop the scrolling
    shouldSetTargetYOffsetDirectly = false
}

if let newTargetYOffset = newTargetYOffset {
    if shouldSetTargetYOffsetDirectly {
        targetContentOffset.pointee.y = newTargetYOffset
    } else {
        var newContentOffset = scrollView.contentOffset
        newContentOffset.y = newTargetYOffset
        scrollView.setContentOffset(newContentOffset, animated: true)
    }
}

如何检测不带动画的WillSnapBack
?当滚动在可捕捉间隔内(滚动的yOffset)且速度低于所需值(使用1.0)时,WillSnapBackWithout Animation设置为true速度不是0。@Sunkas为什么不在没有动画的情况下发布willsnapscrollback的实际代码,而不是解释它呢?你问题的标题本身拯救了我的一天。非常感谢你。我无法确定动画在什么情况下会中断。在我的例子中,我将通过始终自动滚动到“正确”方向来修复它。再次感谢!