在cocos2dx中,ScrollView与TableView都可以实现选择效果,其中ScrollView较为原始,TableView的格子大小可以不与winSize一样大。

ScrollView实现

#include "T25ScrollView.h"
#include "AppMacros.h" CCScene* T25ScrollView::scene()
{
CCScene *scene=CCScene::create();
T25ScrollView* layer=T25ScrollView::create();
scene->addChild(layer);
return scene;
} bool T25ScrollView::init()
{
CCLayer::init();
CCNode *node=CCNode::create();
_node=node;
char buf[]="a";
for (int i=0;i<5;i++)
{
CCSprite *s=CCSprite::create("HelloWorld.png");
node->addChild(s);
s->setPosition(ccp(i*winSize.width,0));
s->setAnchorPoint(ccp(0,0)); CCLabelTTF *label=CCLabelTTF::create(buf,"Arial",24);
buf[0]++;
s->addChild(label);
label->setPosition(ccp(winSize.width/2,winSize.height/2)); }
CCScrollView *view=CCScrollView::create(winSize,node);
addChild(view);
view->setDirection(kCCScrollViewDirectionHorizontal);
view->setContentSize(CCSizeMake(winSize.width*5,winSize.height));
view->setBounceable(false); //get rid of elastic setTouchEnabled(true);
setTouchMode(kCCTouchesOneByOne);
return true;
} bool T25ScrollView::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent)
{ return true;
}
void T25ScrollView::adjustViewPosition(float dt)
{
//calculate
int fitPos[]={0,-winSize.width,-winSize.width*2,-winSize.width*3,-winSize.width*4};
int x=_node->getPositionX();
int i;
for(i=0;i<5;i++)
{
int dist=abs(fitPos[i]-x);
if (dist<winSize.width/2)
{
break;
}
} CCPoint ptDest=ccp(fitPos[i],0);
_node->runAction(CCMoveTo::create(0.2f,ptDest));
}
void T25ScrollView::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent)
{
//judge if is slider
if (isSlider(pTouch))
{
//adjust position
scheduleOnce(schedule_selector(T25ScrollView::adjustViewPosition),0.05f);
return;
}
//judge which position is clicked
CCPoint ptWorld=pTouch->getLocation();
CCPoint ptNode=_node->convertToNodeSpace(ptWorld);
int index=ptNode.x/winSize.width;
CCLog("click index =%d",index);
} bool T25ScrollView::isSlider(CCTouch *PTouch)
{
CCPoint ptCur=PTouch->getLocation();
CCPoint ptStart=PTouch->getStartLocation();
if (ptCur.getDistanceSq(ptStart)>25)
{
return true; } return false;
}

TableView实现

#include "T26TableView.h"
#include "AppMacros.h" CCScene* T26TableView::scene()
{
CCScene *scene=CCScene::create();
T26TableView* layer=T26TableView::create();
scene->addChild(layer);
return scene;
} bool T26TableView::init()
{
CCLayer::init();
CCSize cellSize=CCSize(80,80);
_cells=CCArray::create();
_cells->retain();
for(int i=0;i<5;i++)
{
CCTableViewCell *cell=new CCTableViewCell;
_cells->addObject(cell);
cell->autorelease(); CCSprite *sprite=CCSprite::create("p_2_01.png");
cell->addChild(sprite);
sprite->setPosition(ccp(cellSize.width/2,cellSize.height/2)); }
CCTableView *view=CCTableView::create(this,CCSize(cellSize.width*3,cellSize.height)); addChild(view);
view->setDirection(kCCScrollViewDirectionHorizontal);
view->reloadData();
view->setPosition(ccp(200,200));
//response click
view->setDelegate(this);
return true;
}

其中在TableView中使用了代理的设计模式,类要继承public CCTableViewDataSource,public CCTableViewDelegate,并且实现他们的纯虚函数,从而达到代理的效果

运行效果

ScrollView与TableView实现选择效果的更多相关文章

  1. iOS中的截屏(屏幕截屏及scrollView或tableView的全部截屏)

    iOS中的截屏(屏幕截屏及scrollView或tableView的全部截屏) 2017.03.16 12:18* 字数 52 阅读 563评论 4喜欢 2 1. 截取屏幕尺寸大小的图片并保存至相册 ...

  2. 利用select实现年月日三级联动的日期选择效果

    × 目录 [1]演示 [2]规划 [3]结构生成[4]算法处理 前面的话 关于select控件,可能年月日三级联动的日期选择效果是最常见的应用了.本文是选择框脚本的实践,下面将对日期选择效果进行详细介 ...

  3. jquery仿淘宝规格颜色选择效果

    jquery实现的仿淘宝规格颜色选择效果源代码如下 jquery仿淘宝规格颜色选择效果 -收缩HTML代码 运行代码 [如果运行无效果,请自行将源代码保存为html文件运行] <script t ...

  4. Listview控件实现已选择效果

    Winform中用Listview控件实现更新点击选择后已选择效果,如图: 代码如下: private void frmSelect_Load(object sender, EventArgs e) ...

  5. 商城项目实战 | 1.1 Android 仿京东商城底部布局的选择效果 —— Selector 选择器的实现

    前言 本文为菜鸟窝作者刘婷的连载."商城项目实战"系列来聊聊仿"京东淘宝的购物商城"如何实现. 京东商城的底部布局的选择效果看上去很复杂,其实很简单,这主要是要 ...

  6. iOS-关于一些手势冲突问题(scrollView 嵌套 tableView)

    简单说下关于开发中容易遇到的父试图添加手势与子试图点击事件冲突,UIScrollView 嵌套 UIScrollView . UIScrollView 嵌套 UITableView的情况手势冲突问题: ...

  7. tableview中用动画效果改变cell的高度

    我们要的效果大概就是如下效果: 当我们选择一个cell的时候,我们就要改变它的高度,并且以动画的形式. 我们该如何实现这个效果呢?我们主要需要使用以下这两个方法: - (CGFloat)tableVi ...

  8. Android 仿土巴兔选择效果

    1,前两天在群里看到有人在讨论土巴兔的选择装修风格的效果,自己也想实现,果断百度一下,有些好的文章,就花了些时间来分析了下,先看看别人土巴兔原装的功能 2,可以看到,基本上可以使用一个vviewpag ...

  9. 论坛类应用双Tableview翻页效果实现

    作为一名篮球爱好者,经常使用虎扑体育,虎扑体育应用最核心的部分就是其论坛功能,无论哪个版块,论坛都是其核心,而其论坛部分的实现又别具一格,它以两个tableview的形式翻页滚动显示,而不是常见的那种 ...

随机推荐

  1. getchar() 和 scanf("%c")的区别

    getchar()和scanf("%c")的功能都是从STDIN读一个字符,单论功能两者没有区别. 但两者的返回值是有区别的: -------------------------- ...

  2. java操作MySQL数据事务的简单学习

    在执行数据更改操作前使用数据库连接对象调用setAutoCommit方法(conn.setAutoCommit(false)),其参数true或false区别: true:sql命令的提交(commi ...

  3. js实现鼠标点击input框后里面的内容就消失代码

    <!--# <a href="http://www.mianfeimoban.com/texiao_mb/" target="_blank" cla ...

  4. Integer Inquiry

    Integer Inquiry Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Sub ...

  5. MFC 中控件的启用与禁用

    启用和禁用控件可以调用CWnd::EnableWindow 函数. BOOL EnableWindow(BOOL bEnable = TRUE); 判断控件是否可用可以调用 CWnd::IsWindo ...

  6. [Effective JavaScript 笔记] 第1章:让自己习惯javascript小结

    在这里整理一下,每条对应的提示 第1条:了解使用的js版本 确定应用程序支持的js的版本(浏览器也是应用程序噢) 确保使用的js特性是应用程序支持的(要不写了也运行不了) 总是在严格模式下编写和测试代 ...

  7. IOS 入门开发之创建标题栏UINavigationBar的使用(二)

    IOS 入门开发之创建标题栏UINavigationBar的使用 http://xys289187120.blog.51cto.com/3361352/685746     IOS 开发有关界面的东西 ...

  8. cocos2d调度器(定时执行某函数)

    调度器(scheduler) 继承关系 原理介绍 Cocos2d-x调度器为游戏提供定时事件和定时调用服务.所有Node对象都知道如何调度和取消调度事件,使用调度器有几个好处: 每当Node不再可见或 ...

  9. 入侵检测课设之Libnids开发包

    Libnids开发包介绍     Libnids是一个用于网络入侵检测开发的专业编程接口,它使用了Libpcap所以它具有捕获数据包的功能.同时,Libnids提供了TCP数据流重组功能,所以对于分析 ...

  10. [POJ1003]Hangover

    [POJ1003]Hangover 试题描述 How far can you make a stack of cards overhang a table? If you have one card, ...