我正在开发基于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];
可以导致动画。如果有人知道如何以更清洁的方式预防,请告诉我。
答案 0 :(得分:2)
如果animateWithDuration:...
调用是在堆栈上,那么您可以动画制作的任何内容都是可动画的。在addSubview:
电话上设置一个断点,看看堆栈上有什么。
你也可以试试这个:
[UIView performWithoutAnimation:^{ // Note: available since iOS7.
[self.scrolledView addSubview:page];
}];