我正在开发一个文档查看器应用程序,基于 Apple 的 PhotoScroller 示例 (https://developer.apple.com/library/IOs/samplecode/PhotoScroller/Introduction/Intro.html)。
我响应缩放和滚动事件以加载进入 View 的新页面,回收旧页面以减少创建新页面的开销。
我在应用程序中也有自动缩放功能(通过 zoomToRect
或通过设置 contentOffset
)。在缩放和滚动事件的处理程序中,我根据需要添加新页面:
[self configurePage:page forIndex:index]; //sets frame, loads image,...
[self.scrolledView addSubview:page];
让我吃惊的是,有时我会看到一个页面从左到右飞过屏幕。通过一些日志记录,我确定这是一个新页面(以前从未使用过)。
这怎么会发生?我该如何预防?
期待您的提示....
ETA:当应用程序放大到一个页面时,我使用 [UIView animateWithDuration: ...]
block 中的 [UIScrollView zoomToRect:animate:NO]
来做到这一点可以控制动画速度。
我现在通过配置和添加在动画期间可见的所有页面并仅在之后使用 [UIView animateWithDuration: ...]
启动动画来实现我想要的行为。
令我惊讶的是,在缩放和滚动事件处理程序中调用 [self.scrolledView addSubview:page];
会导致动画。如果有人知道如何以更清洁的方式防止这种情况发生,请告诉我。
最佳答案
如果 animateWithDuration:...
调用在堆栈上,则您所做的任何可动画化的操作都将被动画化。在您的 addSubview:
调用上设置一个断点,然后查看堆栈中有什么。
你也可以试试这个:
[UIView performWithoutAnimation:^{ // Note: available since iOS7.
[self.scrolledView addSubview:page];
}];
关于ios - 为什么在我的 ScrollView 中添加 subview 时会出现不需要的动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27252486/