到目前为止无法在网上找到令人满意的解决方案(似乎是苹果忽略了这个问题)。在 Apple 的开发者论坛上找到了一个帖子,里面有一些可能会有所帮助的建议:UIScrollView: 'delaysContentTouches' ignored
我能够使用此链接中的解决方法。总结解决方法(我在这里引用):
UIEvent 对象包含一个时间戳。
您可以在您的嵌入式子视图上记录 touchesBegan 时的时间戳
。
在scrollView的子视图的touchesMoved中,再次查看时间戳和位置。
如果触摸没有移动很远并且超过 0.1 秒,您可以假设用户触摸了子视图,然后延迟了移动。
在这种情况下, UIScrollView 将独立地决定这不是滚动动作,即使它永远不会告诉你。
因此,您可以使用本地状态变量来标记发生了这种延迟移动的情况并处理子视图接收到的事件。
这是我的代码:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
// store the timestamp
_beginDragTimeStamp = event.timestamp;
// your embedded subview's touches begin code
}
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
// compare and ignore drag if time passed between tap and drag is less than 0.5s
if(event.timestamp - _beginDragTimeStamp < 0.5) return;
// your drag code
}