2012-10-31 163 views
0

为了审美/娱乐的目的,平移大于屏幕的背景图像,而不是推入第二个视图,我试图结合两个视图的功能,一个是根视图,一个是根视图其次是推动它的观点。第二个滚动视图移动动画故障

所以,根视图有一个按钮,当点击时,开始向右滚动滚动视图而不是推动第二个视图。这只是正常:

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

}

现在看来,这是第二个观点出现在屏幕上涉及到用户输入的一些信息。所有这些都是在我尝试将它合并到一个视图之前的第二个推送视图。现在它们被组合起来了,当它移动到容纳keyboardWasShown中的键盘时,在滚动视图动画中会出现一个小故障:(见下文) - 它在滚动到键盘上方之前跳转到原始坐标。

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为(0160)和所有运作良好。我将它改为(645,160)以与上面所述的平移的第一偏移对齐。但是,当用户点击textView时,而不是与键盘外观一起平滑滚动时,它会跳转到原始的预先平移的坐标,然后向右滚动并最终在正确的位置结束。

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

我得到的是原始坐标A - >(tap button) - >滚动到坐标B - >点击textView/keyboard shows - >(跳转到A然后滚动到C) - >键盘解散 - >滚动到坐标B.

我该如何摆脱'跳到A'的故障?

+0

跳转到A,然后滚动到C,这是否意味着从A到C的转换意味着它正在对角滚动? – wlue

+0

@wlue:是的,它是 – j9suvak

+0

我想你的代码中可能会有一些修改scrollview的副作用。我会尝试通过在' - [UIScrollView setContentOffset:]'上创建一个条件断点来进行调试,然后在点击文本视图之前打开它,然后通过运行堆栈来确定代码的哪一部分导致了它。 – wlue

回答

0

将动画导线添加到mixInset中的某处。我没有在键盘上添加这个功能,而是在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); 
    }]; 

与垂直滚动仅由用户来适应在第一和随后的选择键盘适当动画处理。