猿问

在UIScrollView中查找滚动方向?

在UIScrollView中查找滚动方向?

UIScrollView只允许水平滚动,我想知道用户滚动的方向(左,右)。我做的是继承UIScrollView和覆盖touchesMoved方法:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
    [super touchesMoved:touches withEvent:event];
    UITouch *touch = [touches anyObject];
    float now = [touch locationInView:self].x;
    float before = [touch previousLocationInView:self].x;
    NSLog(@"%f %f", before, now);
    if (now > before){
        right = NO;
        NSLog(@"LEFT");
    }
    else{
        right = YES;
        NSLog(@"RIGHT");
    }}

但是当我移动时,这种方法有时根本不会被调用。你怎么看?


梵蒂冈之花
浏览 769回答 3
3回答

幕布斯6054654

确定方向相当简单,但请记住,方向可以在手势过程中多次改变。例如,如果您有一个打开分页的滚动视图,并且用户滑动以转到下一页,则初始方向可能是向右的,但如果您打开了弹跳,它将暂时完全没有方向然后简单地向左走。要确定方向,您需要使用UIScrollView scrollViewDidScroll委托。在这个示例中,我创建了一个名为变量的变量lastContentOffset,用于将当前内容偏移量与前一个内容偏移量进行比较。如果它更大,则scrollView向右滚动。如果它小于那么scrollView向左滚动://&nbsp;somewhere&nbsp;in&nbsp;the&nbsp;private&nbsp;class&nbsp;extension@property&nbsp;(nonatomic,&nbsp;assign)&nbsp;CGFloat&nbsp;lastContentOffset;//&nbsp;somewhere&nbsp;in&nbsp;the&nbsp;class&nbsp;implementation-&nbsp;(void)scrollViewDidScroll:(UIScrollView&nbsp;*)scrollView&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;ScrollDirection&nbsp;scrollDirection; &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(self.lastContentOffset&nbsp;>&nbsp;scrollView.contentOffset.x)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scrollDirection&nbsp;=&nbsp;ScrollDirectionRight; &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;if&nbsp;(self.lastContentOffset&nbsp;<&nbsp;scrollView.contentOffset.x)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scrollDirection&nbsp;=&nbsp;ScrollDirectionLeft; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;self.lastContentOffset&nbsp;=&nbsp;scrollView.contentOffset.x; &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;do&nbsp;whatever&nbsp;you&nbsp;need&nbsp;to&nbsp;with&nbsp;scrollDirection&nbsp;here.&nbsp;&nbsp;&nbsp;&nbsp;}我正在使用以下枚举来定义方向。将第一个值设置为ScrollDirectionNone具有额外的好处,即在初始化变量时将该方向设置为默认值:typedef&nbsp;NS_ENUM(NSInteger,&nbsp;ScrollDirection)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;ScrollDirectionNone, &nbsp;&nbsp;&nbsp;&nbsp;ScrollDirectionRight, &nbsp;&nbsp;&nbsp;&nbsp;ScrollDirectionLeft, &nbsp;&nbsp;&nbsp;&nbsp;ScrollDirectionUp, &nbsp;&nbsp;&nbsp;&nbsp;ScrollDirectionDown, &nbsp;&nbsp;&nbsp;&nbsp;ScrollDirectionCrazy,};

缥缈止盈

...我想知道用户滚动的方向(左,右)。在这种情况下,在iOS 5及更高版本上,使用它UIScrollViewDelegate来确定用户平移手势的方向:-&nbsp;(void)scrollViewWillBeginDragging:(UIScrollView&nbsp;*)scrollView{&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;([scrollView.panGestureRecognizer&nbsp;translationInView:scrollView.superview].x&nbsp;>&nbsp;0)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;handle&nbsp;dragging&nbsp;to&nbsp;the&nbsp;right &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;handle&nbsp;dragging&nbsp;to&nbsp;the&nbsp;left &nbsp;&nbsp;&nbsp;&nbsp;}}

暮色呼如

使用scrollViewDidScroll:是查找当前方向的好方法。如果您想在用户完成滚动后知道方向,请使用以下命令:@property&nbsp;(nonatomic)&nbsp;CGFloat&nbsp;lastContentOffset;-&nbsp;(void)scrollViewWillBeginDragging:(UIScrollView&nbsp;*)scrollView&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;self.lastContentOffset&nbsp;=&nbsp;scrollView.contentOffset.x;}-&nbsp;(void)scrollViewDidEndDecelerating:(UIScrollView&nbsp;*)scrollView&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(self.lastContentOffset&nbsp;<&nbsp;scrollView.contentOffset.x)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;moved&nbsp;right &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;if&nbsp;(self.lastContentOffset&nbsp;>&nbsp;scrollView.contentOffset.x)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;moved&nbsp;left &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;didn't&nbsp;move &nbsp;&nbsp;&nbsp;&nbsp;}}
随时随地看视频慕课网APP
我要回答