【发布时间】:2010-11-01 19:41:59
【问题描述】:
好的,我认为是时候在互联网上为这个问题建立一个官方位置了:How to make a UIScrollView photoviewer with paging and zooming。欢迎我的同胞UIScrollView黑客。
我有一个启用了分页的UIScrollView,我正在显示UIImageViews,就像内置的照片应用程序一样。 (这听起来是不是很熟悉?)
我在github上找到了以下项目:
https://github.com/andreyvit/ScrollingMadness/wiki
这显示了如何在启用分页时在滚动视图中实现缩放。如果其他人尝试这样做,我实际上必须删除 UIScrollView 子类并使用本机类,否则它不起作用。我认为这是因为 3.0 SDK 中有关滚动视图如何拦截触摸事件的更改。
所以想法是在开始缩放时删除所有其他视图,并将当前视图移动到 scrollview 中的 (0, 0),更新 contentsize 等。然后当您缩放回 1.0 f 它将其他视图添加回来并将所有内容恢复原状。
无论如何,该项目在模拟器中运行良好,但在设备上,您正在调整大小的视图有一些令人讨厌的移动,这看起来是由于我们正在更改 contentsize/offset 等事实造成的。用于调整大小的视图。您必须移动此视图,否则您可以通过其他视图留下的空白向左平移。
我在3.0 SDK release notes的“已知问题”中发现了一个有趣的注释:
UIScrollView:缩放后,内容插入被忽略,内容留在错误的位置。
这听起来像是这里正在发生的事情。放大后,由于您更改了偏移等,视图将移出屏幕。
我已经在这方面花费了几个小时,但我正在慢慢意识到这根本行不通。
Three20 的照片查看器是不可能的:它太重了,而且有太多不必要的 UI 和其他行为。
内置的照片应用似乎有一些魔力。如果您放大图像并平移到远边缘,则当前照片会独立于旁边的照片移动,这不是您在使用标准 UIScrollView 时所得到的。
我看过关于嵌套UIScrollView 的讨论,但我真的不想去那里。
有没有人用标准的UIScrollView 管理过这个(并且在 2.2 和 3.0 SDK 中工作)?我不喜欢滚动自己的缩放 + 弹跳 + 平移 + 分页代码。
【问题讨论】:
-
作为 ZoomScrollView 的作者,我正在基于嵌套滚动视图开发与 3.0 SDK 兼容的更新版本。运行后会在此处回复。
-
我还注意到,如果您稍微缩放一下,松开,然后再次开始缩放,就不会出现错误的翻转/移动。令人沮丧。
-
3.0 中破坏 ScrollingMadness 代码的更改的目的正是为了允许嵌套滚动视图。所以理论上,内置照片应用程序的行为应该在 3.0 中更加直接。
-
嗯,我已经通过嵌套 UIScrollViews 几乎解决了 3.0 的问题,尽管我不太确定它是如何神奇地工作的。问题是我也需要代码在 2.2+ 上工作,并且没有合理的方法让它在两者上工作。有时间我会尝试抛出一些代码。
-
我认为如果不编写自己的滚动视图,您将无法获得在 2.2 和 3.0 上运行的单个代码库。在 3.0 中,传递事件的方式发生了很大变化。
标签: ios iphone uiscrollview