第二个scrollview移动动画故障

时间:2012-10-31 06:52:50

标签: ios scrollview uiviewanimation

为了美观/娱乐目的来平移大于屏幕的背景图像而不是推动第二个视图,我试图结合两个视图的功能,一个是根视图,第二个是推动视图。

因此,根视图有一个按钮,当点击时,启动向右平移滚动视图而不是推动第二个视图。这很好用:

- (IBAction)nextButton:(id)sender {
[UIView animateWithDuration:2.0 animations:^{
    _scrollViewToPan.contentOffset = CGPointMake(645, 0.0);
}];

}

现在出现在屏幕上的是第二个视图,其中涉及用户输入一些信息。在我尝试将它组合到一个视图之前,所有这些都是第二个推送视图。现在它们被组合在一起,滚动视图动画中的一个小故障当它移动以适应键盘中的键盘时如下所示:(见下文) - 它在滚动到键盘上方的位置之前跳转到原始坐标。

    NSDictionary* info = [aNotification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;

UIEdgeInsets contentInsets = UIEdgeInsetsMake(645, 0.0, kbSize.height, 0.0);
_scrollViewToPan.contentInset = contentInsets;
_scrollViewToPan.scrollIndicatorInsets = contentInsets;
CGRect aRect = self.view.frame;
aRect.size.height -= kbSize.height;
if (activeField == _nameTextView){
    CGPoint scrollPoint = CGPointMake (645, 160);
    [_scrollViewToPan setContentOffset:scrollPoint animated:YES];
}

if (activeField == _addressTextView){
    CGPoint scrollPoint = CGPointMake (645, 160);
    [_scrollViewToPan setContentOffset:scrollPoint animated:YES];
}

keyboardWillBeHidden:

[UIView animateWithDuration:0.3 animations:^{
    _scrollViewToPan.contentOffset = CGPointMake(645, 0.0);
}];

当这是一个单独的视图时,scrollPoint是(0,160)并且一切运行良好。我将其更改为(645,160)以与上述平移的第一个偏移对齐。但是,当用户点击textView时,而不是与键盘外观一起平滑地向上滚动,它会跳转到原始预平移坐标,然后向右和向上滚动,使其最终在正确的位置结束。

简而言之,我想要的是原始坐标A - > (点击按钮) - >滚动到坐标B - >点按textView /键盘显示 - >滚动到坐标C - >键盘被解雇 - >滚动到协调B.

我得到的是原始坐标A - > (点击按钮) - >滚动到坐标B - >点按textView /键盘显示 - > (跳到A然后滚动到C) - >键盘被解雇 - >滚动以协调B。

如何摆脱“跳到A'故障?

1 个答案:

答案 0 :(得分:0)

动画电线在添加contentInsets的某个地方交叉进入混音。我没有在键盘上动态添加它,而是在其IB设置中使我的scrollView更大,因此键盘高度已经计算在内。然后简化keyboardWasShown到:

    if (activeField == _nameTextView){
    [UIView animateWithDuration:0.3 animations:^{
        _scrollViewToPan.contentOffset = CGPointMake(645, 140);
    }];
}
if (activeField == _addressTextView){

    [UIView animateWithDuration:0.3 animations:^{
        _scrollViewToPan.contentOffset = CGPointMake(645, 205);
    }];

使用垂直滚动正确设置动画,以便在用户首次和后续选择时适应键盘。