使用CCScrollView实现滑动视图

原文链接不详,从该处转载 http://chinaxiangf.blog.163.com/blog/static/79714331201361584751113/

用CCScrollView来实现滚动页面,不仅简单,而且功能强大。下面简单说下其实现原理。

CCScrollView操作对象是m_pContainer这个节点,当m_pContainer的contentsize比CCScrollView的m_tView大时,就出现只能显示一部分内容了。m_pContainer是一个CCNode,顾其可以容纳所有已CCNode为基类的节点,比如CCLabelTTF,CCSprite等等。

CCScrollView只管m_pContainer,对于其里面放了什么东西是不在乎的。
而m_pContainer这个容器一般放什么里,不妨抽象为一个list,list下面有N个item,item里面可以添加文字,图像,动画等等。
可见把CCScrollView学好,可以把之前很多复杂的事情简单化。
下面贴出代码,希望对大家有所帮助:
头文件:
HelloWorldScene.h

#ifndef __HELLOWORLD_SCENE_H__  
#define __HELLOWORLD_SCENE_H__  
  
#include "cocos2d.h"  
#include "cocos-ext.h"  
  
using namespace cocos2d;  
using namespace extension;  
  
class HelloWorld   
    : public cocos2d::CCLayer  
    ,public CCScrollViewDelegate  
{  
public:  
    virtual bool init();    
    static cocos2d::CCScene* scene();  
    CREATE_FUNC(HelloWorld);  
    virtual void scrollViewDidScroll(CCScrollView* view);  
    virtual void scrollViewDidZoom(CCScrollView* view);  
};  
#endif 

实现文件:

HelloWorldScene.cpp

#include "HelloWorldScene.h"   
  
CCScene* HelloWorld::scene()  
{  
    CCScene *scene = CCScene::create();  
    HelloWorld *layer = HelloWorld::create();  
    scene->addChild(layer);  
    return scene;  
}  
  
bool HelloWorld::init()  
{  
    if ( !CCLayer::init() )  
    {  
        return false;  
    }  
  
    CCSize size = CCDirector::sharedDirector()->getWinSize();  
  
    CCLayer * containLayer = CCLayer::create();  
    int nCurHeight = 0;  
  
    for (int i = 0; i < 50; i++)  
    {  
        char str[10] = {0};  
        sprintf(str, "%d%c%c%c", i,rand()%26+'a',rand()%26+'a',rand()%26+'a');  
        CCLabelTTF * pLabel =  CCLabelTTF::create(str,"",rand()%20+12);  
        pLabel->setPositionY(nCurHeight);  
        pLabel->setAnchorPoint(ccp(0,0));  
        pLabel->setColor(ccc3(rand()%256,rand()%256,rand()%256));  
        nCurHeight += pLabel->getContentSize().height+2;  
        containLayer->addChild(pLabel);  
    }  
  
    CCSprite *sp2 =CCSprite::create("Default.png");  
    sp2->setPositionY(nCurHeight);  
    sp2->setAnchorPoint(ccp(0,0));  
    nCurHeight +=  sp2->getContentSize().height+2;  
  
    containLayer->addChild(sp2);  
    containLayer->setContentSize(CCSizeMake(size.width, nCurHeight ));  
  
  
    CCScrollView * scrollView = CCScrollView::create(CCSizeMake(size.width*2, size.height));  
    addChild(scrollView);  
  
    scrollView->setPosition(ccp(size.width/2,0));  
    scrollView->setDelegate(this);  
    scrollView->setViewSize(CCSizeMake(size.width, size.height/2));  
    scrollView->setContainer(containLayer);  
    scrollView->setDirection(kCCScrollViewDirectionVertical);  
    scrollView->setTouchEnabled(true);  
    scrollView->updateInset();  
  
    return true;  
}  
  
void HelloWorld::scrollViewDidScroll(CCScrollView* view)  
{  
    if( view->isDragging())  
    {  
        CCLOG("ScrollView移动");  
    }  
}  
  
void HelloWorld::scrollViewDidZoom(CCScrollView* view)  
{  
  
    CCLOG("ScrollView缩放");  
}  



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值