为滚动视图添加子视图时,为什么会出现不需要的动画?

时间:2014-12-02 15:03:08

标签: ios animation uiscrollview

我正在开发基于Apple(https://developer.apple.com/library/IOs/samplecode/PhotoScroller/Introduction/Intro.html)的PhotoScroller示例的文档查看器应用程序。

我对缩放和滚动事件作出反应,以加载进入视图的新页面,并回收旧页面以减少创建新页面的开销。

我还可以自动放大应用(通过zoomToRect或设置contentOffset)。在缩放和滚动事件的处理程序内,我根据需要添加新页面:

[self configurePage:page forIndex:index]; //sets frame, loads image,...
[self.scrolledView addSubview:page];

令我惊讶的是,有时候我会看到一个页面从左到右飞过屏幕。通过一些日志记录,我确保它是一个新页面(之前从未使用过)。

这怎么可能发生?我怎么能阻止它?

期待您的提示......

ETA:当应用放大页面时,我会使用[UIScrollView zoomToRect:animate:NO]块内的[UIView animateWithDuration: ...]来控制动画速度。

我现在通过配置和添加在动画期间可见的所有页面以及之后仅使用[UIView animateWithDuration: ...]开始动画来实现我想要的行为。

令我惊讶的是,在缩放和滚动事件处理程序中调用[self.scrolledView addSubview:page];可以导致动画。如果有人知道如何以更清洁的方式预防,请告诉我。

1 个答案:

答案 0 :(得分:2)

如果animateWithDuration:...调用是在堆栈上,那么您可以动画制作的任何内容都是可动画的。在addSubview:电话上设置一个断点,看看堆栈上有什么。

你也可以试试这个:

[UIView performWithoutAnimation:^{        // Note: available since iOS7.
    [self.scrolledView addSubview:page];
}];