如何在iOS中结束拖动事件之前检测滚动以进行更新?

时间:2016-10-23 17:09:39

标签: ios objective-c gestures

我想在iOS应用程序的某些视图中添加更新手势 通常这个手势在顶部滚动并保持一段时间

如果用户确实持有滚动视图的时间超过1秒,我可以使用手势处理程序:

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
    if (scrollView == _tableView) {
        _scrollViewDragStarted = [NSDate date];
    }
}

- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset {
    if (scrollView == _tableView) {
        if (velocity.y < 0 && targetContentOffset->y < 0) {
            NSTimeInterval hold = [[NSDate date] timeIntervalSinceDate:_scrollViewDragStarted];
            if (hold > 1) {
                // refreshing method calls here
            }
        }
        _scrollViewDragStarted = nil;
    }
}

它完美无缺,但当用户在顶部

上滚动视图时需要提示保持

如何检测此类滚动? scrollViewWillBeginDragging:事件没有scrollViewWillEndDragging:withVelocity:targetContentOffset:

的滚动参数

或者可能存在另一种实现方式?

3 个答案:

答案 0 :(得分:2)

尝试使用scrollViewDidScroll(_:)https://developer.apple.com/reference/uikit/uiscrollviewdelegate/1619392-scrollviewdidscroll

请注意,您可以使用UIScrollView.contentOffset.y < 0检查它是否已滚动到顶部之上。

答案 1 :(得分:0)

  

1)   您可以使用refreshcontrol并按您希望的方式对其进行自定义。建议使用它作为其核心API,并为您提供有趣的动画。加上这是通用的,并在任何地方使用,所以用户已经知道如何使用比较你的滚动和持有一秒钟的手势。

     

- (void)viewDidLoad {
  ...
     UIRefreshControl * refreshControl = [[UIRefreshControl alloc] init];
     [refreshControl addTarget:self action:@selector(handleRefresh :) forControlEvents:UIControlEventValueChanged];

     [self.myTableView addSubview:refreshControl];
  ...
  }

     

- (void)handleRefresh:(id)sender {       //在这里刷新...}

答案 2 :(得分:0)

您可以将KVO用于contentffset参数

这是我的一个Github存储库

UIScrollView-XYPlusingRefresh

如果你想要xiaoyulevin@gmail.com

,请联系我