1

私はiosでチャットアプリを開発しています。カスタムテーブルビューとUIViewがあり、下部にテキストフィールドボタンがあります。Textfield を有効にした状態で UIView と Tableview をキーボードで動かしたいです。私はこの観察者を持っています:

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWasShown:) name:UIKeyboardWillShowNotification object:nil];

次に、keyboardWasShown メソッド:

- (void)keyboardWasShown:(NSNotification*)aNotification{
NSDictionary* info = [aNotification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
NSNumber *number = [info objectForKey:UIKeyboardAnimationDurationUserInfoKey];
double duration = [number doubleValue];
    [UIView animateWithDuration:duration animations:^{

        CGRect frame = textInputView.frame;
        if (UIDeviceOrientationIsPortrait([UIDevice currentDevice].orientation))
        {
            self.kHeight = kbSize.height;
        }
        else if(UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation))
        {
            self.kHeight = kbSize.width;
        }
        NSLog(@"keyboard up y =%f",self.kHeight);
        frame.origin.y -= self.kHeight;
        textInputView.frame = frame;

        frame = bubbleTable.frame;
        frame.size.height -= self.kHeight;
        bubbleTable.frame = frame;
    }];

動いているのですが、facebookやviberアプリのようにUIviewがスムーズに動かないことに気づきました。そこで、一般的なアプローチについてお聞きしたいと思います。本当にありがとうございました!

4

3 に答える 3

2

ビューをスクロール ビューに埋め込みます (Interface Builder を使用している場合は、ビューをクリックし、トップ メニューから [エディター] -> [埋め込み] -> [ビューのスクロール] をクリックします。サンプル コードを次に示します。

- (void)keyboardWasShown:(NSNotification *)notification
{
    NSDictionary *info = [notification userInfo];
    CGSize kbSize = [info[UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;

    // Flip kbSize if landscape.
    if (UIInterfaceOrientationIsLandscape([[UIDevice currentDevice] orientation])) {
        kbSize = CGSizeMake(kbSize.height, kbSize.width);
    }

    UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height, 1.0);
    [scrollView setContentInset:contentInsets];
    [scrollView setScrollIndicatorInsets:contentInsets];

    CGPoint scrollPoint = CGPointMake(0.0, [bubbleTable frame].origin.y - kbSize.height);
    [scrollView setContentOffset:scrollPoint animated:YES];
}
于 2013-10-16T15:57:54.867 に答える
0

このアニメーションを試してください (オプションを使った実験):

[UIView animateWithDuration:duration
                          delay:0
                        options:UIViewAnimationOptionAllowUserInteraction|UIViewAnimationOptionBeginFromCurrentState
                     animations:^{
                         //your animation
                     }
                     completion:nil];
于 2013-10-16T17:57:08.790 に答える