【此文部分内容载录 http://blog.csdn.net/xujiezhige/article/details/8558999】
近期工作中要使用CCScrollView,但是网上相对的资料比较少,而且在使用过程中有很多莫名其妙的问题,我先写下CCScrollView的简单使用方法,待所有问题都解决了,再补充上我遇到的问题。
首先我使用的为2.0.4版本,据说2.0.3版本CCScrollView有很大问题,不建议使用那个版本的此控件。
那么CCScrollView是extensions库里面东西,所以要首先引入头文件
在.h下入下面代码
#include "cocos-ext.h"
USING_NS_CC_EXT;
然后你所定义的Layer必须继承CCScrollViewDelegate并实现
void scrollViewDidScroll(CCScrollView* view);
void scrollViewDidZoom(CCScrollView* view);
代码如下:
class myScrollView : public cocos2d::CCLayer ,public CCScrollViewDelegate
{
public:
void scrollViewDidScroll(CCScrollView* view);
void scrollViewDidZoom(CCScrollView* view);
//****其他的函数***
}
到这里先不急着写代码,我先讲一下CCScrollView的一些属性
1,CCScrollView有两个重要个概念 一个是可视化区域View 一个是容器区域Container
View就是CCScrollView可以显示的区域,同时也是可以接受触摸消息的区域,即玩家可以滚动的大小。
2,Container是CCScrollView的直接子节点。其大小即可以滚动的内容面板大小。举个常见的例子:如果View大小是(200,200),Container大小是(200,800),那么我们就可以滚动Container以显示其不同区域。
3,CCScrollView创建后,默认将Container的左下角于自身的左下角对齐,即从Container的底部区域开始显示。例如:上面的例子,CCScrollView中显示的是Container最下方的(200,200)区域,而不是顶部的(200,200)区域。
4,Container的初始位置可以进行调用setContentOffset()进行偏移,这样就可以让Container的顶部作为一开始的显示区域。
5,调用CCScrollView::addChild的节点,都会被CCScrollView更改锚点和坐标。新的锚点值和坐标值都将是(0,0)。这也是为什么Container一开始会在CCScrollView的左下角的原因,如果CCScrollView有了Container(无论是你提供的,还是默认创建的),那么addChild( A ),会将A节点作为Container的直接子节点。
6,当Container的大小小于CCScrollView的大小的时候,CCScrollView一旦被滚动,就会试图将Container位置重置为创建时的位置,也就是将Container放在CCScrollView的左下角。
// CCScrollView
scrollView = CCScrollView::create(); //创建一个scrollview
CCLayer *layer = CCLayer::create(); //创建一个层,作为滚动的内容
for (int i=1;i<=6;i++)
{
CCSprite *sprite = CCSprite::create("HelloWorld.png");
sprite->setScaleX(2.0);
sprite->setScaleY(1.0);
sprite->setPosition(ccp(size.width*(i-0.5),size.height/2+25));
layer->addChild(sprite);
}
layer->setAnchorPoint(CCPointZero);
layer->setPosition(CCPointZero);
scrollView->setPosition(CCPointZero);
scrollView->setContentOffset(CCPointZero);
layer->setContentSize(CCSizeMake(480*6, 320)); //设置滚动区域的大小
scrollView->setViewSize(CCSizeMake(480, 320));//设置显示区域大小(我曾经错设了setContentSize结果我悲剧了)
scrollView->setBounceable(false);//设置是否反弹效果
scrollView->setContainer(layer); //设置需要滚动的内容
scrollView->setTouchEnabled(false); //因为要自己实现触摸消息,所以这里设为false
(未完待续******)