UIScrollView委托方法scrollViewWillEndDragging:不工作?

时间:2013-10-08 03:13:56

标签: ios objective-c uiscrollview

我正在尝试使用scrollViewWillEndDragging:方法来滚动我自己的分页UICollectionView,其中任意一侧的预览类似于App Store应用。但是,使用滚动视图下方的代码只会滚动到所需的矩形,如果我停止拖动没有惯性(即只是抬起我的手指)。如果我用任何惯性量轻弹,方法仍会被调用但滚动视图滚动所需的矩形,它只是一直滚动?

- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView
                     withVelocity:(CGPoint)velocity
              targetContentOffset:(inout CGPoint *)targetContentOffset
{
    int itemWidth = 280;

    MyCollectionView *collectionView = (MyIndexedCollectionView *) scrollView;

    int totalPages = [self.colorArray[collectionView.index] count];
    int currentPage;
    int nextPage;

    if (lastContentOffset < (int)scrollView.contentOffset.x)
    {
        // moved right
        NSLog(@"scrolling right");
        double currentPageOffset = ceil((scrollView.contentSize.width - 
                                                 scrollView.contentOffset.x) / itemWidth);
        currentPage = totalPages - currentPageOffset;
        nextPage = currentPage >= totalPages ? totalPages : currentPage + 1;
    }
    else if (lastContentOffset > (int)scrollView.contentOffset.x)
    {
        // moved left
        NSLog(@"scrolling left");
        double currentPageOffset = floor((scrollView.contentSize.width - 
                                              scrollView.contentOffset.x) / itemWidth);
        currentPage = totalPages - currentPageOffset;
        nextPage = currentPage <= 0 ? 0 : currentPage - 1;
    }

    int xOffset = (nextPage * itemWidth);
    int nextOffsetPage = (totalPages - ((scrollView.contentSize.width - xOffset) /
                                                                       itemWidth)) + 1;

    [scrollView scrollRectToVisible:CGRectMake(xOffset,
                                           0,
                                           collectionView.bounds.size.width,
                                           collectionView.bounds.size.height)
                                           animated:YES];
}

在放弃这个方法后,我尝试使用scrollViewWillBeginDecelerating:方法,而完全相同的代码完美无缺?我之所以要使用scrollViewWillEndDragging:方法,原因有两个:

  • 我想根据滚动的速度调整它跳转到的项目
  • 如果您在没有任何惯性的情况下抬起手指停止拖动,scrollViewWillBeginDecelerating:方法会被调用。

任何想法,我是否误解了这回调的作用?

1 个答案:

答案 0 :(得分:1)

DOH !!事实证明我应该使用targetContentOffset来设置我想要滚动的偏移而不是scrollToRectToVisible: ala:

*targetContentOffset = CGPointMake(myTargetOffset, targetContentOffset->y);

RTFM:)