Facebook在推出Paper这款创新产品后,并未止步于仅仅将其作为一款概念产品,而是将其实用性的核心——动画引擎POP(Physics-Oriented Programming)开源到了GitHub上(<https://github.com/facebook/pop>)。这一举动类似于三年前Facebook曾发布的iOS UI框架Three20(<https://github.com/facebookarchive/three20>),显示出Facebook对于技术共享和社区贡献的重视。
POP的开源获得了巨大的成功,仅在短时间内,GitHub上的星标数量就突破了6000个,表明它在开发者社区引起了热烈反响。POP的开发者Kimon Tsinteris是Push Pop Press的联合创始人,曾是苹果公司的高级工程师,参与了iPhone和iPad关键功能的研发,如指南针和地图。2011年被Facebook收购后,他成为了Facebook iOS团队的一员,继续推动着Facebook产品的动画设计和优化。
Kimon Tsinteris的Push Pop Press致力于创造更为真实、具有物理效应的用户体验,这种理念催生了POP。POP采用Objective-C++编写,这是因为在Objective-C++中融入了C++的语法特性,为开发者提供了更多的灵活性和便利性。Objective-C++是Objective-C的一种扩展,它保留了Objective-C的优点,同时引入了C++的一些特性,比如类继承和模板。
POP的核心架构包括四个部分:Animations(动画)、Engine(引擎)、Utility(工具)和WebCore(Web核心)。其中,关键组件是POPAnimator,它利用CADisplayLink实现60FPS的流畅动画,确保了游戏级别的性能。不同于NSTimer,CADisplayLink专注于画面重绘和动画更新,不受CPU阻塞影响,而是按照帧间隔进行精确控制,从而确保动画的实时性和一致性。
POP作为Facebook开源的一款动画引擎,凭借其先进的物理模拟技术和Objective-C++的使用,不仅提升了用户体验,也展示了Facebook在技术革新方面的持续努力。它的开源不仅促进了技术社区的成长,也为其他开发者提供了宝贵的实践资源和灵感,推动了移动应用界动画技术的发展。