CCScrollView的拖动,自适应到合适位置

#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);

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值