第一次动画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】:zoomScale
和 contentOffset
属性是不可动画的,因此在 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的实现原理与阻尼动画