如何禁用手动对角线滚动WHILE启用对角线setContentOffset滚动动画

时间:2014-10-24 10:15:30

标签: ios objective-c cocoa-touch uiscrollview uikit

我正在使用集合视图。 虽然directionLockEnabled可以设置为YES,但仍然可以启用对角线滚动。

所以我在某个地方找到了解决方案:

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView  {
    self.offset = self.collectionView.contentOffset;
}

// control scroll to only horizontal & vertical
- (void)scrollViewDidScroll:(UIScrollView *)scrollView  {
    CGFloat deltaX = ABS(self.offset.x - self.collectionView.contentOffset.x);
    CGFloat deltaY = ABS(self.offset.y - self.collectionView.contentOffset.y);
    if (deltaX != 0 && deltaY != 0) {
        if (deltaX >= deltaY) {
            self.collectionView.contentOffset = CGPointMake(self.collectionView.contentOffset.x, self.offset.y);
        }
        else    {
            self.collectionView.contentOffset = CGPointMake(self.offset.x, self.collectionView.contentOffset.y);
        }
    }
}

然而副作用是当我用x,y>调用时0

[self.collectionView setContentOffset:CGPointMake(x, y) animated:animated];

由于上面的代码块,它根本不滚动。

如何处理?

3 个答案:

答案 0 :(得分:1)

在Swift中禁用手动对角线滚动:

df["`A.p1`"] + df["`B.p1`"]

答案 1 :(得分:0)

好的我搞清楚了...... scrollView.dragging可以区分手动滚动或自动滚动...

答案 2 :(得分:0)

你可以做

collectionView.isScrollEnabled = false

它将禁止用户滚动,但是您可以使用来以编程方式滚动

collectionView.scrollToItem(at:at:animated:)