检查用户最后一次触摸屏幕
来源:互联网 发布:中电数据 医疗 编辑:程序博客网 时间:2024/05/01 11:08
方案一:让你的应用程序委托子类化 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: 检查用户最后一次触摸屏幕的时间
- 检测触摸事件(用户触摸屏幕时提示信息)
- 触摸屏幕
- 屏幕触摸
- ios监听用户是否触摸了屏幕的一种实现
- ios监听用户是否触摸了屏幕的一种实现
- 最后一次
- 最后一次
- 最后一次
- 活动目录中如何查看用户最后一次登录时间
- 每个用户每个月最后一次生成的记录
- 用Windows命令行如何检查Windows系统补丁(KBxxxxxx)的最后一次安装时间?
- jsp之记录用户登录的总次数以及记录用户最后一次登录的时间
- Unity 屏幕触摸事件
- 触摸屏幕手势识别
- 屏幕触摸事件
- 屏幕触摸事件
- 比较两个web.xml
- Centos搭建PHP5.3.8+Nginx1.0.9+Mysql5.5.17
- #pragma详解
- 大学期间应当做的三件事
- spring - ioc和aop
- 检查用户最后一次触摸屏幕
- [Javascript入门]Javascript之初体验2
- IOS第三方数据库FMDatabase的简单使用
- Python:查找硬盘上重复文件
- 将word转换为网页(WordToHtml)
- 我视你为自己-至未来伴侣
- 十进制数转化为二进制数
- 创建定制视图(1)
- iOS开发题目.2