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]];
'ios 뽀개기 > objective-c' 카테고리의 다른 글
일정시간이 지난 파일 자동 삭제하기 (0) | 2019.01.09 |
---|---|
날짜데이터를 문자로 변환 (0) | 2019.01.09 |
최상위 viewController 클래스의 이름 가져오기 (0) | 2019.01.04 |
ios 오토레이아웃 코드로 응용하기 (0) | 2019.01.04 |
암호화 복호화 (0) | 2019.01.02 |
댓글