ツールバーのスワイプでキーボードを出し入れする | 極上の人生
今回は以前に書いた記事(上記)の改良版。
キーボードの表示 ⁄ 非表示に合わせて上下するツールバー。
先だっての「まいど普通の名古屋オフ」で@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 さんにヒントもらったのは内緒だ! |
|---|