ScrollView与TableView实现选择效果
在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实现选择效果的更多相关文章
- iOS中的截屏(屏幕截屏及scrollView或tableView的全部截屏)
iOS中的截屏(屏幕截屏及scrollView或tableView的全部截屏) 2017.03.16 12:18* 字数 52 阅读 563评论 4喜欢 2 1. 截取屏幕尺寸大小的图片并保存至相册 ...
- 利用select实现年月日三级联动的日期选择效果
× 目录 [1]演示 [2]规划 [3]结构生成[4]算法处理 前面的话 关于select控件,可能年月日三级联动的日期选择效果是最常见的应用了.本文是选择框脚本的实践,下面将对日期选择效果进行详细介 ...
- jquery仿淘宝规格颜色选择效果
jquery实现的仿淘宝规格颜色选择效果源代码如下 jquery仿淘宝规格颜色选择效果 -收缩HTML代码 运行代码 [如果运行无效果,请自行将源代码保存为html文件运行] <script t ...
- Listview控件实现已选择效果
Winform中用Listview控件实现更新点击选择后已选择效果,如图: 代码如下: private void frmSelect_Load(object sender, EventArgs e) ...
- 商城项目实战 | 1.1 Android 仿京东商城底部布局的选择效果 —— Selector 选择器的实现
前言 本文为菜鸟窝作者刘婷的连载."商城项目实战"系列来聊聊仿"京东淘宝的购物商城"如何实现. 京东商城的底部布局的选择效果看上去很复杂,其实很简单,这主要是要 ...
- iOS-关于一些手势冲突问题(scrollView 嵌套 tableView)
简单说下关于开发中容易遇到的父试图添加手势与子试图点击事件冲突,UIScrollView 嵌套 UIScrollView . UIScrollView 嵌套 UITableView的情况手势冲突问题: ...
- tableview中用动画效果改变cell的高度
我们要的效果大概就是如下效果: 当我们选择一个cell的时候,我们就要改变它的高度,并且以动画的形式. 我们该如何实现这个效果呢?我们主要需要使用以下这两个方法: - (CGFloat)tableVi ...
- Android 仿土巴兔选择效果
1,前两天在群里看到有人在讨论土巴兔的选择装修风格的效果,自己也想实现,果断百度一下,有些好的文章,就花了些时间来分析了下,先看看别人土巴兔原装的功能 2,可以看到,基本上可以使用一个vviewpag ...
- 论坛类应用双Tableview翻页效果实现
作为一名篮球爱好者,经常使用虎扑体育,虎扑体育应用最核心的部分就是其论坛功能,无论哪个版块,论坛都是其核心,而其论坛部分的实现又别具一格,它以两个tableview的形式翻页滚动显示,而不是常见的那种 ...
随机推荐
- mysql prepare语句使用
语法 PREPARE statement_name FROM sql_text /*定义*/ EXECUTE statement_name [USING variable [,variable...] ...
- ECSHOP编辑器Fckeditor上传图片中文名称乱码的解决方法
ECSHOP编辑器Fckeditor上传图片中文名称乱码的解决方法 ECSHOP教程/ ecshop教程网(www.ecshop119.com) 2015-02-11 中文名乱码是因为:FCKed ...
- Glut 回调函数小结
2014-04-08 16:25:50 void glutDisplayFunc(void (*func)(void)); 注册当前窗口的显示回调函数 参数: func:形为void func( ...
- 大理石在哪?(Where is the Marble?,UVa 10474)
参考:ACM紫书 第五章 P108 [排序与检索] 下面的代码中有些 提示性输出,想Ac 需删除提示性输出语句,读者自行修改. #include <cstdio> #include < ...
- 标题右边10px位置紧跟发布时间
一个ul列表,拥有若干li,内容是新闻标题,标题右边10px位置紧跟发布时间,当标题过长需要控制标题width,需要兼容ie6,不能用max-width h4{font-size:14px;heigh ...
- iOS Application Life Cycle 应用程序生命周期
应用程序的状态 IOS的应用程序一共有5种状态. Not running(未运行):程序未启动 Inactive(未激活):其他两个状态切换时出现的短暂状态.唯一在此状态停留时间比较长的情况是:当用户 ...
- Linux下链接mysql数据库的命令
一.MySQL 连接本地数据库,用户名为“root”,密码“123”(注意:“-p”和“123” 之间不能有空格) C:\>mysql -h localhost -u root -p123 二. ...
- Node.js 创建HTTP服务器(经过测试,这篇文章是靠谱的T_T)
Node.js 创建HTTP服务器 如果我们使用PHP来编写后端的代码时,需要Apache 或者 Nginx 的HTTP 服务器,并配上 mod_php5 模块和php-cgi. 从这个角度看,整个& ...
- 还原网站上被压缩的JS代码方便阅读
我们经常可以看到一些网站,把所需的javascript代码压缩成一行,就像下图这样: 这种代码浏览器能读懂,但正常人是没法阅读的. 既然浏览器能读,浏览器当然也能还原这段代码. 其实很简单.这里我使用 ...
- Linux 中的 wheel 组和 staff 组
wheel 组的概念 wheel 组的概念继承自 UNIX.当服务器需要进行一些日常系统管理员无法执行的高级维护时,往往就要用到 root 权限:而“wheel” 组就是一个包含这些特殊权限的用户池: ...