在iOS上发布时获取热点

时间:2013-08-12 17:38:11

标签: ios cocoa-touch uitouch uievent

在Mac上,可以通过调用{{1}来获取鼠标“在事件流之外”的位置(即,即使您没有订阅mouseUp:等的任何委托方法) }。

在iOS上有没有办法在不收听[NSEvent mouseLocation]的情况下获取当前触摸事件?

我问,因为至少有一种情况是没有调用touchesBegan:在应用启动时,如果触摸已在进行中,则touchesBegan永远不会被调用。事实上,任何与触摸相关的UIEvent方法都没有被称为尽可能接近(显然也不是UIApplication的/ UIWindow的touchesBegan:

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

3 个答案:

答案 0 :(得分:6)

这不可能。原因很简单:触摸事件不属于您的应用。每次触摸都属于某个UI元素(或响应者)。如您所知,此元素获取已开始,已移动,已结束,已取消的消息。

在正确编程的应用程序中甚至是这样:关于一个触摸的所有事件都被传递到同一个对象。毕竟,另一个对象如何知道如何处理该事件,以及第一个对象应如何正确完成其预期的行为?

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

在Mac上,您可以查询鼠标位置,但在正常的应用程序流程中,鼠标按下之前总会有鼠标停止。

说实话,我认为没有任何理由为什么这需要...哦等等......我可以将我的应用程序图标分成几个区域......不确定它是否已经违反隐私法,但是,如果你知道用户在屏幕上的图标在哪里。

答案 1 :(得分:0)

我认为您可以简单地“扩展”应用程序的启动。当我在应用程序启动期间耗费大量时间时,我常常在执行操作时使用UIActivityIndi​​cator显示相同的启动画面。

你可以简单地创建一个NSTimer,等待大约2秒,在此期间,检查触摸,同时闪屏仍然会显示。

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

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

希望它有所帮助。

答案 2 :(得分:-2)

您可以尝试处理hitTest:withEvent:而不是。

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

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