8

在 Mac 上,总是可以mouseUp:通过调用[NSEvent mouseLocation].

iOS上有什么方法可以在不听的情况下获取当前的触摸事件touchesBegan:

我问是因为至少有一种情况下不调用 touchesBegan:在应用程序启动时,如果触摸已经在进行中,则从不调用 touchesBegan。事实上,我所知道的任何与触摸相关的 UIEvent 方法都没有被调用(sendEvent:显然 UIApplication 的 / UIWindow 的方法也没有)。

我想根据启动时是否正在进行触摸来稍微改变我的应用程序的行为。 有没有办法在应用启动时检测到正在进行的触摸

4

3 回答 3

6

这是无法做到的。原因很简单:触摸事件不属于您的应用程序。每个触摸都属于某个 UI 元素(或响应者)。如您所知,此元素获取开始、移动、结束和取消的消息。

在经过适当编程的应用程序中也是如此:与一次触摸有关的所有事件都传递给同一个对象。毕竟,另一个对象如何知道如何处理该事件,以及第一个对象应如何正确完成其预期行为?

虽然您可以(或可以,但可能不应该)在您的应用程序中找到解决方法,但跨应用程序触摸传递是没有办法的。

在 Mac 上,您可以查询鼠标位置,但在正常的应用程序流程中,在您获得鼠标向上事件之前总会有鼠标向下。

老实说,我看不出有什么理由需要这样做...哦等等...我可以将我的应用程序图标分成几个区域...不确定它是否已经违反隐私法,但是,如果你会知道用户在屏幕上的哪个位置有他的图标。

于 2013-08-20T16:14:26.917 回答
0

我认为您可以简单地“扩展”应用程序启动。当我在应用程序启动期间遇到耗时的任务时,我曾经在执行操作时使用 UIActivityIndi​​cator 显示相同的启动屏幕。

您可以简单地创建一个 NSTimer,等待大约 2 秒,在此期间检查是否有触摸,而启动画面仍会显示。

为此,在 applicationDidFinishLaunch 中,推送一个看起来与初始屏幕完全相同的 ViewController 并检查此 ViewController 中的触摸。2 秒后,继续进行正常初始化。如果您在初始化期间有耗时的任务,此行为也会有所帮助。

我知道,这是一种解决方法,但我的猜测是,无法检查触摸,因为应用程序将在主线程上工作,而触摸也在主线程上处理。这也可能发生,因为没有初始化 ViewController 或 UIWindow 并准备好监听触摸。

希望能帮助到你。

于 2013-08-12T18:47:54.777 回答
-2

您可以尝试处理 hitTest:withEvent: 代替。

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event; 

因为根据苹果文档“返回包含指定点的视图层次结构(包括自身)中接收器的最远后代。”

于 2013-08-16T02:49:17.890 回答