#include "CScrollView_Self.h"
#include "cocos-ext.h"
USING_NS_CC_EXT;
int page;
CCScrollView_Self::CCScrollView_Self(void)
{
}
CCScrollView_Self::~CCScrollView_Self(void)
{
}
bool CCScrollView_Self::init(){
if(!CCLayer::init()){
return false;
}
page=0;
winSize=CCDirector::sharedDirector()->getWinSize();
this->setTouchEnabled(true);
scrollView = CCScrollView::create(this->getContentSize());
// 设定容器层,我们并不需要重新设置 scrollview 的 ContentSize,容器层内部设定即可
scrollView->setContainer(getContainLayer());
// 关闭 scrollView 的可触摸操作
scrollView->setTouchEnabled(false);
// 容器层内容实现
this->addChild(scrollView);
return true;
}
// 容器层内容实现
CCLayer* CCScrollView_Self::getContainLayer(){
m_nPageCount = 4;
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
CCPoint pointCenter = ccp(winSize.width / 2, winSize.height / 2);
CCLayer* layer = CCLayer::create();
layer->setPosition(CCPointZero);
// 添加 frame,每 一页 用一张背景图显示
for (int i = 0; i < m_nPageCount; i++) {
CCSprite* frame = CCSprite::create("HelloWorld.png");
frame->setPosition(ccpAdd(pointCenter, ccp(winSize.width * i, 0)));
layer->addChild(frame);
}
layer->setContentSize(CCSizeMake(winSize.width * m_nPageCount, winSize.height));
return layer;
}
CCScene* CCScrollView_Self::scene(){
CCScene* scene = CCScene::create();
CCScrollView_Self * layer = CCScrollView_Self::create();
scene->addChild(layer);
return scene;
}
// 关闭 scrollview 的触摸,相应的,我们要启用当前的触摸,并注册为单点触摸类型
void CCScrollView_Self::registerWithTouchDispatcher(){
CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 0, true);
}
bool CCScrollView_Self::ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent){
// 记录触摸起始点的位置8.
m_touchPoint = CCDirector::sharedDirector()->convertToGL(pTouch->getLocationInView());
// 记录触摸起始点的偏移
m_touchOffset = scrollView->getContentOffset();
return true;
}
void CCScrollView_Self::ccTouchMoved(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent){
CCPoint movePoint = CCDirector::sharedDirector()->convertToGL(pTouch->getLocationInView());
// 获得当前的拖动距离
float distance = movePoint.x - m_touchPoint.x;
// 设定当前偏移位置
CCPoint adjustPoint = ccp(m_touchOffset.x + distance, 0);
// 让 scrollView 跟着 move 操作而移动
scrollView->setContentOffset(adjustPoint, false);
}
void CCScrollView_Self::ccTouchEnded(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent){
CCPoint endPoint = CCDirector::sharedDirector()->convertToGL(pTouch->getLocationInView());
float distance = endPoint.x - m_touchPoint.x;
if (fabs(distance) < 3){
// 小于三,不做拖动操作,也排除了(抖动误操作)
}else if (fabs(distance) > 50){
// 大于 50,执行拖动效果
adjustScrollView(distance);
}else{
// 回退为拖动之前的位置36.
adjustScrollView(0);
}
}
void CCScrollView_Self::adjustScrollView(float offset){
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
// 我们根据 offset 的实际情况来判断移动效果
if (offset < 0) // 表示右移49.
m_nCurPage ++;
else if (offset > 0)
m_nCurPage --;
// 屏幕 页数 检测54.
if (m_nCurPage < 0)
m_nCurPage = 0;
else if (m_nCurPage > m_nPageCount - 1)
m_nCurPage = m_nPageCount - 1;
// 根据当前的 页数 获得偏移量,并设定新的位置,且启用动画效果60.
CCPoint adjustPoint = ccp(-winSize.width * m_nCurPage , 0);
scrollView->setContentOffsetInDuration(adjustPoint, 0.2f);
CCLog("current page index: %d", m_nCurPage);
}