适用于iPhone UIView的自定义滚动条(长卷轴不吸吮)

Rud*_*ger 33 iphone scroll objective-c uiscrollview uiview

在一篇文章中,在iPhone上制作长卷轴并非糟糕,Aza Raskin描述了一种替代滚动条控件,它更适合在非常长的页面上使用:

粘滞滚动指示器

滚动条"保持一段时间"以激活它并不重要; 我很好,只需沿着iPhone屏幕的右边缘滑动即可抓住滚动条手柄.我的想法是,如果我在物理屏幕上向下拖动手柄3/4,我将在页面上向下移动3/4.

Dropbox iPhone应用程序(它很棒,顺便说一下!)就是这种滚动条适用于长PDF文档.通过拖动手柄上的任何位置来定期滚动; 拖动手柄会将视图移动到该位置.这似乎是"从头开始"实现的,因为我认为SDK不够灵活,无法自定义现有滚动条的行为.

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

顶部的Dropbox滚动条 底部的Dropbox滚动条

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

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

kev*_*boh 7

总体思路:

我抓住了Dropbox应用程序(很棒)并且玩了一下.看起来pdf查看需要一些照片应用,因为它除了支持滚动条外,还有条件地在触摸上显示半透明的导航栏和工具栏.我很确定发生了什么,他们有一个自定义视图控制器拦截触摸和相应的反应.

一触即发:

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

可能还有其他隐藏的魔法与PDF显示(我从未在可可触摸中做过)但有些东西告诉我这是他们的基本过程.

  • 注意,这应该是[UIScreen mainScreen] .bounds.size.height而不是480来占iPhone 5. (2认同)