第一次动画UIScrollView contentOffset 没有动画

Posted

技术标签:

【中文标题】第一次动画UIScrollView contentOffset 没有动画【英文标题】:The first time animating UIScrollView contentOffset is not animated 【发布时间】:2014-06-20 00:53:22 【问题描述】:

我有一个 UIScrollView (self.zoomScrollView) 和另一个 UIView (self.pageView)。我正在使用

为 zoomScale 和 contentOffset 设置动画
CGPoint p1 = [tap locationInView:self.pageView];
CGPoint p2 = CGPointMake(p1.x * 3, p1.y * 3);
CGPoint d  = CGPointMake(p2.x - p1.x, p2.y - p1.y);
[UIView animateWithDuration:0.2
                      delay:0
                    options:UIViewAnimationOptionBeginFromCurrentState
                 animations:^
                     [self zoomScrollView].zoomScale = 3;
                     [self.zoomScrollView setContentOffset:d animated:NO];
                 
                 completion:^(BOOL finished) 
                 ];

此动画第一次运行时,contentOffset 立即设置为其最终值,然后 zoomScale 被动画化以满足它。此后每隔一段时间,此动画都会完美运行。关于为什么它第一次不起作用的任何想法?

【问题讨论】:

【参考方案1】:

zoomScalecontentOffset 属性是不可动画的,因此在 UView 动画块中更改它们不会执行任何操作。要为contentOffset 设置动画,只需将YES 传递给setContentOffset:animated:,而不使用动画块。 zoomScale 也是如此(查看文档)。

动画属性: https://developer.apple.com/library/ios/documentation/windowsviews/conceptual/viewpg_iphoneos/animatingviews/animatingviews.html

UIScrollView: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIScrollView_Class/Reference/UIScrollView.html#//apple_ref/occ/instm/UIScrollView/setZoomScale:animated:

【讨论】:

嗯,你的意思是他们不能“一起”动画吗?或者在为它们设置动画时存在“意外行为”?似乎 zoomScale 的动画效果很好,第一次使用后的 contentOffset 也是如此。 也就是说,我尝试调用 setZoomScale:animated: 和 setContentOffset:animated: 但同时触发两者会导致它们竞争 contentOffset 产生意想不到的结果(这看起来比上面的解决方案更糟糕)。

以上是关于第一次动画UIScrollView contentOffset 没有动画的主要内容,如果未能解决你的问题,请参考以下文章

如何使用autolayout将UIScrollView滚动到viewWillAppear的底部,没有可视化动画

当我滚动 UIScrollView 时,连接到计时器的动画和滚动视图内的动画视图突然停止滴答作响

iOS之深度剖析UIScrollView的实现原理与阻尼动画

UIScrollView 在动画期间被剪辑

当另一个 UIScrollView 滚动时停止动画 UIScrollView

iOS UIScrollView 动画后的动画