ツールバーのスワイプでキーボードを出し入れする | 極上の人生
今回は以前に書いた記事(上記)の改良版。
キーボードの表示 ⁄ 非表示に合わせて上下するツールバー。
先だっての「まいど普通の名古屋オフ」で@toshiya240 さんに見せていただいたヤツが凄く動きが良かった。
以前、私が書いた記事のやり方だと、キーボードとツールバーの動きに時間差がある。
@toshiya240 さんに見せてもらったサンプルは、時間差ゼロで動きが追従していた。
長いことOmniFocus 内で積み残されていたが、今回ようやく実装できたので記事にしました。
キーワードは「NSTimeInterval AnimationDuration」
と言っても、オフ会の合間にiPhoneでサンプルを見せてもらっただけ。
ソースコードを見たわけではない。
@toshiya240 さんからお聞きしたキーワードは「NSTimeInterval AnimationDuration」
これをGoogle で検索してみると、それらしき記事が見つかりました。
@dataich さん、ありがとうございます。
画面いっぱいのUITextViewがキーボードに隠れないようにする – cap’n webb
こんな感じ
で、上記の@dataich さんの記事を見て書いたのがこんな感じ。
キーボードの表示 ⁄ 非表示の処理をまとめているのが私なりのアレンジ。
- (void)fitKeyboard:(NSNotification*)notification { // キーボード CGRect kbRect = [[notification.userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue]; kbRect = [[self.view superview] convertRect:kbRect fromView:nil]; // フレームサイズ CGRect frm = self.view.frame; NSString* nName = notification.name; if ( [nName isEqualToString:@"UIKeyboardWillHideNotification"] ) { frm.size.height += kbRect.size.height; } else { frm.size.height -= kbRect.size.height; } // キーボードのアニメーション NSTimeInterval adr = [[[notification userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue]; [UIView beginAnimations:@"ResizeForKeyboard" context:nil]; [UIView setAnimationDuration:adr]; [self.view setFrame:frm]; [UIView commitAnimations]; }
これをviewWillAppear 内でUIKeyboardWillShowNotification と UIKeyboardWillHideNotification で呼び出せばOK。 *01【呼び出せばOK】
なんて気楽に言っているが、UIKeyboardDidShowNotification で呼び出してしまっていたりして、うんうん唸っているところと@toshiya240 さんにヒントもらったのは内緒だ!
- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; // 通知センターを用意 NSNotificationCenter* nc = [NSNotificationCenter defaultCenter]; [nc addObserver:self selector:@selector(fitKeyboard:) name:UIKeyboardWillShowNotification object:nil]; [nc addObserver:self selector:@selector(fitKeyboard:) name:UIKeyboardWillHideNotification object:nil]; }
脚注
↩01 | 【呼び出せばOK】 なんて気楽に言っているが、UIKeyboardDidShowNotification で呼び出してしまっていたりして、うんうん唸っているところと@toshiya240 さんにヒントもらったのは内緒だ! |
---|