iPhone: 检查用户最后一次触摸屏幕的时间
来源:互联网 发布:java登陆注册实现 编辑:程序博客网 时间:2024/05/01 08:39
原文:http://stackoverflow.com/questions/273450/iphone-detecting-user-inactivity-idle-time-since-last-screen-touch
方案一:让你的应用程序委托子类化 UIApplication。在实现部分,覆盖 sendEvent:方法:
- (void)sendEvent:(UIEvent *)event {
[super sendEvent:event];
// 只在开始或结束触摸时 reset 闲置时间, 以减少不必须要的时钟 reset 动作
NSSet *allTouches = [event allTouches];
if ([allTouches count] > 0) {
// allTouchescount 似乎只会是 1, 因此 anyObject 总是可用的
UITouchPhase phase =((UITouch *)[allTouches anyObject]).phase;
if (phase ==UITouchPhaseBegan || phase == UITouchPhaseEnded)
[self resetIdleTimer];
}
}
- (void)resetIdleTimer {
if (idleTimer) {
[idleTimerinvalidate];
[idleTimerrelease];
}
idleTimer = [[NSTimer scheduledTimerWithTimeInterval:maxIdleTimetarget:self selector:@selector(idleTimerExceeded) userInfo:nil repeats:NO]retain];
}
- (void)idleTimerExceeded {
NSLog(@"idle time exceeded");
}
这里, maxIdleTime 和 idleTimer 都是实例变量.
此外你要修改 main.m,告诉 UIApplicationMain 使用你的 delegate 类(在这个例子里,即 AppDelegate)作为主类:
int main(int argc, char *argv[])
{
@autoreleasepool{
return UIApplicationMain(argc, argv, NSStringFromClass([AppDelegateclass]), NSStringFromClass([AppDelegate class]));
}
}
方案二:本方案不需要子类化UIApplication。它能在某个 UIViewController 子类上生效,因此对于只有一个 ViewController(比如一个互动式应用或游戏)相当有用,或者只想在一个 View Controller 中处理用户闲置时间。
它不会在重置时钟时重建 NSTimer 对象,而仅仅是修改它的触发时间。
在你的代码中,你可以调用 resetIdleTimer 去检测各种事件(比如加速计的急剧改变)。
@interface MainViewController : UIViewController {
NSTimer*idleTimer;
}
@end
#define kMaxIdleTimeSeconds 60.0
@implementation MainViewController
#pragma mark -
#pragma mark Handling idle timeout
- (void)resetIdleTimer {
if(!idleTimer) {
idleTimer =[[NSTimer scheduledTimerWithTimeInterval:kMaxIdleTimeSeconds target:self selector:@selector(idleTimerExceeded) userInfo:nil repeats:NO] retain];
}
else {
if(fabs([idleTimer.fireDate timeIntervalSinceNow]) < kMaxIdleTimeSeconds-1.0){
[idleTimer setFireDate:[NSDate dateWithTimeIntervalSinceNow:kMaxIdleTimeSeconds]];
}
}
}
- (void)idleTimerExceeded {
[idleTimerrelease];
idleTimer = nil;
[selfstartScreenSaverOrSomethingInteresting];
[selfresetIdleTimer];
}
- (UIResponder *)nextResponder {
[selfresetIdleTimer];
return[super nextResponder];
}
- (void)viewDidLoad {
[superviewDidLoad];
[selfresetIdleTimer];
}
@end
为简便起见,忽略了内存管理代码。
- iPhone: 检查用户最后一次触摸屏幕的时间
- 检查用户最后一次触摸屏幕
- 用Windows命令行如何检查Windows系统补丁(KBxxxxxx)的最后一次安装时间?
- jsp之记录用户登录的总次数以及记录用户最后一次登录的时间
- 利用Cookies跟踪用户最后一次访问的日期和时间
- cookie:记住用户最后一次的访问时间,并清空指定cookie
- 用户时间数据的检查
- 活动目录中如何查看用户最后一次登录时间
- iphone 检测屏幕触摸事件
- 显示用户触摸持续的时间
- ios监听用户是否触摸了屏幕的一种实现
- ios监听用户是否触摸了屏幕的一种实现
- 每个用户每个月最后一次生成的记录
- 迟到最多的人最后一次迟到的时间
- SVN嵌入属性(获得最后一次提交的人,时间...)
- 最后一次的挽救
- bean的最后一次
- 检测触摸事件(用户触摸屏幕时提示信息)
- java获取当前时间
- 甜欣屋
- LTransitionImageView 实现了 ImageView 之间的切换效果。
- live555增强版--支持串流mp4格式
- UNIX网络编程——epoll的 et,lt关注点
- iPhone: 检查用户最后一次触摸屏幕的时间
- Android自动化测试之使用java调用monkeyrunner(五)
- 负数求模
- 动态主机配置协议DHCP
- iOS第三方开源类库 -- 视图切换 HMGLTransitions
- ef-->code first-->Migrations
- 万恶的CSDN
- 用css来设置readyOnly
- Hello Android!