我目前正在使用 CCScrollLayer(在 cocos2d 扩展类中)类来实现菜单系统。它工作得很好,但我想在屏幕上有其他按钮,默认情况下可滚动区域是整个屏幕。
我尝试弄乱内容大小但没有骰子。在做了一些阅读之后,我发现内容大小设置为每个 CCLayers 行为的屏幕大小。一位用户建议将其包装在 CCNode 中并进行缩放,但这并没有帮助。
任何建议或示例代码?我不得不认为这应该是可能的。
我目前正在使用 CCScrollLayer(在 cocos2d 扩展类中)类来实现菜单系统。它工作得很好,但我想在屏幕上有其他按钮,默认情况下可滚动区域是整个屏幕。
我尝试弄乱内容大小但没有骰子。在做了一些阅读之后,我发现内容大小设置为每个 CCLayers 行为的屏幕大小。一位用户建议将其包装在 CCNode 中并进行缩放,但这并没有帮助。
任何建议或示例代码?我不得不认为这应该是可能的。
CAScrollLayer
出乎意料地简单,这可能会令人困惑。
只需向其中添加内容层:
[_scrollLayer addSublayer:_contentLayer];
要设置您希望在屏幕设置边界或滚动层框架上可见的矩形:
[_scrollLayer setBounds:visibleBounds];
分别设置内容的大小。内容的大小可以更大或更小,没关系。
[_contentLayer setBounds:currentContextBounds];
如果内容较大并且您想滚动到某个点,请使用滚动层的方法scrollToPoint:
或scrollToRect:
方法。
如果需要,您需要实现自己的滚动指示器、条等。
虽然我使用的是表格视图而不是滚动视图,但它们共享相同的父级 [滚动视图 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;
感谢大家的帮助,不幸的是,如果基本上不重写大量代码,您似乎无法更改 CCLayer 的大小(或者 contentSize 对触摸事件没有影响)。
但是,我发现了一种似乎可行的解决方法。在 ccTouch 事件开始和移动中,我在将 UITouch 转换为 cocos2D 空间后检查了我想要的边界。如果它们不在我的范围内,我会返回,并且在移动的情况下我手动调用 TouchEnded。TouchEnded 还会检查初始触摸点,如果超出范围,则忽略它。
事情似乎按预期工作。如果我找到它,我会发布更多信息。再次感谢大家。