4

我目前正在使用 CCScrollLayer(在 cocos2d 扩展类中)类来实现菜单系统。它工作得很好,但我想在屏幕上有其他按钮,默认情况下可滚动区域是整个屏幕。

我尝试弄乱内容大小但没有骰子。在做了一些阅读之后,我发现内容大小设置为每个 CCLayers 行为的屏幕大小。一位用户建议将其包装在 CCNode 中并进行缩放,但这并没有帮助。

任何建议或示例代码?我不得不认为这应该是可能的。

4

3 回答 3

0

CAScrollLayer出乎意料地简单,这可能会令人困惑。

只需向其中添加内容层:

[_scrollLayer addSublayer:_contentLayer];

要设置您希望在屏幕设置边界或滚动层框架上可见的矩形:

[_scrollLayer setBounds:visibleBounds];

分别设置内容的大小。内容的大小可以更大或更小,没关系。

[_contentLayer setBounds:currentContextBounds];

如果内容较大并且您想滚动到某个点,请使用滚动层的方法scrollToPoint:scrollToRect:方法。

如果需要,您需要实现自己的滚动指示器、条等。

于 2011-11-04T06:18:55.277 回答
0

虽然我使用的是表格视图而不是滚动视图,但它们共享相同的父级 [滚动视图 doh]。设置内容大小后是否打开了 clipToBounds?

我会推荐使用这个构造函数:

/**
 * Init this object with a given size to clip its content.
 *
 * @param size view size
 * @return initialized scroll view object
 */
- (id)initWithViewSize:(CGSize)size;
于 2011-11-04T07:50:15.840 回答
0

感谢大家的帮助,不幸的是,如果基本上不重写大量代码,您似乎无法更改 CCLayer 的大小(或者 contentSize 对触摸事件没有影响)。

但是,我发现了一种似乎可行的解决方法。在 ccTouch 事件开始和移动中,我在将 UITouch 转换为 cocos2D 空间后检查了我想要的边界。如果它们不在我的范围内,我会返回,并且在移动的情况下我手动调用 TouchEnded。TouchEnded 还会检查初始触摸点,如果超出范围,则忽略它。

事情似乎按预期工作。如果我找到它,我会发布更多信息。再次感谢大家。

于 2012-05-27T06:06:54.403 回答