iPhone-获取用户交互事件和自动注销

iPhone-获取用户交互事件和自动注销,iphone,objective-c,cocoa-touch,Iphone,Objective C,Cocoa Touch,在我的iPhone应用程序中,如果在大约2分钟内没有任何事情发生(例如,用户放下手机),我想注销用户。有人有这样的问题吗?实现此功能的最佳方式是什么?我想我将上一个事件的日期保存到NSUserDefaults,然后在下一个事件中首先检查当前日期。如果差异大于2分钟,则转到登录屏幕,否则刷新存储的日期。但是一般来说,我怎样才能获得触摸事件呢 谢谢,madik在UIApplicationLegate中有一个方法: - (void)applicationWillResignActive:(UIAppl

在我的iPhone应用程序中,如果在大约2分钟内没有任何事情发生(例如,用户放下手机),我想注销用户。有人有这样的问题吗?实现此功能的最佳方式是什么?我想我将上一个事件的日期保存到NSUserDefaults,然后在下一个事件中首先检查当前日期。如果差异大于2分钟,则转到登录屏幕,否则刷新存储的日期。但是一般来说,我怎样才能获得触摸事件呢

谢谢,madik

UIApplicationLegate
中有一个方法:

- (void)applicationWillResignActive:(UIApplication *)application
{
/*
 Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
 Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
 */
}
请注意,当应用程序进入后台状态时,它也将被调用。这将帮助您在应用程序处于非活动状态时存储数据。如果要检查是否经过了一定的时间,则必须使用
NSTimer
并存储上次触摸事件。我认为这是不可能的,因为你不能截获所有的触摸事件(可能是在系统管理的对象上。状态栏就是一个例子)。我想最好让系统管理所有的活动/非活动内容,并在必要时存储数据

编辑:第一次我不明白你的意思。检查这个,它可以完成你需要的。基本上,您必须子类化
UIApplication
并重写
sendEvent
方法。

'NSTimer'

当你说“我通常如何获取触摸事件?”,如果你的意思是如何判断用户是否空闲,那么你必须设置一些系统来收集应用程序中更高级别的所有触摸事件。您可以更新您在
NSUserDefaults
中提到的上次触摸时间,但在应用程序运行期间,这可能会导致效率低下,因此您可以将触摸事件发布到主应用程序代理,并让它保存上次触摸的时间。也可以在这里设置2分钟计时器

比如:

- (void) someAppDelegateMethodThatYouCallForAnyUserEvent
{
    [self.idleTimer invalidate];
    self.lastEvent = [NSDate now];
    self.idleTimer = [NSTimer scheduledTimerWithTimeInterval:120 target:self selector:@selector(logoutAndGotoLogin) userInfo:nil repeats:NO];
...
}

如果您支持这种行为,您还必须在应用程序转到后台时对应用程序委托方法进行一些清理。

我想您不明白我的问题。我知道这个委托方法,但我不想等到它被触发。假设用户将自动锁定设置为1小时,但我不想在2分钟不活动后注销她/他。或者想象一下,自动锁定时间为1分钟。一分钟后,手机锁定并触发此方法。但是,如果用户解锁手机,并且在最后一次触摸后两分钟内仍未解锁,我不想显示登录屏幕。我的问题是如何检测tap事件?我知道UIGestureRecognizer代表,但这是最好的方法?好的,我现在知道了。我正在更新我的答案,向您展示我发现的几个解决方案。