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 件のコメント :
コメントを投稿