0

私のホームページは、ロゴの にviewController開きます。次に、2 つのアニメーションを実行します。ロゴを上に翻訳し、. ユーザーがランをクリックし、ビューのフレームをアニメーション化したとき (ユーザーがキーボードでカバーされていたものを表示できるようにするため)。ユーザーがキーボード以外の場所をクリックすると、ビューのフレームがアニメーション化されて元に戻ります。実行後、元の位置に戻ります (アニメーションがアップする前)。これはなぜ発生し、どのように修正すればよいですか? ありがとう。UIImageViewviewDidAppearUITextFieldUITextField textFieldDidBeginEditingUITextFieldtextFieldDidEndEditingtextFieldDidEndEditingUIImageView

static const CGFloat STARTPAGE_ANIMATION_TIME = 0.5;
-(void)viewDidAppear:(BOOL)animated{
    NSLog(@"viewDidAppear:");

    CGRect logoFrame = logoImage.frame;
    logoFrame.origin.y = 130;
    [UIImageView animateWithDuration:STARTPAGE_ANIMATION_TIME delay:STARTPAGE_ANIMATION_TIME options:UIViewAnimationCurveEaseInOut animations:^{
        logoImage.frame = logoFrame;
    } completion:^(BOOL finished) {
        NSLog(@"logoImageAnimation");
    }];

    [UIImageView animateWithDuration:STARTPAGE_ANIMATION_TIME delay:STARTPAGE_ANIMATION_TIME options:UIViewAnimationCurveEaseInOut animations:^{
        searchField.alpha = 1;
    } completion:^(BOOL finished) {
        NSLog(@"searchFieldAnimation");
    }];
}


CGFloat ANIMATED_DISTANCE = 200;
static const CGFloat KEYBOARD_ANIMATION_DURATION = 0.3;

- (void)textFieldDidBeginEditing:(UITextField *)textField{
    NSLog(@"textFieldDidBeginEditing:");

    CGRect viewFrame = self.view.frame;
    viewFrame.origin.y -= ANIMATED_DISTANCE;
    [UIView animateWithDuration:KEYBOARD_ANIMATION_DURATION animations:^{
        self.view.frame = viewFrame;
    } completion:^(BOOL finished) {
        NSLog(@"frameAnimationUp");
    }];
}

- (void)textFieldDidEndEditing:(UITextField *)textField{
    NSLog(@"textFieldDidEndEditing:");

    CGRect viewFrame = self.view.frame;
    viewFrame.origin.y += ANIMATED_DISTANCE;
    [UIView animateWithDuration:KEYBOARD_ANIMATION_DURATION animations:^{
        self.view.frame = viewFrame;
    } completion:^(BOOL finished) {
        NSLog(@"frameAnimationDown");
    }];
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    NSLog(@"touchesBegan:withEvent:");
    [self.view endEditing:YES];
    [super touchesBegan:touches withEvent:event];
}
4

1 に答える 1

0

互いに影響し合うアニメーションに関係している可能性があります。アニメーションが発生しているときに編集を開始する場合、タイミングによっては、値の加算と減算yは予測できません。

移動前に元のフレームをプロパティに保存し、後でフレームをリセットします。これにより、いくつかのオーバーラップするアニメーションを扱う場合に、より予測可能な結果が得られます。

于 2012-12-19T22:36:29.663 に答える