ios - 为什么在我的 ScrollView 中添加 subview 时会出现不需要的动画?

标签 ios animation uiscrollview

我正在开发一个文档查看器应用程序,基于 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/

相关文章:

ios - 将数组从 Core Data 转换为 JSON 字符串的最佳方法?

javascript - 如何衡量 jQuery 动画与 CSS3 转换的性能?

c# - 在 WPF 中启动 XAML 动画

ios - 具有许多 subview 的 UIScrollView 性能不佳

ios - 返回 SV 时 ScrollView 中的元素会移动/移动吗?

iphone - 为什么我应该更喜欢 ASIHTTPRequest 而不是 NSURLConnection 从 Web 下载文件?

ios - 即使设置为亮起状态栏也保持黑色

iphone - 如何为 UITableView 滑动删除按钮的关闭设置动画?

ios - 编辑另一个单元格时, Collection View 自动跳转到第一个单元格

ios - 出售离线 map 作为应用内购买