侯成 - Cocoa 开发者访谈

Aaron Brethorst,2013年4月16日

Cocoa 控件:你是谁?你在做什么?

侯成:我叫侯成,是一名在新加坡的 iOS 开发者。我喜欢设计和编程,尤其热爱创建自定义 UI。我从像 PaperFold 这样的开源项目中开始了分享这种热情。

我共同创立了buUuk,一家位于新加坡的移动应用程序开发公司。我们相对年轻,目前有18名员工。我们提供从前端移动客户端到后端服务器服务的一切。我们为 iOS、Android 和一点黑莓开发应用程序。

最近,我和我的好朋友 Junjie 一起开始了新的公司。他创造了流行的Dueapp。我们很快将推出我们的第一个应用程序。

CC:你的 iPhone 主屏幕上有什么?

HC:我经常使用 Safari、Reeder 和 Due。我在坞中有一个文件夹,以便在第一页中装入更多应用程序。我有很多应用程序,所以我大多数时候都使用 spotlight 来查找应用程序。

CC:你是如何、为什么、什么时候成为 iOS 开发者的?

HC:我在 2008 年早期开始 iOS 开发。在做生物学的硕士研究期间,我有一些空闲时间来玩我新的 iPhone。当时没有 App Store,也没有官方的 iOS SDK,所以大多数编码都不得不使用基本的文本编辑器来完成,应用程序只能部署到越狱过的手机上。

我第一个 iPhone 应用程序是一个交通指南。我每天花费大量时间通勤,所以这个应用程序是为了解决一个贴近我心的难题而设计的。那时我并没有多少编程背景,所以尽管这个应用程序只是一个花哨的 plist 阅读器,但这也让我花费了整整3个月的时间。

我从开发那个第一个应用程序中学到了很多东西,并爱上了应用程序创建。我喜欢将想法转化为产品,这让我每天都能够热爱我所做的事情。

我最受欢迎的应用程序仍然是基于我制作的第一个应用程序的 SG NextBus 和 SG Buses。它们在新加坡的下载量超过了 200 万。

CC:你犯过的一个错误是什么,你不希望再次犯同样的错误?

HC:错误的是认为越多越好。我在很多应用程序中都犯过功能膨胀的错误。

CC:你在软件开发生涯中做出的最好决定是什么?

HC:我最好的决定是加入 buUuk。

在我研究生学习的最后阶段,我对研究的兴趣在下降,对于将其作为职业生涯的追求感到担忧。当时,我发现了自己对应用程序创建的兴趣,但只将其视为一个爱好或周末项目。然而,当我的第一个付费应用程序产生了收入并引起了极大的兴趣时,我意识到我实际上可以因为我喜欢的事情而谋生。

巧合的是,我被 Jon 和 Mohan 接触到,开始创建一个手机餐厅指南的公司。我抓住了这个机会,我们两周一后就有了第一个原型。buUuk 的重点已经改变,但我仍然非常热爱我的工作。我们与多元化的客户合作,开展各种有趣的项目,这些都为我在应用程序开发的不同方面表达自己、探索提供了游乐场。

CC:你最喜欢的开源组件是什么?为什么?

HC:我在几乎所有的应用中都用到了AFNetworking。它设计良好,有强大的社区支持,并且获得了许多更新和改进。

在创建开源组件时,需要投入大量思考。为了让它们更灵活,你必须泛化使用场景,避免过于具体的实现。这和做应用很像,只是你的用户是开发者。我认为我在这方面还有点挣扎,但我试图从现有的优秀开源项目中学习。

CC:关于你,我们还需要了解什么?

HC:我喜欢动漫、帆船和滑板风帆。

CC:你在开源项目上的工作如何影响了你的职业?是否有潜在客户因为你的工作而联系你,或者你注意到其他好处吗?

HC:有人找我合作,但我认为最有趣的部分是它让我有机会了解其他开发者。这对我来说是一个学习经历。

CC:我认为你的Paperfold项目绝对让人惊艳。你是如何想到这个概念的,实现它时遇到了什么特定的挑战吗?

HC:很简单。想法来自地图折叠的方式,但我发现它在许多其他场景中都很有用。

我对CATransform3D不熟悉,但我的一个同事很懂。@dilliontan给我做了一个快速介绍,让我可以开始。我试了又试,有过很多错误。

PaperFold使用视图的切片截图来创建折叠效果。所有基于截图的动画在方向改变和大视图方面可能有相同的限制。

当我完成了PaperFold后,我无法立即发布库,因为在iOS 6 Beta中使用UIGraphicsBeginImageContextWithOptions()时,我得到的截图是黑色的。我去参加了几个WWDC研讨班,试图找出原因。我从地图研讨班被引导到OpenGL研讨班,然后再回到地图研讨班,直到有人告诉我这是一个bug,让我提交报告。在那之后的两个版本中修复了这个bug。一位地图工程师还建议我在折叠的交替视图中添加阴影,使其看起来更逼真。

CC:你对其他iOS开发者有什么建议,让他们能最好地构建美丽、流畅、可重用的组件?

HC:基于截图的动画最大的局限是获取图像的时间。如果你的组件使用大视图并且没有方法绕过它,请避免这样做。

记得如果你使用CALayer阴影,请使用shadow path,但使用图像更好。小心使用CALayer掩码。我在使用带有动画的掩视图或在掩视图内使用动画方面并不成功,它们往往会降低帧率。

尽量根据内置组件来设计你的组件。这对于开发者来说更容易使用。PaperFold是一个不好的例子,因为没有我可以效仿的等效组件。但我正在创建新的组件,使用PaperFold使其更易于使用。我创建了PaperFoldMenuController,它封装了PaperFold,可以替换UITabBarController,还有PaperFold展示馆,它类似于水平表格视图。后一个尚未发布,但很快就会到来。


在Twitter上关注Hon Cheng

在他的Cocoa Controls上查看他所有的项目

GitHub

你有建议,告诉我们下一个应该采访谁吗?请通过[email ;protected]告诉我们。