iphone - iPhone 的 UIView 的自定义滚动条(使长滚动不吸)

标签 iphone objective-c uiview uiscrollview scroll

在帖子中,Making Long Scrolls on the iPhone Not Suck , Aza Raskin 描述了另一种滚动条控件,它更适合在很长的页面上移动:

Sticky Scroll Indicator

滚动条“保持一段时间”以激活它并不重要;我只需沿着 iPhone 屏幕的右边缘滑动即可捕获滚动条 handle 。这个想法是,如果我在物理屏幕上将 handle 向下拖动 3/4,我就会在页面上向下拖动 3/4。

Dropbox iPhone 应用程序(它很棒,顺便说一句!)具有用于长 PDF 文档的这种滚动条。常规滚动是通过在 handle 以外的任何地方拖动来完成的;拖动 handle 将 View 移动到该位置。这似乎是“从头开始”实现的,因为我认为 SDK 不够灵活,无法自定义现有滚动条的行为。

但是,Dropbox 使用 native 文档查看器在 iPhone 上显示文档,因此他们以某种方式为其添加了滚动条功能。看到滚动条句柄了吗?您可以拖动它以快速到达文档中的其他位置。

Dropbox scrollbar at the top Dropbox scrollbar at the bottom

这个概念非常类似于索引栏在 UITableView(即 Contacts.app)中的工作方式;索引显示为表格右侧的一个栏(例如,“a”到“z”),您可以触摸特定标签以跳转到目标部分。然而,在这种情况下,一个很长的页面没有部分,它应该适用于一般用途的滚动,而不是跳转到部分。

那么我该如何着手实现这种滚动方法呢?我正在寻找一般想法和具体实现细节。如果存在开源实现,我也很感兴趣(这似乎是一个通用的问题/解决方案)。

最佳答案

总体思路:

我捕获了 Dropbox 应用程序(它很棒)并试了一下。看起来 pdf 查看需要一些照片应用程序,因为它有条件地显示半透明的导航栏和触摸工具栏,除了支持滚动条。我很确定发生的事情是他们有一个自定义 View Controller 拦截触摸并做出相应的 react 。

触摸:

  1. 如果是点击,显示/隐藏 导航栏和工具栏。
  2. 如果开启 洗涤器,开始跟踪 触摸并滚动 scrollview/webview(无论它们是什么 显示)。我确定 滚动很简单,比如 scrollView.contentOffset = CGPointMake(0, (scrubber.y/[UIScreen mainScreen].bounds.size.height) * ScrollView .contentSize.height)。 3)
  3. 否则,将触摸传递给 封闭的 View 。

PDF 显示可能还有其他隐藏的魔法(我从来没有在 cocoa touch 中做过)但有些事情告诉我这是他们的基本过程。

关于iphone - iPhone 的 UIView 的自定义滚动条(使长滚动不吸),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4338618/

相关文章:

ios - 如何同步两个 NSURLSessionDataTasks?

iphone - 使用条件语句以编程方式切换UIButton文本

xcode - 如何将 IBOutlet 连接到 UIView?

ios - 如何控制 UIViewController 的 View 框架

ios - 以编程方式添加UIButton时不可单击

iphone - 当我从 Xcode 为 iOS 模拟器编译和部署应用程序时,编译后的 .ipa 位于何处?

iphone - AVPlayer 在后台播放视频

iphone - iOS UIView 动画问题

iphone - UITableView 一次添加带有动画的行,但延迟显着

iphone - MPMoviePlayerController thumbnailImageAtTime :timeOption: simple case doesn't work