转自: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的妙用的更多相关文章

  1. 移动端tab滑动和上下拉刷新加载

    移动端tab滑动和上下拉刷新加载 查看demo(请在移动端模式下查看) 查看代码 开发该插件的初衷是,在做一个项目时发现现在实现移动端tab滑动的插件大多基于swiper,swiper的功能太强大而我 ...

  2. Python Appium 滑动、点击等操作

    Python Appium 滑动.点击等操作 1.手机滑动-swipe # FileName : Tmall_App.py # Author : Adil # DateTime : 2018/3/25 ...

  3. 『与善仁』Appium基础 — 23、操作滑动的方式

    目录 1.swipe滑动 2.scroll滑动 3.drag拖拽事件 4.滑动方法小结 5.拓展:多次滑动 6.综合练习 在Appium中提供了三种滑动的方式,swipe滑动.scroll滑动.dra ...

  4. 移动开发框架剖析(二) Hammer专业的手势控制

    浏览器底层并没有给元素提供类似,单击,双击,滑动,拖动这些直接可以用的控制接口,一切的手势动作都只能通过模拟出来.移动端浏览器唯一给我们提供的就只是mousedown -> mousemove ...

  5. Zepto.js touch模块深入分析

    目的:记录 Zepto.js touch模块 源码阅读 源码: // Zepto.js // (c) 2010-2015 Thomas Fuchs // Zepto.js may be freely ...

  6. Appium 客户端库 API

    ## Appium 客户端库 Appium 有对应以下语言的客户端库: 语言 | 代码 :--|--:[Ruby][rubygems] | [GitHub](https://github.com/ap ...

  7. 【IOS笔记】Gesture Recognizers

    Gesture Recognizers Gesture recognizers convert low-level event handling code into higher-level acti ...

  8. 手势识别(一)--手势基本概念和ChaLearn Gesture Challenge

    以下转自: http://blog.csdn.net/qq1175421841/article/details/50312565 像点击(clicks)是GUI平台的核心,轻点(taps)是触摸平台的 ...

  9. Appium绑定

    锁定 锁定屏幕 # python driver.lock(5) 将 app 置于后台 把当前应用放到后台去 # python driver.background_app(5) 收起键盘 收起键盘 # ...

随机推荐

  1. Delphi 对话框实现源码分析

    Delphi 对话框实现源码分析   简介 在这篇文章中,我将大概的从Delphi XE2 的Dialogs单元入手,分析ShowMessage,MessageBox等对话框运行原理,希望能帮助你理解 ...

  2. 从内存中加载并启动一个exe

    windows似乎只提供了一种启动进程的方法:即必须从一个可执行文件中加载并启动.而下面这段代码就是提供一种可以直接从内存中启动一个exe的变通办法.用途嘛, 也许可以用来保护你的exe,你可以对要保 ...

  3. Linux显示网络相关信息

    netstat -tlun    查看本机监听的端口 netstat -an      查看本机所有的网络连接 netstat -rn      查看本机路由表 -t TCP协议 -u UDP协议 - ...

  4. 编程算法 - 最好牛线(Best Cow Line) 代码(C)

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u012515223/article/details/37909933 最好牛线(Best Cow L ...

  5. Java mail 发送邮件 主题(标题)乱码

    最近开发遇到Javamail  发送邮件标题乱码问题,腾讯.网易邮箱不会乱码,阿里邮箱  标题则会乱码.解决办法: String subject = MimeUtility.encodeWord(ma ...

  6. python3函数内全局变量使用global

    def p_num(): global num num = 10 print (num) num = 5 p_num() print(num)

  7. sonarQube使用maven进行检查

    1.在maven的中找到setting配置文件.在setting.xml中增加sonarqube配置.如下: <profiles> <profile> <id>so ...

  8. Elasticsearch的几种架构(ELK,EL,EF)性能对比测试报告

    Elasticsearch的几种架构性能对比测试报告 1.前言 选定了Elasticsearch作为存储的数据库,但是还需要对Elasticsearch的基础架构做一定测试,所以,将研究测试报告输出如 ...

  9. 简介windows的环境变量

    环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数,比如临时文件夹位置和系统文件夹位置等.这点有点类似于DOS时期的默认路径,当你运行某些程序时除了在当前文件夹中寻找外,还会到设置的默认路 ...

  10. UNIDBgrid里动态添加clientevents实现回车替换TAB

    //GRID里回车替换TABfunction cellkeydown(sender, td, cellIndex, record, tr, rowIndex, e, eOpts){ if (e.get ...