准确地说,你知道iPhone触摸后发生了大约0.25秒的人为延迟。这是为了检查用户是否打算移动。如果在此期间增量显着移动,则会触摸touchesMoved:序列。
但是当你想在你的应用程序中实现触觉触摸行为时,你可能不希望任何延迟。它看起来很难看!你开始移动东西,0.3秒没有任何反应。然后,BANG和整个东西开始大翻转。每次开始移动的新触摸序列时都会发生这种情况。这真糟糕。当然,在某些情况下需要它,因为您可能想确定用户是否真的想要移动。但不是这样的自定义构建滑块或其他类型的触觉控制,通过跟踪触摸动作。
因此,在我发现iPhone OS故意发生这种情况之后,我想知道如何克服这个问题。我无法预测运动,因为用户可能会向左或向右移动。我在touchesBegan中不知道这个: 0.3秒就足以让应用看起来没有反应。
然而,似乎有希望:Convertbot完全没有问题。车轮在接触并移动时立即旋转。没有滞后,没有延迟。我在他们的博客中询问他们是如何做到的,但还没有回复。
我希望有一种方法可以从系统中手动触摸坐标。当touchesBegan:时,我会开始一个拉动60hz的间隔,直到touchesMoved:采取行动。
这个星球上最大的问题是:“这怎么可能”?
答案 0 :(得分:4)
如果您的响应者位于UIScrollView中,请确保将scrollView的delaysContentTouches设置为NO。这适用于UIResponder的touchesBegan:方法和UIControl的beginTrackingWithTouch:方法。
答案 1 :(得分:0)
如果您的UIView子类是UITableView或其后代之一的子视图(例如UITableView),则必须在滚动视图或表视图上将delaysContentTouches
设置为NO。这样,它会立即向您的touchesBegain:
发送第一次触摸。
但是,我认为ConvertBot根本不使用UIScrollView:它可能是一个实现旋转部件本身的自定义UIView。如果您的UI不需要滚动,那么只需将您的UIView子类放在内容视图中,您就不必设置delaysContentTouches
,因为没有滚动视图来拦截触摸事件。