2011-11-09 26 views
0

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

伟大的,除了如果用户的手指仍然在游戏块上,用户可能会意外地将该块拖回目标区域。 “游戏结束”正在显示,但该作品已不在正确的位置。

有没有办法强制touchesEnded(而不是检测touchesEnded),以便当棋子在其最终目的地时(即,使得用户不会意外地拉动它不合适)?

userInteractionEnabled = NO似乎不会生效,直到触摸被释放。

回答

0

我不知道强制touchesEnded的方法。

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

你可能会尝试beginIgnoringInteractionEvents,但我怀疑这会做你正在寻找的东西。我真的认为,在你的应用程序中管理状态,以确保你能做正确的事情,而不是在达到最终状态时移动该部分,这是要走的路。

从苹果公司的事件处理指南适用于iOS:

关闭触摸事件的交付期限。一个应用程序可以调用UIApplication方法beginIgnoringInteractionEvents和后来的 调用endIgnoringInteractionEvents方法。第一种方法阻止应用程序完全接收触摸事件;调用第二个方法 以恢复收到此类事件。您有时想在您的代码执行 动画时关闭事件传递。

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]; 
}); 
} 

这工作完美!