(iphone)我可以让UIScrollView识别水平拖动吗?

时间:2011-02-15 11:25:05

标签: iphone uiscrollview touch

我正在使用UIScrollView的取消触摸功能和canCancelContentTouches。

但是,我希望uiscrollview在检测到水平拖动(非垂直)时尝试取消触摸。

(希望解决方案将在< iOS 3.13下提供)

谢谢

3 个答案:

答案 0 :(得分:4)

实施UIScrollViewDelegate,然后使用以下内容:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    [scrollView setContentOffset: CGPointMake(0, scrollView.contentOffset.y)];
}

另一种方法是使UIScrollView小于或等于其父视图的大小,并禁用“始终弹跳水平”。

答案 1 :(得分:1)

我发现限制滚动视图移动的最安全和最成功的方法是子类 UIScrollView 并覆盖 setContentOffset:animated: setContentOffset :方法(下面的代码)。

重写这些方法的优点是它可以在任何UIKit代码开始对其执行操作之前直接更改所请求的 contentOffset ,从而避免在修改contentOffset时可能发生的任何副作用 scrollViewDidScroll:或其他 UIScrollViewDelegate 方法。

- (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated {
    // restrict movement to horizontal only
    CGPoint newOffset = CGPointMake(contentOffset.x, 0);
    [super setContentOffset:newOffset animated:animated];
}

- (void)setContentOffset:(CGPoint)contentOffset {
    // restrict movement to horizontal only
    CGPoint newOffset = CGPointMake(contentOffset.x, 0);
    [super setContentOffset:newOffset];    
}

答案 2 :(得分:0)

我想我会使用方法 scrollViewWillBeginDragging 在UIScrollViewDelegate中找到 在内部我可以控制用户是否正在横向移动......

scrollViewWillBeginDragging:

当滚动视图即将开始滚动内容时告诉委托。

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView

参数

<强>滚动视图

即将滚动内容视图的滚动视图对象。

<强>讨论

在稍微拖动之前,代理可能不会收到此消息。

<强>状况 适用于iOS 2.0及更高版本。