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的形式翻页滚动显示,而不是常见的那种 ...
随机推荐
- 最小圆覆盖(Smallest Enclosing Discs)
随机增量算法(a randomized incremental algorithm) #define sqr(x) ((x)*(x)) #define EPS 1e-4 struct P{ doubl ...
- FatMouse的交易问题
想按照某个值排序,用sort()函数,结果想了半天不知道用数组怎么解决,然后看了答案,才知道原来可以用struct,想想我真是笨死了.. 原题描述以及答案如下: Problem Description ...
- A.2 Main
程序的执行从类Main的方法main开始.方法main创建了一个词法分析器和一个语法分析器,然后调用语法分析器中的方法program. 1: package main: 2: import java. ...
- 转:Linux集群-----HA浅谈
通过特殊的软件将若干服务器连接在一起并提供故障切换功能的实体我们称之为高可用集群.可用性是指系统的uptime,在7x24x365的工作环境中,99%的可用性指在一年中可以有87小时36分钟的DOWN ...
- IOS 面试
1. #import , #include的区别 @import防止类的重复引用,#import 确定一个文件只能被导入一次,这使在递归包含中不会出现问题. @class一般用于头文件中需要声明该类的 ...
- 关于IntentFilter的几点注意事项:
http://blog.csdn.net/cnnumen/article/details/8464786 IntentFilter就是用于描述intent的各种属性, 比如action, catego ...
- JS参考书籍
参考书籍 初级读物:<JavaScript高级程序设计>:一本非常完整的经典入门书籍,被誉为JavaScript圣经之一,详解的非常详细,最新版第三版已经发布了,建议购买. 中级读物:&l ...
- centos6.4.yum-lamp环境设置
首先防火墙开启mysql:3306 apache 80 and 81端口: vi /etc/sysconfig/iptables -A INPUT -m state --state NEW -m tc ...
- meta中的viewport指令
网页手机wap2.0网页的head里加入下面这条元标签,在iPhone的浏览器中页面将以原始大小显示,并不允许缩放. <meta name="viewport" conten ...
- 深入理解Java中的继承
对于面向对象的程序设计而言,每一个程序员都应该去了解Java中的封装,继承和多态,那么我今天来说的主要是以继承为核心的主题. 一.关于对继承的理解. 继承是面向对象的三大特性之一,是java中实现代码 ...