Cocoa 控件:你是谁?你在做什么?
陈晖:我是陈晖,新加坡的一名 iOS 开发者。我喜欢设计和编程,特别是喜欢创建自定义 UI。我从像 PaperFold 这样的开源项目中开始,就是想分享那种热情。
我共同创立了buUuk,新加坡的一家移动应用程序开发公司。我们相对年轻,目前有 18 名员工。我们涵盖了从前端移动客户端到后端服务器服务的各个方面。我们开发 iOS、Android 应用,还有一点点的 Blackberry 应用。
最近,我和好友 Junjie 一起开始了新的公司。他创建了流行的Dueapp。我们的第一个应用将会很快推出。
CC:你的 iPhone 主屏幕有什么应用?
HC:我经常使用 Safari、Reeder 和 Due。我在 dock 中有一个文件夹以便将更多应用放在首页。我有很多应用,所以大部分时候我使用 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(@dilliontan)给了我一个快速的介绍,让我可以开始。我经历了大量的尝试和错误。
PaperFold使用视图的截图来创建折叠效果。所有基于截图的动画在方向改变和大视图方面可能都有相同的限制。
完成PaperFold后,我不能立即发布库,因为我使用MKMapView
和UIGraphicsBeginImageContextWithOptions()
时,在iOS 6 Beta中得到了黑屏截图。我去了几次WWDC的实验室,想找出原因。从一个地图实验室被指引到OpenGL实验室,然后再回到地图实验室,直到被告知这是一个bug,需要提交报告。这个bug在那之后的两个版本中得到了修正。一位地图工程师还建议我给折叠的交替视图添加阴影,使其看起来更真实。
CC:你对其他iOS开发者有什么建议,关于如何最好地构建漂亮、流畅、可重用的组件?
HC:基于截图的动画最大的限制是获取图像所需的时间。如果你的组件使用了大视图且没有绕过这个限制的方法,请避免这种情况。
记得如果你使用了CALayer
阴影,要使用阴影路径,但使用图像会更好。小心使用CALayer
蒙版。我尝试在动画中使用蒙版视图或动画中的蒙版视图并不成功,它们往往会降低帧率。
尝试将你的组件建模为现有组件。这会让开发者更容易使用。PaperFold是一个不好的例子,因为没有一个我可以模仿的等效组件。但我在创造新的组件时使用了Paperfold,使其更容易。我创建了PaperFoldMenuController,它围绕PaperFold进行包装,可以替代UITabBarController,还有PaperFold gallery,它类似于一水平表格视图。后者尚未发布,但即将推出。
关于我们下次应该采访谁,你有建议吗?请通过[email protected]告诉我们。