PastryKit

原文链接;作者: John Gruber

iPhone 上的类 WebOS。作者制作了两段视频,左侧是在 iPhone 模拟器上的演示效果,右侧是在 Safari 上。点此观看

这里(Daring Fireball 网站,作者的个人博客。)近来的主题之一是 iPhone OS 上的网页程序 — 为 iPhone 和 iPod touch 而做的程序,但只使用 HTML,CSS 和 JavaScript。我也谈了 iPhone 网页程序能提供什么程度的用户体验和相比原生 Cocoa Touch 程序的开发难度。

iPhone 网页程序在滚动方面尤逊原生应用。拿长列表来说,比如所有联系人的地址,或者 iPod 程序中里的所有歌曲,当你滚动这些列表的时候,手指一扫,列表会快速滚动。这种效果很像滚动一个阻力极小的轮子。虽然你可以做一个外表非常相似,甚至与 iPhone 原生程序中的列表一摸一样的网页程序,但是却无法做到上述效果。在 iPhone 上浏览网页的感觉像是有很大的滚动阻力。

这种阻力的存在对于在小屏幕上显示常规网页的 iPhone 是合理的,我所指的「常规」意思是「没有为在 iPhone 上显示而特别优化过的网页」,但这种阻力在为 iPhone 优化过的网页程序上却显得缓慢而阻塞。

如果你从未留意过这些,现在试试,将这个名为 Showtime (在此程序点击「Watchlist」,再点击「+」,会出现可以滚动的一个长列表)的 iPhone 网页程序与原生程序比较。另外一个不错的对比是用原生的 iPhone Twitter 客户端如 Tweeite 或 Birdfeed ,与 iPhone 网页 Twitter 客户端如 Hahlo 和新 Mobile Twitter。区别是显著的,而且不仅限于外观。如同贾斯丁·威廉姆斯(Justin Williams)近来所写:

假如苹果允许开发者调整 Mobile Webkit 中滚动与拖曳的系数,我相信随着在 MobileSafari 中增加新的网页技术,像 Halo、PocketTweets 和 Showtime 这样的程序可以成为原生程序之外的另一选择。对比 Hahlo 和 Tweetie 的滚动速度,结果极为不同。Tweetie 随手指力道而变,而 Hahlo 像是有所束缚。

滚动并非网页程序不及原生程序的唯一问题,另一个问题是 MobileSafari 不允许 CSS 固定定位元素(CSS fixed-position element),因此无法使工具栏固定在屏幕的顶端或底部不随正文滚动。

而这只是用户体验方面的问题,另一方面是开发。上个月我说过:

由于 Cocoa Touch 框架的存在,Cocoa Touch 程序无需从头写起,如同法鲁克·阿泰什(Faruk Ateş)在对科赫(Koch)的回应中敏锐的指出,轻视这个框架,即是轻视所有使 iPhone 超过其他开发平台的东西。这不仅使原生程序比起相似的网页程序更加快速可靠,而且易于书写。

有些读者反对,争论……但我不是要表达 Cocoa Touch 框架有多好,原生 iPhone 程序比网页程序更难开发,因为不仅要学习程序框架(Cocoa),也要学习一门新的编程语言,Objective-C。但这确实不是公平的对比,就像是一个不会骑车的人说,跑步比骑车容易。

说的简单一些。例如创建一个有着绝佳设计和用户体验的 iPhone 程序,为了做好每一件事 — 软件或其他 — 这个人需要天分、经验、通晓必要的工具。若你已是专家级网页开发者,但从未编写过 Cocoa 软件,那么当你能够尝试着开发一个原生的 iPhone Cocoa Touch 程序之前,在你面前的是大量的时间支出。但同样的,经验老道的 Cocoa Mac(和少数从 NeXT 时期以来的)开发者也不知道如何通过 HTML、CSS 和 JavaScript 创建一个现代的 AJAX-y 网页程序 — 而且他们认为 JavaScript 不是通常的开发语言。

有天赋的 Cocoa Touch 开发者进行移植的难度比同样有天赋的网页程序开发者更容易。Cocoa Touch 框架让所有事情变得自由简单,例如平滑快速的动画切换;布置按钮、列表和工具条。

确有一些为 iPhone 网页开发者准备的开源框架,由此开发者不需要从头开始仿制 Cocoa Touch 的用户界面元素。由乔·休伊特(Joe Hewitt)在初代 iPhone 发布后仅数周时间公布的 iUI 是其中之一。 另一个是大卫·金田(David Kaneda)以 jQuery 开发的 jQTouch。(Showtime 用的是 jQTouch)

但这些框架没有修正滚动速度/阻力和固定位置元素的问题。

然而事情以一家开发过一款令人吃惊的 iPhone 网页程序框架而做结,这个框架:

  • 完全隐藏了地址栏,甚至是从 MobileSafari 内直接运行。
  • 支持固定位置工具栏,不会随滚动而消失。
  • 而且:有自己的滚动阻力系数,滑动长列表成为可能。

这个框架背后的公司是苹果,而这个框架的名字据说叫做 PastryKit。