原文:http://stackoverflow.com/questions/8085188/ios-perform-action-after-period-of-inactivity-no-user-interaction
1.新建 Objective-C 类,继承 UIApplication。
2.编辑 .h 如下:
#import <Foundation/Foundation.h>
//定义应用程序超时时间,单位为分钟,因此我们会在这个数上乘以60,以便折算成秒数。
#define kApplicationTimeoutInMinutes 5
//定义通知名称,其真实内容是字符串 "timed out"
#define kApplicationDidTimeoutNotification
@"AppTimeOut"
@interface TIMERUIApplication : UIApplication {
NSTimer *myidleTimer;
}
-(void)resetIdleTimer;
@end
3. 编辑 .m 如下:
#import "TIMERUIApplication.h"
@implementation TIMERUIApplication
// 监听所有触摸,当屏幕被触摸,时钟将被重置
-(void)sendEvent:(UIEvent *)event {
[super sendEvent:event];
if (!myidleTimer) {
[selfresetIdleTimer];
}
NSSet *allTouches = [eventallTouches];
if ([allTouches count] > 0) {
UITouchPhase phase= ((UITouch *)
[allTouchesanyObject]).phase;
if (phase ==UITouchPhaseBegan) {
[self resetIdleTimer];
}
}
}
//重置时钟
-(void)resetIdleTimer {
if (myidleTimer) {
[myidleTimerinvalidate];
}
//将超时时间由分钟转换成秒数
int timeout =
kApplicationTimeoutInMinutes* 60;
myidleTimer = [NSTimer
scheduledTimerWithTimeInterval:timeout
target:self
selector:@selector(idleTimerExceeded)
userInfo:nilrepeats:NO];
}
//当达到超时时间,张贴 kApplicationTimeoutInMinutes通知
-(void)idleTimerExceeded {
[[NSNotificationCenter defaultCenter]
postNotificationName:
kApplicationDidTimeoutNotification
object:nil];
}
@end
4.修改 main.m :
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
#import "TIMERUIApplication.h"
int main(int argc, char *argv[]) {
@autoreleasepool {
returnUIApplicationMain(argc, argv,
NSStringFromClass(
[TIMERUIApplicationclass]),
NSStringFromClass(
[AppDelegate
class]));
}
}
5. 接下来编辑 AppDelegate.mfile,不需要编辑 AppDelegate.h。
#import "AppDelegate.h"
#import "TIMERUIApplication.h"
@implementation AppDelegate
@synthesize window = _window;
-(BOOL)application:(UIApplication *)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:
@selector(applicationDidTimeout:)
name:
kApplicationDidTimeoutNotification
object:nil];
return YES;
}
-(void)applicationDidTimeout:(NSNotification *)notif {
NSLog (@"time exceeded!!");
//这是故事板和xib文件不同的地方。对于你想跳转到的 View Controller,确保下面代码中的id 和故事板中 View Controller 的 Storyboard Identifier 一致。在本例中,即"mainView"。而我的故事板文件名为MainStoryboard.storyboard, 确保你的文件名和 storyboardWithName 参数保持一致。
UIViewController *controller =
[[UIStoryboard
storyboardWithName:@"MainStoryboard"
bundle:NULL]
instantiateViewControllerWithIdentifier:
@"mainView"];
[(UINavigationController*)
self.window.rootViewController
pushViewController:controller
animated:YES];
}
提示: 一旦侦测到触摸,定时器会被启动。也就是说,如果用户触摸了主窗口(例如“mainView”),哪怕并没有从主窗口离开,同一个视图仍然会在指定时间后 push。这在我的 app 中不是问题,但对于你的 app 则可能是个问题。
这将导致视图每隔 x 分钟就push 一次。哪怕侦测到触摸,时钟仍然会被重置。
这个问题的一种解决方案是,在app delegate 中声明一个 Bool 成员 idle,这样,当你想侦测用户是否无动作时将其设置为 true,如果仅仅是跳转到 idle view 则设置为false。然后在 TIMERUIApplication 的 idleTimerExceeded 方法中使用如下的 if 语句。在所有你想侦测用户是否无动作的视图中,将app delegate 的 idle 设置为 true。对于不需要侦测用户是否无动作的视图,将 idle 设置为 false。
-(void)idleTimerExceeded{
AppDelegate *appdelegate = [[UIApplication
sharedApplication] delegate];
if(appdelegate.idle){
[[NSNotificationCenter defaultCenter]
postNotificationName:
kApplicationDidTimeOutNotification
object:nil];
}
}
分享到:
相关推荐
Git地址 : ... 时间段筛选器 1 可自定义起始时间和终止时间 2 支持一键选择当天 昨天 本周 本月时间段 3 自定义颜色 4 快速重置时间
这是一个iOS无操作时,定时退出的的一个demo. 这只是其中的一种实现方式,仅供参考
ios中audio不能直接通过audio.play()播放,需要用户在click事件或者touch事件中执行audio.play()才能播放。 ajax回调中audio.play()音乐不能正常播放。 用户点击按钮,等服务器返回数据后再播放相应的成功或失败的...
这是一份实现类似于Facebook的时间轴的IOS代码,通过此代码可以理解时间轴的原理和使用
iOS时间轴的实现,需要的朋友可以下载看一看
问题的产生 这个问题一般发生在项目比较大,OO使用良好,泛型继承用的较多的时候。...具体的解决方法就是在 Unity3D 的编译选项 Player Setting 中有一个 AOT Compilation Options 条目,在这个选项条目中加上
在iOS 开发中我们往往会用到时间控件但是有时我们也要做一些控制就是时间的控制比如距离现在多少天不能输入等等
一款任意改变所属时间的选择器,可以指定显示某个时间段内的时间,样式。色值都可改变,简单易用
自定义的一个timepicker选择器,年月日星期都包含了。
iOS是由苹果公司开发的移动操作系统。iOS信息无障碍开发是iOS平台出开发出方便各种用户使用的信息无障碍应用。
http://blog.csdn.net/qqmcy/article/details/50779869
iOS时间选择器,开始时间(时分)— 结束时间(时分)(弹出视图),因为项目的需求,在别人代码的基础上,修改成自己想要的。有时间了就把控件分享出来给需要的人使用。(滑动有点卡顿,但不影响)。
表盘时间选择器,高仿ios就寝时间选择器,
ios应用源码之一个每日时间安排的小demo .
本例子是一个仿IOS7的横向日历时间轴例子,按住日期左右滑动可以实现更多日期的展现
在iOS中使用SDImageView实现缓存图片,可以自己指定缓存图片的大小
IOS 创建相册 保存照片到指定相册 封装的很好
检测指定路径文件大小,最近做清除缓存的功能,要先显示占用多少内存,然后再清除,这个方法可以算出所占内存的多少,是代码片段,分享
【iOS-Cocos2d游戏开发】Cocos2d-iPhone动作Action-扩展动作 http://blog.csdn.net/tt5267621/article/details/7626450
【iOS-Cocos2d游戏开发】Cocos2d-iPhone动作Action-瞬时动作 http://blog.csdn.net/tt5267621/article/details/7624781