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

Posted

技术标签:

【中文标题】uiscrollview 纹理背景在帧动画后被压缩【英文标题】:uiscrollview textured background is compressed after frame animation 【发布时间】:2011-09-24 04:10:24 【问题描述】:

我有一个 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】:

我认为您的问题可能与设置UIKeyboardAnimationCurveUserInfoKey(这是UIViewAnimationCurve 而不是UIViewAnimationOption)的值以及UIViewAnimationOptionBeginFromCurrentState(应该捕获当前状态并对其进行修改)有关.

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

【讨论】:

感谢对 UIAnimationCurve 的关注;我显然必须将它映射到相应的 UIAnimationOption...

以上是关于uiscrollview 纹理背景在帧动画后被压缩的主要内容,如果未能解决你的问题,请参考以下文章

手动动画 UIScrollView.contentOffset 时背景图案跳跃

UIScrollview 动画取决于内容偏移

渲染成 3D 纹理

关于在帧动画 的动态加载

带有 uiscrollview 分页的 iOS 渐变动画

ASTC纹理压缩格式(Adaptive Scalable Texture Compression)