tuz*_*ron 5 uiscrollview uikit ios
我有一个 UIScrollView,它的高度约为 600 像素,宽度约为 320。所以我允许用户垂直滚动。
我也在尝试捕获视图上的水平滑动。问题似乎是,当用户在水平方向滑动时意外垂直移动时,UIScrollView 滚动并且我的 touchesEnded 委托方法永远不会被调用。
这是我的代码:
- (void)touchesEnded: (NSSet *)touches withEvent: (UIEvent *)event
{
UITouch *touch = [touches anyObject];
CGPoint currentPosition = [touch locationInView:self];
if (currentPosition.x + 35 < gestureStartPoint.x)
{
NSLog(@"Right");
}
else if (currentPosition.x - 35 > gestureStartPoint.x)
{
NSLog(@"Left");
}
else if (!self.dragging)
{
[self.nextResponder touchesEnded: touches withEvent:event];
}
[super touchesEnded: touches withEvent: event];
}
Run Code Online (Sandbox Code Playgroud)
有谁知道即使涉及垂直阻力,我如何才能使其工作?
UIScrollView尝试根据触摸开始后的移动来确定哪些触摸要传递到其内容,哪些是滚动。基本上,如果触摸立即显示为滚动,它会处理该手势并且内容永远不会看到它;否则,手势会通过(第一次触摸的延迟非常短)。
根据我的经验,我已经能够在UIScrollView处理仅垂直滚动的内容中捕获水平滑动——它基本上只是默认为我工作。我通过将 设置contentSize为与滚动视图的宽度相同来做到这一点frame,这是足够的信息来告诉UIScrollView它不会处理水平滚动。
不过,听起来您在使用默认行为时遇到了问题。一个硬件问题是很难在笔记本电脑的触控板上模拟手指滑动。如果我是你,我会UIScrollView使用鼠标或最好在设备本身上测试默认设置。我发现这些输入法在传达滑动方面效果更好。
如果这不起作用,这里是 AppleUIScrollView文档中非常相关的一段:
因为滚动视图没有滚动条,所以它必须知道触摸是表示滚动意图还是跟踪内容中的子视图的意图。为了做出这个决定,它通过启动一个计时器来临时拦截一个触地事件,并在计时器触发之前查看触摸手指是否有任何移动。如果时间触发时位置没有显着变化,滚动视图将跟踪事件发送到内容视图的触摸子视图。如果用户在计时器结束之前将他们的手指拖得足够远,滚动视图将取消子视图中的任何跟踪并自行执行滚动。子类可以覆盖touchesShouldBegin:withEvent:inContentView:、pagingEnabled和touchesShouldCancelInContentView: 方法(由滚动视图调用)来影响滚动视图如何处理滚动手势。
总之,您可以通过子类化UIScrollView和覆盖建议的方法来尝试他们的建议。
| 归档时间: |
|
| 查看次数: |
10423 次 |
| 最近记录: |