Ios 检测用户何时中断UIScrollView动画
我有一个水平滚动uiscrollview的应用程序,它并排显示3个子视图。我使用的是Objective C 当用户拖动并释放时,代码会检测最近的子视图,并自动滚动到3个子视图中最近的子视图,使其完全居中 这一切都很好,除了Ios 检测用户何时中断UIScrollView动画,ios,objective-c,xcode,uiscrollview,Ios,Objective C,Xcode,Uiscrollview,我有一个水平滚动uiscrollview的应用程序,它并排显示3个子视图。我使用的是Objective C 当用户拖动并释放时,代码会检测最近的子视图,并自动滚动到3个子视图中最近的子视图,使其完全居中 这一切都很好,除了 当scrollview为自动居中移动设置动画时,用户只需点击(而不是拖动)即可中断 单击此按钮将停止动画和滚动视图,使其不在3个子视图的任何一个子视图上居中 我发现没有代理方法可以检测动画何时中断,然后继续居中 如何执行此操作?当您使用setContentOffset:a
- 当scrollview为自动居中移动设置动画时,用户只需点击(而不是拖动)即可中断
- 单击此按钮将停止动画和滚动视图,使其不在3个子视图的任何一个子视图上居中
- 我发现没有代理方法可以检测动画何时中断,然后继续居中
如何执行此操作?当您使用
setContentOffset:animated:
或scrollToRectVisible:animated:
启动滚动动画时,其结束将由UIScrollViewDelegate
方法ScrollViewDiEndScrollingAnimation:
标记。如果在调用另一个委托方法之前,例如ScrollViewWillBeginDraging:
或ScrollViewDiEndDecreating:
-这意味着用户通过拖动(或轻触)中断了动画
您要做的是在用户停止拖动时重新启动动画-在ScrollViewDiEndDraging:WillDecreate:
或ScrollViewDiEndDecreating:
再次感谢mag_zbc
这确实帮助我找到了解决办法
我将动画过度复杂化,在用户完成拖动后以及动画完成时检查当前位置
为了解决这个问题,我只检查了ScrollViewDiEndDecreating:
中的当前偏移量:
-如果最终偏移是三个正确位置之一(自动偏移不间断完成),则不执行任何操作
-如果偏移不是正确的位置之一(动画被中断),则再次移动。也许您可以检测到轻触,或者当触摸结束时,然后重新启动定心动画?谢谢Picciano。检测水龙头的最佳方法是什么?它会干扰子视图的用户交互吗?谢谢mag_zbc!问题是,
ScrollViewWillBeginDraging:
不会只点击一下就跳闸。它仅通过拖动动作触发。