본문 바로가기
ios 뽀개기/objective-c

AppDelegate 사용자 터치 감지하기

by 인생여희 2019. 1. 4.
반응형

AppDelegate 사용자 터치 감지하기


.h



#import <UIKit/UIKit.h>

#import "SecurityViewController.h"

@interface DetectTouchWindow : UIWindow

@property (strong,nonatomic) NSTimer *idleTimer; //타이머

@property (strong, nonatomic) UIWindow *window;


@end


.m


#import "DetectTouchWindow.h"


@implementation DetectTouchWindow

@synthesize idleTimer;


- (void)sendEvent:(UIEvent *)event {

    [super sendEvent:event];

    

    // 타이머 재설정 횟수를 줄이기 위해 시작 터치 또는 종료 터치에서만 타이머를 재설정.

    NSSet *allTouches = [event allTouches];

    if ([allTouches count] > 0) {

        // allTouches count only ever seems to be 1, so anyObject works here.

        //allTouches 수는 1로만 계산되므로 anyObject가 여기에서 작동합니다.

        UITouchPhase phase = ((UITouch *)[allTouches anyObject]).phase;

        if (phase == UITouchPhaseBegan || phase == UITouchPhaseEnded)

        [self resetIdleTimer];

    }

}


//터치가 되면 호출되는 함수

- (void)resetIdleTimer {

    if (idleTimer) {

        NSLog(@"DetectTouchWindow - 터치가 감지되고 있습니다.");

        [idleTimer invalidate];

        

    }

    

    idleTimer = [NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(idleTimerExceeded) userInfo:nil repeats:NO] ;

}


- (void)idleTimerExceeded {

    NSLog(@"DetectTouchWindow - 화면 보호기 창을 띄웁니다.");

    

    //현재 띄워진 class 의 이름

    UIViewController *curentViewController = [[[UIApplication sharedApplication] keyWindow] rootViewController];

    NSString *currentSelectedCViewController = NSStringFromClass([[((UINavigationController *)curentViewController) visibleViewController] class]);

    

    //사진촬영 중일때, 녹음중일때 제외하고 화면보호기 띄우기 - !

    if([currentSelectedCViewController isEqualToString:@"CaptureMediaActivity"]){

        

         [self resetIdleTimer];

    }else if([currentSelectedCViewController isEqualToString:@"AudioRecorderActivity"]){

        

         [self resetIdleTimer];

    }else{

        //일정시간 이상 지나면 커스텀으로 만든 화면 보호기 띄워주기

        SecurityViewController *sv = [[SecurityViewController alloc]init];

        [[[UIApplication.sharedApplication keyWindow]rootViewController] presentViewController:sv animated:YES completion:nil];

    }

   

    


    

}







@end



사용

appDelegate .m 


위치에 위에서 만들어 놓은 UIWindow 상속해서 구현한 클래스로 window 재설정!!


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    // Override point for customization after application launch.

    

    window = [[DetectTouchWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    //self.window = [[MyKindOfWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];






반응형

댓글