0

用户将游戏块(第 i 个图像视图)拖到其目标位置。程序计数,看到所有项目都在正确的位置,宣布“游戏结束”并设置userInteractionEnabled为否。

很好,除了如果用户的手指仍然在游戏棋子上,用户可能会不小心将棋子拖出目标区域。“游戏结束”正在显示,但该作品不再位于正确的位置。

有没有办法强制touchesEnded(不检测touchesEnded),以便在棋子到达最终目的地时(有效地)中断与游戏棋子的接触(即,这样用户就不会意外将其拉出位置)?

userInteractionEnabled = NO似乎直到触摸被释放后才生效。

4

2 回答 2

0

我不知道强制touchesEnded的方法。

显然,处理这种情况的一种方法是让您的应用程序保持表示游戏结束的状态,并防止在该状态下移动任何游戏块。

您可以尝试 beginIgnoringInteractionEvents,但我怀疑这会满足您的要求。我真的认为在您的应用程序中管理状态以确保您将做正确的事情,而不是在达到最终状态后移动部件,这是要走的路。

来自 Apple 的 iOS 事件处理指南:

在一段时间内关闭触摸事件的传递。应用程序可以调用 UIApplication 方法 beginIgnoringInteractionEvents,然后再调用 endIgnoringInteractionEvents 方法。第一种方法完全停止应用程序接收触摸事件;调用第二种方法来恢复接收此类事件。您有时希望在代码执行动画时关闭事件传递。

于 2011-11-09T04:24:19.317 回答
0

我想在自己的应用程序中执行非常类似的操作后发现了这个问题。我希望touchesEnded:在单击移动动作后立即运行该方法(如touchDown动作方法),但不知道如何实现。最后,这就是我所做的,并且成功了!:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
...

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

  [self touchesEnded:touches withEvent:event];
 });
}

这非常有效!

于 2015-06-16T07:33:49.533 回答