uiscrollview纹理背景在帧动画后压缩

时间:2011-09-24 04:10:24

标签: iphone ios ipad uiscrollview uiviewanimation

我有一个UIScrollView,它在显示键盘时调整大小(当它从底部滑入时保持在键盘上方。)为了使动画正常工作,我必须指定UIAnimationOptionBeginFromCurrentState。如果我没有指定这个,我在动画期间会得到奇怪的效果,我可以看到UIScrollView背后的视图。这是动画例程:

- (void) onKeyboardWillShow: (NSNotification*) n
{
    // get the keyboard rect
    CGRect rKeyboard; NSValue* v;
    v = [n.userInfo objectForKey: UIKeyboardFrameEndUserInfoKey];
    [v getValue: &rKeyboard];
    rKeyboard = [self.view convertRect: rKeyboard fromView: nil];   

    // get the keyboard animation duration, animation curve
    v = [n.userInfo objectForKey: UIKeyboardAnimationDurationUserInfoKey];
    double keyboardAnimationDuration;
    [v getValue: &keyboardAnimationDuration];

    v = [n.userInfo objectForKey: UIKeyboardAnimationCurveUserInfoKey];
    UIViewAnimationCurve keyboardAnimationCurve;
    [v getValue: &keyboardAnimationCurve];

    // animate
    [UIView animateWithDuration: keyboardAnimationDuration 
                          delay: 0 
                        options: UIViewAnimationOptionBeginFromCurrentState | keyboardAnimationCurve 
                     animations: ^{

                         CGRect f = _clientAreaView.frame;
                         f.size.height = rKeyboard.origin.y - f.origin.y;
                         _clientAreaView.frame = f;
                     }
                     completion: ^(BOOL finished) {
                     }];
}

问题是UIScrollView backgroundColor,它设置为scrollViewTexturedBackgroundColor。在动画之后,纹理背景被压缩(显示小的伪像)。如果我将它全部设置为原始大小,它将恢复正常。

如何使背景要么不调整动画大小,要么至少将背景“弹出”回到未压缩的外观动画?我尝试在完成例程中设置bg颜色(白色,然后返回scrollViewTexturedBackgroundColor,但这不起作用,我真的不明白为什么。)

1 个答案:

答案 0 :(得分:0)

我认为您的问题可能与设置UIKeyboardAnimationCurveUserInfoKeyUIViewAnimationCurve而不是UIViewAnimationOption)以及UIViewAnimationOptionBeginFromCurrentState(应该是{}}的值相关捕获当前状态并对其进行修改。)

动画UIScrollView(和UITableView)的框架在iOS上存在错误,因此您应该为contentInsetscrollIndicatorInsets属性以及{{1}设置动画如果您需要重新定位视图(例如,向上移动文本字段)。 只需将键盘的高度添加到插图的底部,然后计算是否需要向上或向下滚动。