// // BasicViewController.m // RA Image // // Created by Jack on 2017/4/27. // Copyright © 2017年 USAI. All rights reserved. // #import "BasicViewController.h" NSString *const LogoutNotification = @"LogouNotification"; @interface BasicViewController () @property (nonatomic,strong) JLKeyboardListener *keyboardListener; @property (nonatomic,assign) CGFloat translateY; @property (nonatomic,strong) UITapGestureRecognizer *firstResponderTap; @end @implementation BasicViewController - (NSNotificationCenter *)notificationCenter { return [NSNotificationCenter defaultCenter]; } - (void)dealloc { [self.notificationCenter removeObserver:self]; } - (void)registNofitication { [self.notificationCenter addObserver:self selector:@selector(userLogout:) name:LogoutNotification object:nil]; } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapResignFirstResponder:)]; [self.view addGestureRecognizer:tap]; self.firstResponderTap = tap; } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self startListenKeyboard]; } - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; if (self.currentFirstResponder) { [self tapResignFirstResponder:nil]; } [self stopListenKeyboard]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (id)userDefaultsValue:(NSString *)key { return [[NSUserDefaults standardUserDefaults] valueForKey:key]; } - (void)setUserDefaultsValue:(id)value forKey:(NSString *)key { NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; [userDefaults setValue:value forKey:key]; [userDefaults synchronize]; } - (void)userLogout:(NSNotification *)notification { if (self.presentedViewController) { [self dismissViewControllerAnimated:NO completion:nil]; return; } if (self.navigationController) { [self.navigationController popToRootViewControllerAnimated:NO]; } } - (UIViewController *)viewControllerInStoryboard:(NSString *)storyboard withId:(NSString *)storyboardId { return [[UIStoryboard storyboardWithName:storyboard bundle:nil] instantiateViewControllerWithIdentifier:storyboardId]; } #pragma mark - First Responder - (void)tapResignFirstResponder:(UITapGestureRecognizer *)tap { if (self.currentFirstResponder) { [self.currentFirstResponder resignFirstResponder]; self.currentFirstResponder = nil; self.translateY = 0; } } - (void)removeFirstResponderTap { if (self.firstResponderTap) { [self.view removeGestureRecognizer:self.firstResponderTap]; self.firstResponderTap = nil; } } #pragma mark - Keyboard Listener - (void)registListenKeyboard { self.keyboardListener = [[JLKeyboardListener alloc] init]; self.keyboardListener.delegate = self; } - (void)startListenKeyboard { if (self.keyboardListener) { [self.keyboardListener startListen]; } } - (void)stopListenKeyboard { if (self.keyboardListener) { [self.keyboardListener stopListen]; } } #pragma mark - KeyboardListener Delegate - (void)keyboardWillShowHeight:(CGFloat)height withDuration:(NSTimeInterval)duration { if (!self.currentFirstResponder) { return; } CGFloat y = CGRectGetMaxY(self.currentFirstResponder.frame); CGFloat maxH = CGRectGetMaxY(self.view.frame); if (maxH - height < y) { self.translateY = maxH - height - y; CGAffineTransform transform = self.view.transform; transform = CGAffineTransformTranslate(transform, 0, self.translateY); self.view.transform = transform; } } - (void)keyboardWillHideHeight:(CGFloat)height withDuration:(NSTimeInterval)duration { self.view.transform = CGAffineTransformIdentity; } - (void)keyboardWillChangeHeight:(CGFloat)height offset:(CGFloat)heightOffset withDuration:(NSTimeInterval)duration { if (!self.currentFirstResponder) { return; } self.view.transform = CGAffineTransformIdentity; CGFloat y = CGRectGetMaxY(self.currentFirstResponder.frame); CGFloat maxH = CGRectGetMaxY(self.view.frame); if (maxH - height < y) { self.translateY = maxH - height - y; CGAffineTransform transform = self.view.transform; transform = CGAffineTransformTranslate(transform, 0, self.translateY); self.view.transform = transform; } } @end