在帖子中,Making Long Scrolls on the iPhone Not Suck , Aza Raskin 描述了另一种滚动条控件,它更适合在很长的页面上移动:
滚动条“保持一段时间”以激活它并不重要;我只需沿着 iPhone 屏幕的右边缘滑动即可捕获滚动条 handle 。这个想法是,如果我在物理屏幕上将 handle 向下拖动 3/4,我就会在页面上向下拖动 3/4。
Dropbox iPhone 应用程序(它很棒,顺便说一句!)具有用于长 PDF 文档的这种滚动条。常规滚动是通过在 handle 以外的任何地方拖动来完成的;拖动 handle 将 View 移动到该位置。这似乎是“从头开始”实现的,因为我认为 SDK 不够灵活,无法自定义现有滚动条的行为。
但是,Dropbox 使用 native 文档查看器在 iPhone 上显示文档,因此他们以某种方式为其添加了滚动条功能。看到滚动条句柄了吗?您可以拖动它以快速到达文档中的其他位置。
这个概念非常类似于索引栏在 UITableView(即 Contacts.app)中的工作方式;索引显示为表格右侧的一个栏(例如,“a”到“z”),您可以触摸特定标签以跳转到目标部分。然而,在这种情况下,一个很长的页面没有部分,它应该适用于一般用途的滚动,而不是跳转到部分。
那么我该如何着手实现这种滚动方法呢?我正在寻找一般想法和具体实现细节。如果存在开源实现,我也很感兴趣(这似乎是一个通用的问题/解决方案)。
最佳答案
总体思路:
我捕获了 Dropbox 应用程序(它很棒)并试了一下。看起来 pdf 查看需要一些照片应用程序,因为它有条件地显示半透明的导航栏和触摸工具栏,除了支持滚动条。我很确定发生的事情是他们有一个自定义 View Controller 拦截触摸并做出相应的 react 。
触摸:
- 如果是点击,显示/隐藏 导航栏和工具栏。
- 如果开启
洗涤器,开始跟踪
触摸并滚动
scrollview/webview(无论它们是什么
显示)。我确定
滚动很简单,比如
scrollView.contentOffset = CGPointMake(0, (scrubber.y/[UIScreen mainScreen].bounds.size.height) * ScrollView .contentSize.height)
。 3) - 否则,将触摸传递给 封闭的 View 。
PDF 显示可能还有其他隐藏的魔法(我从来没有在 cocoa touch 中做过)但有些事情告诉我这是他们的基本过程。
关于iphone - iPhone 的 UIView 的自定义滚动条(使长滚动不吸),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4338618/