滑动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) 收起键盘 收起键盘 # ...
随机推荐
- Java之线程池(一)
在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统 ...
- 改善程序与设计的55个具体做法 day9
条款23:宁以non-member.non-friend替换member函数 即 以非成员函数 非友元函数 替换成员函数. 直观上,面向对象应该尽可能的封装,封装数据.封装操作等等,所以这个条款可能有 ...
- 每天一个Linux命令(13)less命令
less命令的作用与more十分相似,都可以用来浏览文字档案的内容,不同的是less命令允许用户向前或向后浏览文件,而more命令只能向前浏览. 用less命令显示文件时,用PageUp键向上翻页,用 ...
- 【leetcode刷题笔记】Combination Sum
Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C wher ...
- poj 1019 Number Sequence 【组合数学+数字x的位宽函数】
题目地址:http://poj.org/problem?id=1019 Number Sequence Time Limit: 1000MS Memory Limit: 10000K Total ...
- Hadoop 运行jar包时 java.lang.ClassNotFoundException: Class com.zhen.mr.RunJob$HotMapper not found
错误如下 Error: java.lang.RuntimeException: java.lang.ClassNotFoundException: Class com.zhen.mr.RunJob$H ...
- Web container==Servlet container
Web container From Wikipedia, the free encyclopedia (Redirected from Servlet container) Web co ...
- HDU 4714 Tree2cycle:贪心
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4714 题意: 给你一棵树,添加和删除一条边的代价都是1.问你将这棵树变成一个环的最小代价. 题解: 贪 ...
- BZOJ 2058 [Usaco2010 Nov]Cow Photographs:逆序对【环上最小逆序对】
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2058 题意: 给你一个由1~n组成的排列,首尾相接围成一个环. 你可以任意次交换其中两个相 ...
- EAV模型
了解EAV设计基本原理的最好方法就是理解行建模(row modelling,其中EAV是广义形式). 以一超市数据库为例,必须管理数以千计的产品和品牌,其中许多产品存在期很短暂.那么,显而易见,产品名 ...