把 COSLayout 移植到 Cocos2D

前段时间接触了 Cocos2D-ObjC(以下简称 Cocos2D)这个 iOS 游戏框架。

在 Cocos2D 中,所有能在屏幕上绘制的对象都是 CCNode 对象。它在 Cocos2D 中的地位跟 UIView 在 Cocoa 中的地位一样。

Cocos2D 不支持 Auto Layout,因为 CCNode 没有继承 UIView。当我使用代码或 SpriteBuilder 布局一些静态场景时,发现很多地方都需要手动计算 CCNode 的大小和位置。感觉突然回到了石器时代。手动计算的过程对我来说太无聊了。

我突然想到了之前创造的 COSLayout。它可以用约束的方式来布局 UIView。不过,还是因为 CCNode 没有继承 UIView 的原因,COSLayout 不兼容 Cocos2D。于是,我打算把 COSLayout 移植到 Cocos2D 上。

COSLayout 的实现依赖于 UIView 提供的下列 API:

- (void)didMoveToSuperview;
- (void)layoutSubviews;

要想把 COSLayout 移植到 Cocos2D,CCNode 必须也要有类似的 API 才能满足移植条件。幸运的是,CCNode 提供了类似的 API:

- (void)setParent:(CCNode *)parent;
- (void)contentSizeChanged;

最终,COSLayout 顺利地移植到了 Cocos2D 上,即 CCSLayout

后来,我把 CCSLayout 发到了 Cocos2D 论坛里面,Cocos2D 的作者表示很有趣。

论坛链接