UIApplication のsendEvent:メソッドをフックする
タッチイベントを取得したタイミングでタイマーをセットする
一定時間タッチイベントがなかったらTimerのメソッドが発火する.
(新しいタッチイベントでタイマーをリセットする)
1, AppDelegateをUIApplicationのサブクラスにする
2, AppDelegateでsendEventをオーバーライドする
3, main.mでUIApplicationMainの第3匹数にAppDelegateのクラス名を設定する
------- main.m ------------------
int main(int argc, char * argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, @"WEMAppDelegate", NSStringFromClass([WEMAppDelegate class]));
}
}
------- AppDelegateの例 -------
@interface WEMAppDelegate ()
@property (nonatomic, weak) NSTimer *idleTimer;
@end
@implementation WEMAppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
return YES;
}
:
いろいろなしょり
:
- (void)sendEvent:(UIEvent *)event
{
[super sendEvent:event];
NSSet *allTouches = [event allTouches];
if ([allTouches count] > 0)
{
UITouchPhase phase = ((UITouch *)[allTouches anyObject]).phase;
if (phase == UITouchPhaseBegan || phase == UITouchPhaseEnded)
{
[self resetIdleTimer];
}
}
}
- (void)resetIdleTimer
{
if ( self.idleTimer != nil )
{
[self.idleTimer invalidate];
self.idleTimer = nil;
}
self.idleTimer = [NSTimer scheduledTimerWithTimeInterval:10
target:self
selector:@selector(idleTimerExceeded)
userInfo:nil
repeats:NO];
}
- (void)idleTimerExceeded
{
/* 一定時間経過したよの処理 */
}
@end

0 件のコメント :
コメントを投稿