- (voID)scrollVIEwWillEndDragging:(UIScrollVIEw *)scrollVIEw withVeLocity:(CGPoint)veLocity targetContentOffset:(CGPoint *)targetContentOffset { self.endingOffset = scrollVIEw.contentOffset; if(abs(verticalOffset) > [self cellHeight] / 9) { // If the user scrolled enough distance,attempt to scroll to the next cell ... } else if(self.nextCellOrigin.y != 0) { // The scroll vIEw is still scrolling and the user dIDn't drag enough ... } else { // If the user dIDn't drag enough self.tableVIEw.decelerationRate = UIScrollVIEwDecelerationRatenormal; (*targetContentOffset) = self.startingOffset; }}
恢复到原始位置的代码位于else部分,它始终有效.但是,当我不够滚动并快速做出手势时,它会快速向后移动.如果我稍微滚动一点,然后保持该位置比平时略长,它会平稳地恢复.
我没有在API参考中找到用户触摸UIScrollVIEw多长时间的任何内容,即使我这样做也不是很明显我怎么能用它来改变我的还原代码的行为.我也尝试使用setContentOffset滚动到这个位置:动画:但这似乎并没有解决这个混蛋.
有任何想法吗?
解决方法@H_301_21@ 您是否尝试记录速度以了解在出现急动时的情况?编辑:
你可以尝试做的是实现这两个scrollVIEw委托方法而不是willEndDragging方法.这个解决方案会给scrollVIEw带来不同的感觉,但试一试.
使用您需要的所有逻辑填充checkOffset方法.
- (voID)scrollVIEwDIDEndDragging:(UIScrollVIEw *)scrollVIEw willDecelerate:(BOol)decelerate { // if scrollVIEw's contentOffset reached its final position during scroll,it will not decelerate,so you need a check here too if (!decelerate) { [self checkOffset]; }} - (voID)scrollVIEwDIDEndDecelerating:(UIScrollVIEw *)scrollVIEw { [self checkOffset];}- (voID)checkOffset { CGPoint newOffset; ... // Do all the logic you need to move the content offset,then: ... [self.scrollVIEw setContentOffset:newOffset animated:YES];}
编辑#2:
如果您也将此添加到我的解决方案中,也许您可以获得更好的结果..尝试;)
- (voID)scrollVIEwWillEndDragging:(UIScrollVIEw *)scrollVIEw withVeLocity:(CGPoint)veLocity targetContentOffset:(CGPoint *)targetContentOffset { // This should force the scrollVIEw to stop its inertial deceleration,by forcing it to stop at the current content offset *targetContentOffset = scrollVIEw.contentOffset;}总结
以上是内存溢出为你收集整理的ios – UIScrollView – 恢复到没有快照的起始位置全部内容,希望文章能够帮你解决ios – UIScrollView – 恢复到没有快照的起始位置所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)