滑动swipe的妙用
转自:http://www.cnblogs.com/NEOCSL/archive/2013/03/04/2942861.html
iterface ITouchable; function OnPick(ETouchType type,float x,float y);
1.定义一个接口。这个接口由MenuObject来实现,也就是所有的按钮Object。

class AntMenuObject extends MobileMenuObject implements(ITouchable); function OnPick(ETouchType type,float x,float y)
{
if(bIsActive)
{
if(CheckBound(x,y))
{
bIsHightLighted=true;
bIsTouched=true;
}
else if(Type==Touch_Ended||Type==Touch_Cancelled)
{
bIsHightLighted=false;
bIsTouched=false;
} }
else
{
bIsHightLighted=true;
bIsTouched=true;
}
} function bool CheckBound(x,y)
{
if(x>=left&&x<=Left+width&&YTop&&Y>=Top&&Y<=Top+Height)
{
return true;
}
return false
}

CheckSwipe是一个功能性非常强的函数,该函数可以检测屏幕是划过还是点击。只能在MenuScene中进行检查,因为只有整个屏幕才能检测是否划过。

function bool OnSceneTouch(ETouchType EventType, float TouchX, float TouchY,bool bInside)
{
if(EventType==Touch_Began)
{
bSwipe=false;
StartTouchLocation.x=TouchX;
StartTouchLocation.y=TouchY;
}
else if(EventType==Touch_Moved)
{
CurrentTouchLocation.x=TouchX;
CurrentTouchLocation.y=TouchY; CheckSwipe();
}
}

检测Swipe就是检测两者之间的距离
function bool CheckSwipe()
{
return bSwipe=VSize(StartTouchLocation-CurrentTouchLocation)>SwipeTolerance;
}
2.最重要的地方是List的列表处理,秉承着列表优先原则,但是如果处理不了列表就可以让实现接口的ITouchable,OnPick

if(List.bIsHidden||List==none)
{
foreach MenuObjects(Touchable)
{
if(ITouchable(Toucable)!=none)
{
ITouchable(Touchable).OnPick(EventType,TouchX,TouchY);
}
}
}

否则就处理列表
if(!List.bIsHidden&&List!=none)
{
ITouchable(List).OnPick(EventType,TouchX,TouchY);
}
我们先进入List看看他的OnPick函数是怎么针对Swipe和Touch做处理的。That's very important。
OnPick处理滑动动作,并且感应器范围检测是否为bSwipe,如果是就滚动页面,不是就让foreach Items(Label) {Label.OnPick(EventType,X,Y);}
3.现在根据这个代理我们被引入到Button中,Lable是在List中对所有添加的AntMobileMenuButton的遍历引用按钮。
AntMobileMenuButton中对OnPick做了代理

delegate OnClick(ETouchType EventType,float X,float Y); function OnPick(ETouchType EventType,float x,float y)
{
//CheckBounds(x,y)Objects内定义的有没有在边界内
if(EventType==Touch_End&&CheckBounds(X,Y))
{
//在List的AddItem中可以看到,将NewItem.OnClick=OnSelect;了
//于是我们赶快进入OnSelect中一探究竟,这可是对按钮做对应动作处理的地方
//我很好奇点下按钮我到底在哪里添加功能
OnClick(self,x,y);
}
}

注意OnClick的第一个参数接受的是自己,button类别,也就是Sender消息。
4.我们进入List的OnSelect中分析

function OnSelect(AntMobileMenuObject sender,float x,float y)
{
local AntMobileMenuButton label;
local int i; //起先设置i为第一个,以后我需不需要这个还说不定
i=0; //若果有接收信号输出,我们就遍历看是哪个按钮接收的
if(AntMobileMenuButton(Sender)!=none)
{
foreach Items(label)
{
//匹配对应的按钮,然后执行动作
if(label==AntMobileMenuButton(Sender)
{
//在这里添加对应的执行内容,例如武器的引用
//最后用按钮来对应具体的动作,例如玩家的武器列表
//通知列表选择的哪个
SelectedIndex=i;
Sender.bIsHighLighted=true;
//同时我们发现了一个新代理
OnChange(i,Label.Caption,X,Y); //后边我们看看这个代理被分配到了哪里
break;
}
i++;
} }
ScrollAmount=0;
ScrollInertia=0;
}

代理的声明,看看在ComboBox中哪里将会将List.OnChange=?
delegate OnChange(int Idx,string item,float x,float y);
5.进入ComboBox
在初始化的时候将List的OnChange分配给了OnSelect,然后执行选中的动作,也就是关闭List,但是问题来了,即使没有分配OnChange代理也能成功。
滑动swipe的妙用的更多相关文章
- 移动端tab滑动和上下拉刷新加载
移动端tab滑动和上下拉刷新加载 查看demo(请在移动端模式下查看) 查看代码 开发该插件的初衷是,在做一个项目时发现现在实现移动端tab滑动的插件大多基于swiper,swiper的功能太强大而我 ...
- Python Appium 滑动、点击等操作
Python Appium 滑动.点击等操作 1.手机滑动-swipe # FileName : Tmall_App.py # Author : Adil # DateTime : 2018/3/25 ...
- 『与善仁』Appium基础 — 23、操作滑动的方式
目录 1.swipe滑动 2.scroll滑动 3.drag拖拽事件 4.滑动方法小结 5.拓展:多次滑动 6.综合练习 在Appium中提供了三种滑动的方式,swipe滑动.scroll滑动.dra ...
- 移动开发框架剖析(二) Hammer专业的手势控制
浏览器底层并没有给元素提供类似,单击,双击,滑动,拖动这些直接可以用的控制接口,一切的手势动作都只能通过模拟出来.移动端浏览器唯一给我们提供的就只是mousedown -> mousemove ...
- Zepto.js touch模块深入分析
目的:记录 Zepto.js touch模块 源码阅读 源码: // Zepto.js // (c) 2010-2015 Thomas Fuchs // Zepto.js may be freely ...
- Appium 客户端库 API
## Appium 客户端库 Appium 有对应以下语言的客户端库: 语言 | 代码 :--|--:[Ruby][rubygems] | [GitHub](https://github.com/ap ...
- 【IOS笔记】Gesture Recognizers
Gesture Recognizers Gesture recognizers convert low-level event handling code into higher-level acti ...
- 手势识别(一)--手势基本概念和ChaLearn Gesture Challenge
以下转自: http://blog.csdn.net/qq1175421841/article/details/50312565 像点击(clicks)是GUI平台的核心,轻点(taps)是触摸平台的 ...
- Appium绑定
锁定 锁定屏幕 # python driver.lock(5) 将 app 置于后台 把当前应用放到后台去 # python driver.background_app(5) 收起键盘 收起键盘 # ...
随机推荐
- Delphi 对话框实现源码分析
Delphi 对话框实现源码分析 简介 在这篇文章中,我将大概的从Delphi XE2 的Dialogs单元入手,分析ShowMessage,MessageBox等对话框运行原理,希望能帮助你理解 ...
- Linux mariadb(Mysql)的主从复制架构
mysql的主从复制架构,需要准备两台机器,并且可以通信,安装好2个mysql,保持版本一致性 mysql -v 查看数据库版本 1.准备主库的配置文件 /etc/my.cnf 写入开启主库的参数[ ...
- go语言之接口一
在Go语言中,一个类只需要实现了接口要求的所有函数,我们就说这个类实现了该接口 我们定义了一个File类,并实现有Read().Write().Seek().Close()等方法.设 想我们有如下接口 ...
- IDEA main方法自动补全(转发:http://blog.csdn.net/zjx86320/article/details/52684601)
最近刚从Eclipse转到IDEA,各种学习丫,IDEA里的main方法是不能自动补齐的,肿么办呢? 1.首先,点击File-->Settings-->Editor-->Live T ...
- PHP数据库链接类(PDO+Access)实例分享
这篇文章主要介绍了PHP数据库链接类(PDO+Access),有需要的朋友可以参考一下 PHP PDO Access链接 复制代码代码如下: class DbHelpClass { ...
- 每天一个Linux命令(9)mv命令
mv命令用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中. 注意事项:mv与cp的结果不同,mv好像文件“搬家”,文件个数并未增加.而cp对文件进行复制,文件个数增加了. (1) ...
- 《程序员代码面试指南》第三章 二叉树问题 Tarjan算法与并查集解决二叉树节点间最近公共祖先的批量查询问题
题目待续.... Tarjan算法与并查集解决二叉树节点间最近公共祖先的批量查询问题 java代码
- windows下安装pywin32报错:close failed in file object destructor:sys.excepthook is missing lost sys.stderr
今晚要写搜索引擎作业,搭scrapy环境,遇到了下面问题: windows下安装pywin32报错:close failed in file object destructor:sys.excepth ...
- Blog迁移至Jekyll
后续的Blog都将在 http://zhwbqd.github.io/ 为您呈现
- 各种IoC框架下实现AOP
.Net AOP(五) 各种IoC框架下实现AOP 利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率 主要功能 日志记录,性 ...