CCScrollView使用方法

来源:互联网 发布:mysql offset查询优化 编辑:程序博客网 时间:2024/04/25 09:11
因为官方没有提供CCScrollView的例子,所以我简单的总结了一下CCScrollView的使用,以供像我这样的新手在初学的时候参考。
一、创建
2.1.0下的能用的创建CCScrollView的方法有四种,但是有两种不推荐使用
  1. CC_DEPRECATED_ATTRIBUTE static CCScrollView* viewWithViewSize(CCSize size, CCNode* container = NULL); //已不推荐使用
  2. CC_DEPRECATED_ATTRIBUTE static CCScrollView* node(); //已不推荐使用
  3. static CCScrollView* create();
  4. static CCScrollView* create(CCSize size, CCNode* container = NULL);
复制代码
剩下两种,写法虽有区别,但是归纳起来,使CCScrollView 能正常工作的要素就三个。一、创建一个CCScrollView 的实例;二、设置容器大小(内容尺寸);三、设置显示(可视)范围。第一、二点是必须的,第三点视使用的创建方法不同,不需要单独写。举例如下:
  1. CCScrollView* scrollView = CCScrollView::create(); // 创建一个实例
  2. scrollView->setContentSize(CCSizeMake(960, 720)); //设置容器大小(内容尺寸)
  3. scrollView->setViewSize(CCSizeMake(480, 360)); //设置显示(可视)范围 
  4. this->addChild(scrollView);
复制代码
  1. CCScrollView* scrollView = CCScrollView::create(CCSizeMake(480, 360)); // 创建实例 同时设置了显示(可视)范围 
  2. scrollView->setContentSize(CCSizeMake(960, 720)); // 设置容器大小(内容尺寸)
  3. this->addChild(scrollView);
复制代码
setContentSize 是必须的步骤,不然会导致CCScrollView 不能滚动。
二、容器
CCScrollView在工作的时候需要用到一个容器来装所有可以滚动的内容物,即滚动层。默认会自行创建CCLayer的实例作容器,容器的锚点设置在左下角。
  1. if (!this->m_pContainer)
  2. {
  3.             m_pContainer = CCLayer::create();
  4.             this->m_pContainer->ignoreAnchorPointForPosition(false);
  5.             this->m_pContainer->setAnchorPoint(ccp(0.0f, 0.0f));
  6. }
复制代码
但是如果你需要用其他容器的话,你可以在create的时候自行指定。比如用CClayerColor
  1. CCLayerColor* layer = CCLayerColor::create(ccc4(255, 255, 255, 255), 960, 720);

  2. CCScrollView* scrollView = CCScrollView::create(CCSizeMake(480, 360), layer);
  3. scrollView->setContentSize(CCSizeMake(960, 720));
  4. this->addChild(scrollView);
复制代码
也可以使用 CCScrollView::setContainer 替换现有的容器。用CCScrollView::getContainer可以获得容器的指针。
三、容器大小(内容尺寸)和 显示(可视)范围
举个例子,好比你透过窗户去看风景,你一眼能看到多少取决于窗户有多大,这里窗户的大小就是可视范围。假设你和窗户是不能移动的,如果你想看到其他不在可视范围内的部分,就需要CCScrollView 来帮你移动风景,容器的大小就是风景的大小,也就是风景的尺寸。
再比如有一张1000*1000像素的图片,设定100*100的可视范围,你每次只能看到百分之一的范围,但是通过移动图片的位置,你能看全整张图片。1000*1000就是内容尺寸,100*100就是显示范围。
将一个大的范围遮起来,只露一个小窗口,但是允许你一点一点的滚动,这就是CCScrollView 的工作。
四、内容物
CCScrollView 重载了AddChild,使得非容器本身的元素都会添加到容器上,并且设置内容物的锚点为左下角。
  1. void CCScrollView::addChild(CCNode * child, int zOrder, int tag)
  2. {
  3.         child->ignoreAnchorPointForPosition(false);
  4.         child->setAnchorPoint(ccp(0.0f, 0.0f));
  5.         if (m_pContainer != child) {
  6.                 m_pContainer->addChild(child, zOrder, tag);
  7.         } else {
  8.                 CCLayer::addChild(child, zOrder, tag);
  9.         }
  10. }
复制代码
所以 scrollView->AddChild() 和 scrollView->getContainer()->AddChild(),除了锚点上有差别外,其他的功能应该是一样的。
五、滚动方向
CCScrollView在创建的时候,默认是允许横向和纵向都可以滚动的。
  1. m_eDirection  = kCCScrollViewDirectionBoth;
复制代码
如果你想限制滚动的方向,可以用 setDirection 来设置。kCCScrollViewDirectionHorizontal是允许横向滚动,kCCScrollViewDirectionVertical是允许纵向滚动。
0 0
原创粉丝点击